Partilhar via


Validar controladores de admissão

Este artigo faz parte de uma série. Comece com a visão geral.

Os controladores de admissão raramente causam problemas, mas é crucial garantir sua funcionalidade adequada. Este artigo discute como os controladores de admissão podem afetar outros componentes quando eles não funcionam corretamente. Ele também descreve comandos que você pode usar para validar o desempenho do controlador de admissão.

Controlador de admissão

Um controlador de admissão é uma parte do código que interceta solicitações para um servidor de API do Kubernetes antes da persistência de um objeto, mas depois que uma solicitação é autenticada e autorizada.

Os controladores de admissão podem estar validando, mutando ou uma combinação de ambos. Os controladores mutantes podem modificar objetos relacionados antes de admitir uma solicitação. A validação de controladores apenas garante que as solicitações atendam a critérios específicos predefinidos.

Uma das principais funções dos controladores de admissão é regular os pedidos de criação, exclusão e modificação de objetos. Além disso, os controladores de admissão podem restringir verbos personalizados, como solicitar uma conexão com um pod por meio de um proxy de servidor de API. No entanto, os controladores de admissão não podem bloquear solicitações para ler objetos, incluindo operações como get, watchou list.

Alguns componentes podem afetar os controladores de admissão, como a mutação e validação de webhooks. Quando você incorpora webhooks mutantes e validados em seu cluster Kubernetes, é imperativo garantir alta disponibilidade. Nós não íntegros não devem bloquear solicitações de servidor de API. É vital monitorar o pipeline de controle de admissão para que as solicitações ao servidor de API não sejam bloqueadas. Controladores de admissão não íntegros podem afetar a mutação e a validação de webhooks. Os controladores de admissão baseados em Webhook que você deve monitorar incluem:

  • O complemento de Política do Azure para clusters do Serviço Kubernetes do Azure (AKS), que estende o Gatekeeper. O Gatekeeper é um webhook de controlador de admissão para o Open Policy Agent.

  • Kyverno, que é executado como um controlador de admissão dinâmica em um cluster Kubernetes. O Kyverno recebe retornos de chamada HTTP de webhook de admissão de validação e mutação do servidor de API do Kubernetes e aplica políticas de correspondência para retornar resultados que impõem políticas de admissão ou rejeitam solicitações. Para referência de solução de problemas (como APIServer falhando chamadas webhook), consulte a documentação de solução de problemas do Kyverno.

Como alternativa, os controladores de admissão que não estão funcionando corretamente podem afetar vários componentes, como malhas de serviço. Malhas de serviço, como Istio e Linkerd, usam controladores de admissão para automatizar a injeção de contêineres de sidecar dentro de um pod, entre outras funcionalidades. É importante avaliar e verificar se os controladores de admissão funcionam corretamente para garantir a operação perfeita de uma malha de serviço.

Verificar o status do complemento Política do Azure para clusters AKS

Se você instalar o complemento Azure Policy para AKS, poderá usar os seguintes comandos kubectl para validar a instalação e a funcionalidade dos controladores de admissão do Azure Policy em seu cluster:

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

Execute o comando anterior para verificar a disponibilidade dos pods do agente de Política do Azure no namespace gatekeeper-system . Se a saída não for a esperada, ela pode indicar um problema com um controlador de admissão, serviço de API ou definição de recurso personalizada (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
...

O comando anterior ajuda a verificar se todos os recursos da API funcionam corretamente. Certifique-se de que a saída inclui os recursos esperados sem erros ou componentes ausentes. Use os kubectl get pod comandos e kubectl api-resources para verificar o status do complemento de Política do Azure para AKS e validar a funcionalidade dos controladores de admissão em seu cluster Kubernetes. Monitore regularmente os controladores de admissão para garantir que eles funcionem corretamente, para que você possa manter a integridade geral e a estabilidade do cluster.

Use o seguinte kubectl get comando para confirmar se as atribuições de política são aplicadas ao cluster:

kubectl get constrainttemplates

Nota

As atribuições de política podem levar até 20 minutos para serem sincronizadas com cada cluster.

Sua saída deve ser semelhante ao exemplo a seguir:

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 obter mais informações, consulte os seguintes recursos:

Validar webhooks

Para garantir que a validação e a mutação de webhooks funcionem conforme o esperado no cluster do Kubernetes, siga estas etapas.

  1. Execute o seguinte comando para listar os webhooks de validação no cluster:

    kubectl get ValidatingWebhookConfiguration -o wide
    

    Sua saída deve ser semelhante ao exemplo a seguir:

    NAME                         WEBHOOKS   AGE
    aks-node-validating-webhook   1          249d
    azure-policy-validating-webhook-configuration   1          249d
    gatekeeper-validating-webhook-configuration     1          249d
    

    Revise a saída para verificar se os webhooks de validação estão presentes e suas configurações estão conforme o esperado. A saída inclui o nome de cada webhook de validação, o número de webhooks e a idade de cada webhook.

  2. Execute o seguinte comando para listar os webhooks mutantes no cluster:

    kubectl get MutatingWebhookConfiguration -o wide
    

    Sua saída deve ser semelhante ao exemplo a seguir:

    NAME                         WEBHOOKS   AGE
    aks-node-mutating-webhook    1          249d
    azure-policy-mutating-webhook-configuration    1          249d
    gatekeeper-mutating-webhook-configuration      1          249d
    

    Verifique a saída para garantir que os webhooks mutantes estejam listados corretamente e suas configurações estejam conforme desejado. A saída inclui o nome de cada webhook mutante, o número de webhooks e a idade de cada webhook.

  3. Execute o seguinte comando para recuperar detalhes específicos para um controlador de admissão específico:

    kubectl get MutatingWebhookConfiguration <mutating-webhook-name> -o yaml
    

    Substitua <mutating-webhook-name> pelo nome do webhook mutante para o qual você deseja recuperar detalhes. A saída deste comando exibe a representação YAML da configuração de webhook mutante especificada.

Execute os comandos nesta seção e revise a saída para confirmar se os webhooks de validação e mutação no cluster do Kubernetes estão presentes e configurados conforme o esperado. Esta validação é essencial para garantir o bom funcionamento. Também é importante para garantir que os webhooks adiram às políticas de validação e modificação de recursos no cluster.

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Principais autores:

Outros contribuidores:

Para ver perfis não públicos do LinkedIn, inicie sessão no LinkedIn.