Os webhooks de admissão, ou webhooks no Kubernetes, são um tipo de controlador de admissão, que podem ser usados em clusters do Kubernetes para validar ou alterar pedidos ao plano de controlo antes de um pedido ser persistido. É comum as aplicações de terceiros usarem webhooks que operam em recursos e espaços de nomes críticos para o sistema. Os webhooks configurados incorretamente podem afetar o desempenho e a fiabilidade do plano de controlo. Por exemplo, um webhook configurado incorretamente criado por uma aplicação de terceiros pode impedir o GKE de criar e modificar recursos no espaço de nomes kube-system
gerido, o que pode degradar a funcionalidade do cluster.
O Google Kubernetes Engine (GKE) monitoriza os seus clusters e usa o serviço Recommender para fornecer orientações sobre como pode otimizar a sua utilização da plataforma. Para ajudar a garantir que o cluster permanece estável e com bom desempenho, consulte as recomendações do GKE para os seguintes cenários:
- Webhooks que funcionam, mas não têm pontos finais disponíveis.
- Webhooks considerados inseguros, uma vez que operam em recursos e espaços de nomes críticos do sistema.
Com estas orientações, pode ver instruções sobre como verificar os webhooks potencialmente mal configurados e atualizá-los, se necessário.
Para saber como gerir as estatísticas e as recomendações dos Recommenders, consulte o artigo Otimize a sua utilização do GKE com estatísticas e recomendações.
Identifique webhooks mal configurados que possam afetar o seu cluster
Para receber estatísticas que identificam webhooks que podem afetar o desempenho e a estabilidade do seu cluster, siga as instruções para ver estatísticas e recomendações. Pode obter estatísticas das seguintes formas:
- Use a Google Cloud consola.
- Use a Google Cloud CLI ou a API Recommender, filtrando com os subtipos
K8S_ADMISSION_WEBHOOK_UNSAFE
eK8S_ADMISSION_WEBHOOK_UNAVAILABLE
.
Depois de identificar os webhooks através das estatísticas, siga as instruções para resolver problemas com os webhooks detetados.
Quando o GKE deteta webhooks configurados incorretamente
O GKE gera uma estatística e uma recomendação se algum dos seguintes critérios for verdadeiro para um cluster:
K8S_ADMISSION_WEBHOOK_UNAVAILABLE
: O cluster do GKE tem um ou mais webhooks que comunicam que não existem pontos finais disponíveis. Siga as instruções para verificar se os webhooks comunicam que não existem pontos finais disponíveis.K8S_ADMISSION_WEBHOOK_UNSAFE
: o cluster do GKE tem um ou mais webhooks considerados não seguros com base nos recursos que intercetam. Siga as instruções para verificar os webhooks considerados não seguros. Os seguintes webhooks são considerados não seguros:- Webhooks que intercetam recursos, incluindo pods e Leases, no espaço de nomes
kube-system
. - Webhooks que intercetam concessões no espaço de nomes
kube-node-lease
. - Webhooks que intercetam recursos do sistema ao nível do cluster, incluindo:
Nodes
,TokenReviews
,SubjectAccessReviews
, eCertificateSigningRequests
.
- Webhooks que intercetam recursos, incluindo pods e Leases, no espaço de nomes
Resolva problemas dos webhooks detetados
As secções seguintes contêm instruções para resolver problemas com os webhooks que o GKE detetou como potencialmente configurados incorretamente.
Depois de implementar as instruções e os webhooks estarem configurados corretamente, a recomendação é resolvida no prazo de 24 horas e deixa de aparecer na consola.
Se não quiser implementar a recomendação, pode ignorá-la.
Os webhooks comunicam que não existem pontos finais disponíveis
Se um webhook estiver a comunicar que não tem pontos finais disponíveis, o serviço que suporta o ponto final do webhook tem um ou mais pods que não estão em execução. Para disponibilizar os pontos finais do webhook, siga as instruções para encontrar e resolver problemas dos pods do serviço que suporta este ponto final do webhook:
Ver estatísticas e recomendações, escolhendo uma estatística de cada vez para resolver problemas. O GKE gera uma estatística por cluster, e esta estatística apresenta um ou mais webhooks com um ponto final danificado que tem de ser investigado. Para cada um destes webhooks, a estatística detalhada também indica o nome do serviço, que ponto final está danificado e a última vez que o ponto final foi chamado.
Encontre os pods de publicação para o serviço associado ao webhook:
Consola
No painel da barra lateral das estatísticas, consulte a tabela de webhooks configurados incorretamente. Clique no nome do serviço.
kubectl
Execute o seguinte comando para descrever o serviço:
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACE
Substitua SERVICE_NAME e SERVICE_NAMESPACE pelo nome e espaço de nomes do serviço, respetivamente.
Se não conseguir encontrar o nome do serviço indicado no webhook, o ponto final indisponível pode ser causado por uma falta de correspondência entre o nome indicado na configuração e o nome real do serviço. Para corrigir a disponibilidade do ponto final, atualize o nome do serviço na configuração do webhook para corresponder ao objeto de serviço correto.
Inspeccione os pods de publicação deste serviço:
Consola
Em Serving Pods nos detalhes do serviço, consulte a lista de Pods que suportam este serviço.
kubectl
Identifique os pods que não estão em execução listando a implementação ou os pods:
kubectl get deployment -n SERVICE_NAMESPACE
Em alternativa, execute este comando:
kubectl get pods -n SERVICE_NAMESPACE -o wide
Para todos os pods que não estejam em execução, inspecione os registos dos pods para ver por que motivo o pod não está em execução. Para ver instruções sobre problemas comuns com pods, consulte o artigo Resolva problemas com cargas de trabalho implementadas.
Webhooks considerados inseguros
Se um webhook estiver a intercetar recursos em espaços de nomes geridos pelo sistema ou determinados tipos de recursos, o GKE considera esta ação insegura e recomenda que atualize os webhooks para evitar a interceção destes recursos.
- Siga as instruções para ver estatísticas e recomendações, escolhendo uma estatística de cada vez para resolver problemas. O GKE só gera uma estatística por cluster, e esta estatística apresenta uma ou mais configurações de webhook, cada uma das quais apresenta um ou mais webhooks. Para cada configuração de webhook apresentada, a estatística indica o motivo pelo qual a configuração foi denunciada.
Inspecione a configuração do webhook:
Consola
No painel da barra lateral das estatísticas, consulte a tabela. Em cada linha, encontra o nome da configuração do webhook e o motivo pelo qual esta configuração foi sinalizada.
Para inspecionar cada configuração, clique no nome para navegar para esta configuração no painel de controlo do explorador de objetos do GKE.
kubectl
Execute o seguinte comando
kubectl
para obter a configuração do webhook, substituindo CONFIGURATION_NAME pelo nome da configuração do webhook:kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yaml
Se este comando não devolver nada, execute-o novamente, substituindo
validatingwebhookconfigurations
pormutatingwebhookconfigurations
.Na secção
webhooks
, existem um ou mais webhooks listados.Edite a configuração, consoante o motivo pelo qual o webhook foi denunciado:
Exclua os espaços de nomes kube-system e kube-node-lease
Um webhook é sinalizado se
scope
for*
. Em alternativa, um webhook é denunciado se o âmbito forNamespaced
e qualquer uma das seguintes condições for verdadeira:A condição
operator
éNotIn
evalues
omitekube-system
ekube-node-lease
, como no exemplo seguinte:webhooks: - admissionReviewVersions: ... namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: NotIn values: - blue-system objectSelector: {} rules: - apiGroups: ... scope: '*' sideEffects: None timeoutSeconds: 3
Certifique-se de que define
scope
comoNamespaced
e não como*
, para que o webhook funcione apenas em espaços de nomes específicos. Certifique-se também de que, se o elementooperator
forNotIn
, incluikube-system
ekube-node-lease
emvalues
(neste exemplo, comblue-system
).A condição
operator
éIn
evalues
incluikube-system
ekube-node-lease
, como no exemplo seguinte:namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - blue-system - kube-system - kube-node-lease
Certifique-se de que define
scope
comoNamespaced
e não como*
, para que o webhook funcione apenas em espaços de nomes específicos. Certifique-se de que, seoperator
forIn
, não incluikube-system
ekube-node-lease
emvalues
. Neste exemplo, apenasblue-system
deve estar emvalues
, uma vez queoperator
éIn
.
Exclua recursos correspondentes
Um webhook também é denunciado se
nodes
,tokenreviews
,subjectaccessreviews
oucertificatesigningrequests
estiverem listados em recursos, como no exemplo seguinte:- admissionReviewVersions: ... resources: - 'pods' - 'nodes' - 'tokenreviews' - 'subjectaccessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3
Remova
nodes
,tokenreviews
,subjectaccessreviews
ecertificatesigningrequests
da secção de recursos. Pode manterpods
emresources
.
O que se segue?
- Otimize a sua utilização do GKE com estatísticas e recomendações
- Resolução de problemas comuns
- Autentique-se nas Google Cloud APIs a partir de cargas de trabalho do GKE
- Saiba mais acerca das descontinuações de funcionalidades e APIs