Introducción
Cuando tu equipo de plataforma pasa de proveer infraestructura a garantizar una entrega ágil y segura de aplicaciones, el desafío es mantener la velocidad de los desarrolladores sin sacrificar los guardrails operativos. En entornos VMware Cloud Foundation (VCF) 9 con vSphere Kubernetes Service (VKS), esto se traduce en construir un pipeline de CI/CD que automatice despliegues, valide imágenes en tiempo real y mantenga la observabilidad completa. Este artículo te guía para integrar Harness como orquestador de pipelines, Wiz para escaneo de vulnerabilidades y Dynatrace para monitoreo continuo, todo sobre VKS con un modelo de consumo basado en Infrastructure as Code (IaC) y Helm.
El resultado será un flujo GitOps donde el repositorio Git es la fuente de verdad única, las imágenes se escanean antes de llegar al clúster y los despliegues fallidos o con regresión de performance se revierten automáticamente antes de afectar entornos productivos.
Qué es y para qué sirve
GitOps en VKS con Harness: GitOps es una metodología que usa Git como el único origen de verdad para el estado de tus clústeres Kubernetes. Harness GitOps permite gestionar el ciclo de vida de aplicaciones y clústeres VKS con pipelines declarativos, donde los cambios se aplican mediante pull requests y se sincronizan automáticamente. Esto elimina la necesidad de herramientas comokubectl manuales y reduce errores humanos.Shift-Left Security con Wiz: Integrar Wiz en el pipeline de CI te permite escanear imágenes de contenedores antes de que lleguen a tu clúster VKS. Wiz detecta vulnerabilidades conocidas (CVE), malas configuraciones (como pods con permisos elevados) y fugas de secretos, bloqueando automáticamente el despliegue si el riesgo supera un umbral definido.Observabilidad y Rollback Automático con Dynatrace: Dynatrace OneAgent en VKS recopila métricas de rendimiento, tasas de error y logs en tiempo real. Harness puede consultar estos datos durante el despliegue y, si detecta una regresión (por ejemplo, aumento del 20% en errores 5xx o latencia >100ms), automáticamente realiza un rollback a la versión anterior, evitando que los problemas lleguen a producción.Prerequisitos
| Componente | Versión mínima | Notas |
|---|---|---|
| VMware vSphere | 8.0 U3+ | Requiere VCF 9 con VKS habilitado. |
| Harness SaaS | 1.120+ | Plan Enterprise o superior. |
| Harness Delegate | 1.0.0+ | Debe correr en un namespace de VKS con permisos de cluster-admin. |
| Wiz | SaaS | Integración via API Key. |
| Dynatrace | 1.280+ | Requiere OneAgent instalado en el clúster VKS (ver paso 5). |
| Helm | 3.14+ | Usado para instalar el Harness Delegate y aplicaciones. |
| kubectl | 1.28+ | Compatible con Kubernetes 1.28+. |
| yq (procesador YAML) | 4.36+ | Para manipular archivos de valores Helm antes de aplicar cambios. |
| Docker/Podman | última | Solo necesario si vas a construir imágenes localmente. |
- Acceso a VCF 9: Debes tener permisos de Cloud Admin en vCenter para crear clústeres VKS.
- API Key de Harness: Generada en la consola de Harness SaaS (perfil > API Keys).
- Token de Wiz: Obtenido en la consola de Wiz (Settings > API Keys).
- Token de Dynatrace: Generado en la consola de Dynatrace (Settings > Integration > API Tokens).
- Repositorio Git: Acceso de escritura para el Harness Delegate (puede ser GitHub, GitLab, Bitbucket o Azure Repos).
Guía paso a paso
Paso 1: Bootstrap del clúster VKS con IaC
Usaremos Terraform para crear el clúster VKS en VCF y configurar los prerequisitos para Harness, Wiz y Dynatrace.
- Clona el repositorio de ejemplo:
git clone https://github.com/vmware-tanzu/vcf-vks-iac.git && cd vcf-vks-iac/terraform
- Configura el archivo
terraform.tfvarscon tus credenciales de VCF:
vcf_username = "[email protected]"
vcf_password = "tu-contraseña-encriptada-en-base64" # Usa `echo -n "tu-contraseña" | base64`
vcf_server = "vcsa.vmware.local"
cluster_name = "vks-gitops-demo"
datacenter = "SDDC-Datacenter"
resource_pool = "RP-VKS-Workloads"
- Inicializa y aplica Terraform:
terraform init -upgrade
terraform apply -auto-approve
Resultado esperado:– Se crea un clúster VKS llamado vks-gitops-demo.
– Se genera un archivo kubeconfig en ./output/kubeconfig.yaml.
– Se crean los namespaces harness, wiz y dynatrace (opcional, pero recomendado para aislamiento).
Paso 2: Instalación del Harness Delegate en VKS
El Delegate actúa como puente entre Harness SaaS y tu clúster VKS interno, permitiendo que los pipelines se ejecuten sin exponer credenciales sensibles.
- Instala el Delegate usando Helm:
helm repo add harness-delegate https://app.harness.io/storage/harness-download/delegate
helm repo update
- Genera el archivo de valores personalizado
delegate-values.yaml:
delegateName: vks-gitops-delegate
namespace: harness
accountId: TU_ACCOUNT_ID_DE_HARNESS
delegateToken: TU_TOKEN_DE_DELEGATE # Generado en Harness SaaS: Account Settings > Delegates > + New Delegate
clusterName: vks-gitops-demo
- Aplica la instalación:
helm install vks-gitops-delegate harness-delegate/harness-delegate \
--namespace harness \
--create-namespace \
-f delegate-values.yaml
- Verifica que el Delegate esté corriendo:
kubectl get pods -n harness
Resultado esperado: NAME READY STATUS RESTARTS AGE
vks-gitops-delegate-abc123-xyz456 2/2 Running 0 2m
Paso 3: Configuración de GitOps en Harness
GitOps en Harness usa Git Sync para mantener el estado del clúster sincronizado con el repositorio Git.
- En la consola de Harness SaaS, ve a GitOps > Repositories > + New Repository.
- Configura el repositorio remoto:
– Repo URL: https://github.com/tu-org/vks-gitops-manifests.git
– Branch: main
– Authentication: Usa un token de acceso personal (GitHub) o credenciales SSH.
- Crea una Application en GitOps:
vks-gitops-app– Repository: Selecciona el repo configurado.
– Path: ./apps/nginx (o el directorio donde están tus manifests Helm).
- Sincroniza manualmente por primera vez:
– Harness crea un Application en tu clúster VKS con los manifests del repositorio.
– Verifica con:
kubectl get applications.argoproj.io -n harness
Paso 4: Integración de Wiz en el pipeline de CI
Wiz escanea imágenes de contenedores antes de que sean desplegadas, bloqueando el pipeline si detecta riesgos altos.
- En la consola de Harness SaaS, ve a Pipelines > + New Pipeline.
- Configura un CI Pipeline:
vks-app-build-scan– Stages: Añade un Build y un Security Scan.
- En la etapa Build, configura el paso para construir la imagen:
- step:
type: BuildAndPushDockerRegistry
name: Build and Push
identifier: build_and_push
spec:
connectorRef: dockerhub-connector # Configurado previamente en Harness
repo: tu-org/nginx
tags:
- latest
- commit-${build.commitSha}
- Añade una etapa Security Scan con Wiz:
- step:
type: Wiz
name: Wiz Vulnerability Scan
identifier: wiz_scan
spec:
wizConnectorRef: wiz-connector # Configurado en Harness con tu token de Wiz
targetName: "nginx-app"
policy: "Harness-Medium" # Usa una política predefinida o personalizada
failOnSeverity: "High" # Bloquea si hay vulnerabilidades de alta severidad
- Guarda y ejecuta el pipeline. Resultado esperado:
– Si todo está bien, la imagen se empuja a tu registry privado y se etiqueta con el commit SHA.
Paso 5: Despliegue seguro con GitOps y Dynatrace
Ahora configuraremos el pipeline de despliegue (CD) que usa GitOps para aplicar cambios y Dynatrace para validar el estado del clúster.
- Crea un CD Pipeline en Harness:
vks-app-deploy– Stages:
– Git Sync: Para sincronizar el repositorio con el clúster.
– Health Check: Para validar el despliegue con Dynatrace.
- Configura la etapa Git Sync:
- step:
type: GitOpsSync
name: Sync with Git
identifier: gitops_sync
spec:
applicationName: vks-gitops-app
syncOption:
prune: true
selfHeal: true
- Añade una etapa Health Check con Dynatrace:
- step:
type: Dynatrace
name: Dynatrace Health Check
identifier: dynatrace_health
spec:
dynatraceConnectorRef: dynatrace-connector # Configurado con tu token de Dynatrace
metricQueries:
- "builtin:service.response.time:filter=and(or(service.name(nginx))):splitBy():avg:auto:sort(value(avg,descending)):limit(10)"
- "builtin:service.errors.total.rate:filter=and(or(service.name(nginx))):splitBy():sum:auto"
thresholds:
responseTime: 100 # ms
errorRate: 0.05 # 5%
- Configura un Rollback Automático si falla el Health Check:
- step:
type: RollbackGitOps
name: Auto Rollback
identifier: auto_rollback
spec:
applicationName: vks-gitops-app
prune: true
- Ejecuta el pipeline. Resultado esperado:
– Dynatrace verifica que la nueva versión cumpla con los umbrales definidos.
– Si falla (ej. latencia >100ms o error rate >5%), Harness automáticamente revierte el despliegue a la versión anterior.
Consideraciones y buenas prácticas
Limitaciones conocidas:
- Latencia en rollbacks: Si Dynatrace tarda más de 30 segundos en detectar una regresión, el rollback puede no ser instantáneo. Configura umbrales realistas (ej. espera 2 minutos antes de revertir).
- Costo de herramientas: Wiz y Dynatrace son SaaS y pueden generar costos variables según el volumen de escaneos o métricas. Monitorea el consumo mensual en sus consolas.
- Permisos del Harness Delegate: El Delegate requiere permisos elevados (
cluster-admin) para aplicar manifests. Aíslalo en un namespace dedicado (ej.harness) para reducir la superficie de ataque.
Alternativas:
- Para entornos sin Dynatrace: Usa Prometheus + Grafana como alternativa para métricas. Harness tiene integraciones nativas con ambos.
- Para escaneo de imágenes: Si Wiz no es viable, considera Trivy (open-source) como paso en el pipeline de CI.
Buenas prácticas:
- Políticas de Wiz: Define políticas específicas para tu entorno (ej. «No permitir pods con
privileged: true«). - Testing en staging: Usa un clúster VKS de staging para probar pipelines antes de aplicarlos a producción.
- Canary Deployments: Para aplicaciones críticas, configura un pipeline de canary con Harness y usa Dynatrace para comparar métricas entre versiones.
Conclusión
Hemos construido un pipeline de CI/CD y GitOps en VKS que:
- Automatiza el despliegue de aplicaciones usando Git como origen de verdad.
- Valida imágenes de contenedores con Wiz antes de llegar al clúster.
- Monitorea el estado del clúster en tiempo real con Dynatrace y revierte automáticamente si detecta regresiones.
Este enfoque no solo acelera la entrega de aplicaciones, sino que también reduce riesgos operativos al integrar seguridad y observabilidad desde las primeras etapas del ciclo de vida. Con esta configuración, tu equipo de plataforma puede ofrecer un «camino dorado» (Golden Path) para los desarrolladores: rápido, seguro y observable por defecto.
Fuentes
- Streamlining CI/CD and GitOps on VMware vSphere Kubernetes Service with Harness, Wiz, and Dynatrace
- CISA Alerts: Vulnerabilidades en Kubernetes
- Envoy Proxy Blog: Best Practices para GitOps
