Kyverno Kubernetes es un motor de políticas cloud native que permite validar, mutar, generar y limpiar recursos del clúster usando políticas escritas en YAML y CEL. Actúa como control de admisión, como escáner CLI y en tiempo de ejecución, y sirve para automatizar seguridad, cumplimiento y buenas prácticas. En esta guía verás qué es Kyverno, cómo instalarlo con Helm, cómo escribir tu primera política y cómo combinarlo con flujos GitOps como ArgoCD Kubernetes o con herramientas como Velero Kubernetes.
¿Qué es Kyverno Kubernetes?
Kyverno (del griego «gobernar») es un motor de políticas pensado originalmente para Kubernetes y ampliado para trabajar también con cargas JSON (recursos Terraform, cloud, etc.). Las políticas se definen como recursos de Kubernetes, lo que permite versionarlas con Git y aplicar Kustomize. Con Kyverno Kubernetes puedes validar o mutar recursos en la admisión, generar recursos automáticamente, verificar imágenes de contenedores para supply chain security y ejecutar políticas desde la CLI en pipelines. La documentación oficial y el repositorio en GitHub son la referencia principal.
Requisitos e instalación de Kyverno Kubernetes
Necesitas un clúster Kubernetes (1.27+) y Helm 3. Añade el repositorio de Kyverno e instala el chart en el namespace kyverno:
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
kubectl create namespace kyverno
helm install kyverno kyverno/kyverno -n kyverno
Por defecto se despliegan el controlador de admisión y los recursos CRD (ClusterPolicy, Policy, etc.). Verifica los pods con kubectl get pods -n kyverno. Para entornos con External Secrets Operator Kubernetes o con GitOps, puedes gestionar las políticas como código y sincronizarlas desde un repositorio.
Tu primera política con Kyverno Kubernetes
Un ejemplo típico es exigir etiquetas en todos los Pods. Crea un ClusterPolicy que rechace Pods sin la etiqueta app.kubernetes.io/name:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-pod-labels
spec:
validationFailureAction: Enforce
rules:
- name: check-labels
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Todos los Pods deben tener app.kubernetes.io/name"
pattern:
metadata:
labels:
app.kubernetes.io/name: "?*"
Aplica la política con kubectl apply -f policy.yaml. A partir de ese momento, cualquier Pod que no lleve esa etiqueta será rechazado en la admisión. Puedes usar validationFailureAction: Audit para solo registrar violaciones sin bloquear. Más ejemplos en la guía de aplicación de políticas.
Validar y mutar recursos con Kyverno Kubernetes
Kyverno permite validar (rechazar o advertir) y mutar (modificar recursos antes de persistirlos). Las reglas usan match para seleccionar recursos y validate o mutate para la acción. En políticas más complejas puedes usar CEL (Common Expression Language). Para supply chain security, las políticas de tipo image verifican firmas y vulnerabilidades de imágenes. Combinar Kyverno Kubernetes con un flujo GitOps asegura que todas las cargas del clúster cumplan las políticas definidas en el repositorio.
Conclusión
Kyverno Kubernetes centraliza la gobernanza del clúster con políticas como código, integrable con Git, Kustomize y herramientas como ArgoCD o Flux. Instalarlo con Helm y definir ClusterPolicy o Policy en YAML te permite aplicar seguridad, cumplimiento y estándares de forma declarativa y auditable.
FAQ sobre Kyverno Kubernetes
¿Kyverno sustituye a Pod Security Standards? Kyverno puede aplicar políticas similares o más granulares; además permite mutación y generación. Puedes convivir con PSS o migrar gradualmente.
¿Puedo usar Kyverno sin el admission controller? Sí. La CLI de Kyverno permite escanear manifiestos y clústeres sin instalar el controlador en el clúster.
¿Cómo excluyo namespaces? En las reglas usa match.resources.namespaces o exclude para omitir namespaces del sistema (por ejemplo kube-system, kyverno).
¿Dónde está el código fuente? En github.com/kyverno/kyverno. La documentación está en kyverno.io/docs.
