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
, watch
ou 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.
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 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.
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:
- Paolo Salvatori - Brasil | Engenheiro de Clientes Principal
Outros contribuidores:
- Francis Simy Nazareth - Brasil | Especialista Técnico Sénior
Para ver perfis não públicos do LinkedIn, inicie sessão no LinkedIn.