Valide controladores de admissão
Este artigo faz parte de uma série. Comece com essa visão geral.
Os controladores de admissão raramente causam problemas, mas é crucial garantir sua funcionalidade adequada. Este artigo descreve 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 intercepta solicitações para um servidor de API Kubernetes antes da persistência de um objeto, mas depois que uma solicitação é autenticada e autorizada.
Os controladores de admissão podem estar validação, mutação ou uma combinação de ambos. mutação de controladores podem modificar objetos relacionados antes de admitir uma solicitação. A validação de controladores garante apenas que as solicitações atendam a critérios predefinidos específicos.
Uma das principais funções dos controladores de admissão é regular as solicitações 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
, watch
ou list
.
Alguns componentes podem afetar os controladores de admissão, como webhooks de mutação e validação. Quando você incorpora webhooks de mutação e validação em seu cluster do Kubernetes, é imperativo garantir alta disponibilidade. Os nós não íntegros não devem bloquear solicitações do 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 os webhooks de mutação e validação. Os controladores de admissão baseados em webhook que você deve monitorar incluem:
O complemento Política do Azure para clusters do AKS (Serviço de Kubernetes do Azure), que estende o Gatekeeper. O Gatekeeper é um webhook de controlador de admissão para o Agente de Política Aberta.
Kyverno, que é executado como um controlador de admissão dinâmico em um cluster Kubernetes. O Kyverno recebe retornos de chamada HTTP do webhook de admissão, 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 por exemplo, chamadas de webhook do APIServer com falha), 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. As malhas de serviço, como Istio e As Linkerd, usam controladores de admissão para automatizar a injeção de contêineres sidecar dentro de um pod, entre outras funcionalidades. É importante avaliar e verificar se os controladores de admissão funcionam corretamente para garantir o funcionamento perfeito de uma malha de serviço.
Verificar o status do complemento Política do Azure para clusters AKS
Se você instalar o complemento Política do Azure para AKS, poderá usar os seguintes comandos kubectl para validar a instalação e a funcionalidade dos controladores de admissão da Política do Azure 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 CRD (definição de recurso personalizada).
# 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 inclua os recursos esperados sem erros ou componentes ausentes. Use os comandos kubectl get pod
e kubectl api-resources
para verificar o status do complemento Política do Azure para AKS e validar a funcionalidade dos controladores de admissão em seu cluster do 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 comando kubectl get
a seguir para confirmar se atribuições de política são aplicadas ao cluster:
kubectl get constrainttemplates
Observação
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 saber mais, consulte os recursos a seguir:
Validar webhooks
Para garantir que os webhooks de validação e mutação funcionem conforme o esperado no cluster do Kubernetes, siga estas etapas.
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.
Execute o seguinte comando para listar os webhooks de mutação 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 de mutação estejam listados corretamente e suas configurações estejam conforme desejado. A saída inclui o nome de cada webhook de mutação, o número de webhooks e a idade de cada webhook.
Execute o seguinte comando para recuperar detalhes específicos de um controlador de admissão específico:
kubectl get MutatingWebhookConfiguration <mutating-webhook-name> -o yaml
Substitua
<mutating-webhook-name>
pelo nome do webhook de mutação para o qual você deseja recuperar detalhes. A saída desse comando exibe a representação YAML da configuração de webhook de mutação especificada.
Execute os comandos nesta seção e revise a saída para que você possa confirmar se os webhooks de validação e mutação no cluster do Kubernetes estão presentes e configurados conforme o esperado. Essa validação é essencial para garantir o bom funcionamento. Também é importante garantir que os webhooks sigam as políticas para validar e modificar recursos no cluster.
Colaboradores
Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.
Principais autores:
- Paolo Salvatori | Engenheiro de Clientes Principal
Outros colaboradores:
- Francis Simy Nazareth | Especialista Técnico Sênior
Para ver perfis não públicos do LinkedIn, entre no LinkedIn.