Esta página mostra como resolver problemas com o webhook de admissão do Config Sync. Para saber mais sobre o webhook, consulte o artigo Evite a deriva da configuração.
Resolva problemas de erros KNV 2009
As secções seguintes ajudam a resolver os erros KNV2009
.
Ligação de webhook de admissão recusada
Se tiver a proteção contra desvio ativada, pode receber o seguinte erro quando o reconciliador tenta aplicar uma configuração ao cluster:
KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post "https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s": dial tcp 10.92.2.14:8676: connect: connection refused
Este erro significa que o webhook de admissão ainda não está pronto ou ficou indisponível. Normalmente, trata-se de um erro transitório que pode ver quando inicia o Config Sync.
Se o problema persistir, descreva a implementação do webhook de admissão para ver se os respetivos pods podem ser agendados e estão em bom estado:
kubectl describe deploy admission-webhook -n config-management-system
kubectl get pods -n config-management-system -l app=admission-webhook
Uma implementação com pods em bom estado tem uma saída semelhante à seguinte:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
...
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
...
Tempo limite de E/S do pedido de webhook de admissão
Se receber um erro semelhante ao seguinte quando o reconciliador tenta aplicar uma configuração ao cluster, a porta do webhook de admissão 8676
pode estar bloqueada pela firewall à rede do plano de controlo:
KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s: dial tcp 10.1.1.186:8676: i/o timeout
Para resolver este problema, adicione uma regra de firewall
para permitir a porta 8676
, que o webhook de admissão da sincronização de configuração usa para
prevenção de desvio. A porta 8676
tem de estar aberta do plano de controlo para os nós, porque o plano de controlo tem de conseguir alcançar o back-end do webhook nos nós do cluster.
O webhook de admissão recusou um pedido
Se receber o seguinte erro quando tentar aplicar uma alteração a um campo que o Config Sync gere, pode ter feito uma alteração em conflito:
error: OBJECT could not be patched: admission webhook "v1.admission-webhook.configsync.gke.io"
denied the request: fields managed by Config Sync can not be modified
Se tiver a proteção contra desvio ativada, quando declara um campo numa configuração e o seu repositório está sincronizado com um cluster, o Config Sync gere esse campo. Qualquer alteração que tente fazer a esse campo é uma alteração em conflito.
Por exemplo, se tiver uma configuração de implementação no seu repositório com uma etiqueta de environment:prod
e tentar alterar essa etiqueta para environment:dev
no seu cluster, haveria uma alteração em conflito e receberia a mensagem de erro anterior. No entanto, se adicionar uma nova etiqueta (por exemplo, tier:frontend
) à implementação, não haverá conflito.
Se quiser que o Config Sync ignore quaisquer alterações a um objeto, pode adicionar a anotação descrita em Ignorar mutações de objetos.
Falha ao eliminar todos os tipos de recursos
Um espaço de nomes bloqueado na fase Terminating
tem a seguinte condição:
message: 'Failed to delete all resource types, 1 remaining: admission webhook
"v1.admission-webhook.configsync.gke.io" denied the request: system:serviceaccount:kube-system:namespace-controller
is not authorized to delete managed resource "_configmap_bookstore_cm1"'
reason: ContentDeletionFailed
status: "True"
type: NamespaceDeletionContentFailure
Este erro ocorre quando está a tentar eliminar um objeto Namespace
de um repositório raiz, mas alguns objetos no espaço de nomes ainda estão ativamente geridos por um reconciliador de espaço de nomes. Quando um espaço de nomes é eliminado, o controlador do espaço de nomes, cuja conta de serviço é system:serviceaccount:kube-system:namespace-controller
, tenta eliminar todos os objetos nesse espaço de nomes. No entanto, o webhook de admissão do Config Sync só permite que o reconciliador de raiz ou de espaço de nomes elimine estes objetos e impede que o controlador de espaço de nomes elimine estes objetos.
Para contornar este problema, elimine o webhook de admissão do Config Sync:
kubectl delete deployment.apps/admission-webhook -n config-management-system
O operador ConfigManagement recria o webhook de admissão do Config Sync.
Se esta solução alternativa não funcionar, pode ter de reinstalar o Config Sync.
Para evitar voltar a receber o erro, remova o repositório do espaço de nomes antes de remover o espaço de nomes.
O que se segue?
Se continuar a ter problemas, verifique se o seu problema é um problema conhecido.
Se não conseguir encontrar uma solução para o seu problema na documentação, consulte a secção Obter apoio técnico para obter mais ajuda, incluindo aconselhamento sobre os seguintes tópicos:
- Abrindo um registo de apoio técnico através do contacto com o Cloud Customer Care.
- Receber apoio técnico da comunidade
fazendo perguntas no
StackOverflow.
Se usar kpt ou Kustomize, use a etiqueta
kpt
oukustomize
para pesquisar problemas semelhantes. - Abrir erros ou pedidos de funcionalidades através do controlador de problemas público no GitHub.