Cómo hacer GitOps para AKS con Flux CD en Infraestructura como Código y DevOps
Se explica cómo configurar un flujo GitOps para un cluster AKS usando Flux CD: útil para automatizar despliegues, tener historial en Git y permitir rollback seguro en Infraestructura como Código y DevOps.
Prerequisitos
- Cuenta Azure con permisos para crear recursos.
- kubectl, az, flux CLI instalados localmente.
- Cluster AKS creado y contexto kubectl configurado.
- Repositorio Git (GitHub, Azure Repos) donde guardar manifests YAML.
Paso 1: Preparar el repositorio Git para GitOps
El repositorio debe contener una estructura clara con manifests Kubernetes (deployments, services, kustomize o Helm charts). Aquí usamos una carpeta "clusters/production" con Kustomize para gestionar superposiciones.
# Estrutura mínima
clusters/
production/
kustomization.yaml
app-deployment.yaml
app-service.yaml
Ejemplo simple de kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- app-deployment.yaml
- app-service.yaml
Paso 2: Instalar Flux CD en el cluster AKS
Flux CD actúa como operador que sincroniza el estado del cluster con el repositorio Git. Se instala con la CLI flux y se crea un GitRepository y un Kustomization que apuntan al repositorio.
# Autenticar en el AKS
az aks get-credentials --resource-group rg-aks --name myAKS
# Instalar CRDs y controllers de Flux
flux install
Paso 3: Enlazar el repositorio Git con Flux
Se crea una fuente Git en el cluster que indica el repositorio y la rama. Flux leerá esa fuente y aplicará los recursos descritos.
# Crear GitRepository (ejemplo para GitHub)
flux create source git my-app-repo \
--url=https://github.com/MEU_USER/meu-repo.git \
--branch=main \
--interval=1m
# Crear Kustomization apuntando a la carpeta en el repositorio
flux create kustomization my-app \
--source=my-app-repo \
--path="./clusters/production" \
--prune=true \
--interval=5m
Paso 4: Gestionar secretos y credenciales de forma segura
No poner secretos en texto plano en Git. Usa Flux con SOPS o integración con Azure Key Vault para proteger secretos.
# Ejemplo rápido con SOPS (local):
# 1. Generar clave GPG, 2. encriptar archivo secret.yaml
sops --encrypt secret.yaml > secret.enc.yaml
# Commit de secret.enc.yaml en el repositorio
Paso 5: Automatizar CI para actualizar manifests
Configura un workflow (GitHub Actions, Azure Pipelines) que valide YAML y actualice la imagen del Deployment (image tag) en el repositorio — Flux detecta el cambio y hace el deploy automático.
# Ejemplo mínimo de paso en GitHub Actions (yaml simplificado)
- name: Update image tag
run: |
yq e '.spec.template.spec.containers[0].image="myregistry/myapp:$GITHUB_SHA"' -i clusters/production/app-deployment.yaml
git add clusters/production/app-deployment.yaml && git commit -m "ci: update image" && git push
Paso 6: Monitorizar y hacer rollback
Flux mantiene historial de las sincronizaciones. Para monitorizar usas los controllers y kubectl. El rollback sencillo es revertir en Git (revertir commit) y Flux aplica la versión anterior.
# Verificar Kustomization status
flux get kustomizations
# Revertir el cambio en Git (ejemplo)
git revert
git push
# Flux detecta y aplica el rollback automáticamente
Verificar el resultado
Confirma que Flux sincronizó y que los recursos están en el cluster:
# Verificar fuentes y sincronización
flux get sources git
flux get kustomizations
# Verificar recursos Kubernetes
kubectl get deployments,svc -n default
kubectl describe deployment meu-app
Comprueba también en el repositorio Git que los commits del CI aparecen y que no existen secretos en texto plano.
Conclusión
Con GitOps y Flux CD para AKS obtienes despliegues declarativos, auditables y rollbacks sencillos, integrando Infraestructura como Código y DevOps. Próximos pasos: integrar Azure Key Vault para secretos, automatizar pruebas de integración antes del push y usar políticas para seguridad. Consejo: empieza por entornos de staging para validar el flujo antes de production — ¿qué parte quieres automatizar a continuación?