Valide los controladores de admisión
Este artículo forma parte de una serie. Comience con la información general.
Los controladores de admisión rara vez causan problemas, pero es fundamental garantizar su funcionalidad adecuada. En este artículo se describe cómo los controladores de admisión pueden afectar a otros componentes cuando no funcionan correctamente. También describe los comandos que puede usar para validar el rendimiento del controlador de admisión.
Controladores de admisión
Un controlador de admisión es un fragmento de código que intercepta las solicitudes a un servidor de API de Kubernetes antes de la persistencia de un objeto, pero después de autenticar y autorizar una solicitud.
Los controladores de admisión pueden validar, mutaro combinar ambos. Los controladores de mutación pueden modificar objetos relacionados antes de admitir una solicitud. La validación de controladores garantiza únicamente que las solicitudes cumplan criterios predefinidos específicos.
Una de las funciones principales de los controladores de admisión es regular las solicitudes de creación, eliminación y modificación de objetos. Además, los controladores de admisión pueden restringir verbos personalizados, como solicitar una conexión a un pod a través de un proxy de servidor de API. Sin embargo, los controladores de admisión no pueden bloquear las solicitudes para leer objetos, incluidas las operaciones como get
, watch
o list
.
Algunos componentes pueden afectar a los controladores de admisión, como mutación y la validación de webhooks. Al incorporar webhooks de mutación y validación en el clúster de Kubernetes, es imprescindible garantizar la alta disponibilidad. Los nodos incorrectos no deben bloquear las solicitudes del servidor de API. Es fundamental supervisar la canalización de control de admisión para que las solicitudes al servidor de API no estén bloqueadas. Los controladores de admisión incorrectos pueden afectar a la mutación y validación de webhooks. Los controladores de admisión basados en webhook que debe supervisar incluyen:
El complemento de Azure Policy para clústeres de Azure Kubernetes Service (AKS), que amplía Gatekeeper. Gatekeeper es un webhook de controlador de admisión para Agente de directiva abierta.
Kyverno, que se ejecuta como un controlador de admisión dinámico en un clúster de Kubernetes. Kyverno recibe validaciones y mutaciones de devoluciones de llamada HTTP de webhook de admisión desde el servidor de API de Kubernetes y aplica directivas de coincidencia para devolver resultados que aplican directivas de admisión o rechazan solicitudes. Para la referencia de solución de problemas (por ejemplo, APIServer con errores de llamadas de webhook), consulte la Documentación de solución de problemas de Kyverno.
Como alternativa, los controladores de admisión que no funcionan correctamente pueden afectar a varios componentes, como mallas de servicio. Las mallas de servicio, como Istio y Linkerd, usan controladores de admisión para automatizar la inyección de contenedores sidecar dentro de un pod, entre otras funcionalidades. Es importante evaluar y comprobar que los controladores de admisión funcionan correctamente para garantizar el funcionamiento sin problemas de una malla de servicio.
Comprobación del estado del complemento de Azure Policy para clústeres de AKS
Si instala el complemento de Azure Policy para AKS, puede usar los siguientes comandos kubectl para validar la instalación y la funcionalidad de los controladores de admisión de Azure Policy en el clúster:
# Verify that Azure Policy pods are running.
kubectl get pod -n gatekeeper-system
# Sample output
...
NAME READY STATUS RESTARTS AGE
gatekeeper-audit-65844778cb-rkflg 1/1 Running 0 163m
gatekeeper-controller-78797d4687-4pf6w 1/1 Running 0 163m
gatekeeper-controller-78797d4687-splzh 1/1 Running 0 163m
...
Ejecute el comando anterior para comprobar la disponibilidad de los pods del agente de Azure Policy en el espacio de nombres sistema gatekeeper. Si la salida no es lo que espera, podría indicar un problema con un controlador de admisión, un servicio de API o una definición de recursos personalizados (CRD).
# Check that all API resources are working correctly. Use the following command to list all API resources.
kubectl api-resources
# Sample output
...
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
componentstatuses cs false ComponentStatus
configmaps cm true ConfigMap
...
El comando anterior le ayuda a comprobar que todos los recursos de API funcionan correctamente. Asegúrese de que la salida incluye los recursos esperados sin errores ni componentes que falten. Use los comandoskubectl get pod
y kubectl api-resources
para comprobar el estado del complemento de Azure Policy para AKS y validar la funcionalidad de los controladores de admisión en el clúster de Kubernetes. Supervise periódicamente los controladores de admisión para asegurarse de que funcionan correctamente para que pueda mantener el estado general y la estabilidad del clúster.
Use el siguiente comando kubectl get
para confirmar que las asignaciones de directiva se aplican al clúster:
kubectl get constrainttemplates
Nota:
Las asignaciones de directivas pueden tardar hasta 20 minutos en sincronizarse con cada clúster.
La salida debe ser similar al ejemplo siguiente:
NAME AGE
k8sazureallowedcapabilities 23m
k8sazureallowedusersgroups 23m
k8sazureblockhostnamespace 23m
k8sazurecontainerallowedimages 23m
k8sazurecontainerallowedports 23m
k8sazurecontainerlimits 23m
k8sazurecontainernoprivilege 23m
k8sazurecontainernoprivilegeescalation 23m
k8sazureenforceapparmor 23m
k8sazurehostfilesystem 23m
k8sazurehostnetworkingports 23m
k8sazurereadonlyrootfilesystem 23m
k8sazureserviceallowedports 23m
Para obtener más información, consulte los siguientes recursos:
Validación de webhooks
Para asegurarse de que la validación y la mutación de webhooks funcionan según lo previsto en el clúster de Kubernetes, siga estos pasos.
Ejecute el siguiente comando para enumerar los webhooks de validación en el clúster:
kubectl get ValidatingWebhookConfiguration -o wide
La salida debe ser similar al ejemplo siguiente:
NAME WEBHOOKS AGE aks-node-validating-webhook 1 249d azure-policy-validating-webhook-configuration 1 249d gatekeeper-validating-webhook-configuration 1 249d
Revise la salida para comprobar que los webhooks de validación están presentes y sus configuraciones son las esperadas. La salida incluye el nombre de cada webhook de validación, el número de webhooks y la antigüedad de cada webhook.
Ejecute el siguiente comando para enumerar los webhooks mutantes en el clúster:
kubectl get MutatingWebhookConfiguration -o wide
La salida debe ser similar al ejemplo siguiente:
NAME WEBHOOKS AGE aks-node-mutating-webhook 1 249d azure-policy-mutating-webhook-configuration 1 249d gatekeeper-mutating-webhook-configuration 1 249d
Compruebe la salida para asegurarse de que los webhooks mutantes se muestran correctamente y sus configuraciones son las deseadas. La salida incluye el nombre de cada webhook mutando, el número de webhooks y la antigüedad de cada webhook.
Ejecute el siguiente comando para recuperar detalles específicos de un controlador de admisión determinado:
kubectl get MutatingWebhookConfiguration <mutating-webhook-name> -o yaml
Reemplace
<mutating-webhook-name>
por el nombre del webhook mutante para el que desea recuperar los detalles. La salida de este comando muestra la representación YAML de la configuración de webhook mutante especificada.
Ejecute los comandos de esta sección y revise la salida para que pueda confirmar que los webhooks de validación y mutación en el clúster de Kubernetes están presentes y configurados según lo previsto. Esta validación es esencial para garantizar el funcionamiento adecuado. También es importante asegurarse de que los webhooks cumplen las directivas para validar y modificar recursos en el clúster.
Colaboradores
Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.
Creadores de entidad de seguridad:
- Paolo Salvatori | Ingeniero principal de clientes
Otros colaboradores:
- Francis Simy Nazareth | Especialista técnico sénior
Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.