Compartir vía


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, watcho 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:

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.

  1. 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.

  2. 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.

  3. 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:

Otros colaboradores:

Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.