Nesta página, mostramos como resolver problemas com o webhook de admissão do Config Sync. Para saber mais sobre o webhook, consulte Evitar desvio de configuração.
Resolver erros do KNV 2009
As seções a seguir ajudam você a resolver erros KNV2009
.
Conexão do webhook de entrada recusada
Se a proteção contra desvio estiver ativada, você poderá receber o seguinte erro quando o reconciliador tentar 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
Esse erro significa que o webhook de admissão ainda não está pronto ou não está íntegro. Em geral, é um erro temporário que você talvez você veja ao inicializar o Config Sync.
Se o problema persistir, consulte a implantação do webhook de admissão para ver se os pods podem ser programados e estão íntegros.
kubectl describe deploy admission-webhook -n config-management-system
kubectl get pods -n config-management-system -l app=admission-webhook
Uma implantação com pods íntegros tem uma saída semelhante a esta:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
...
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
...
Tempo limite de solicitação de webhook de admissão
Se você receber um erro semelhante ao seguinte quando o reconciliador tentar
aplicar uma configuração ao cluster, a porta do webhook de admissão 8676
poderá ser
bloqueada pelo firewall na rede do plano de controle:
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 esse problema, adicione uma regra de firewall
para autorizar a porta 8676
, que o webhook de admissão do Config Sync usa para a
prevenção de deslocamento. A porta 8676
precisa estar aberta no plano de controle para os
nós porque o plano de controle precisa ser capaz de alcançar o back-end do webhook
nos nós do cluster.
O webhook de admissão negou uma solicitação
Se você receber o seguinte erro ao tentar aplicar uma alteração a um campo que o Config Sync gerencia, é possível que tenha feito uma alteração conflitante:
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 a proteção contra desvio estiver ativada, quando você declarar um campo em uma configuração e seu repositório estiver sincronizado com um cluster, o Config Sync gerenciará esse campo. Qualquer alteração que você tentar fazer nesse campo será uma alteração conflitante.
Por exemplo, se você tiver uma configuração de implantação no seu repositório com um rótulo environment:prod
e tentar alterar esse rótulo para environment:dev
no seu cluster, haverá um conflito e a mensagem de erro anterior. No entanto, se você adicionar um novo rótulo (por exemplo, tier:frontend
) à implantação, não haverá conflito.
Para que o Config Sync ignore qualquer alteração em um objeto, adicione a anotação descrita em Como ignorar mutações de objetos.
Falha ao excluir todos os tipos de recursos
Um namespace preso 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
Esse erro acontece quando você tenta excluir um objeto Namespace
de um repositório raiz, mas
alguns objetos no namespace ainda são gerenciados ativamente por um reconciliador de namespace. Quando um namespace é excluído, o
controlador de namespace,
que tem a conta de serviço
system:serviceaccount:kube-system:namespace-controller
, tenta excluir
todos os objetos nesse namespace. No entanto, o webhook de admissão do Config Sync só permite que o reconciliador de raiz ou de namespace exclua esses objetos e nega o controlador de namespaces para excluí-los.
Para resolver esse problema, exclua o webhook de admissão do Config Sync:
kubectl delete deployment.apps/admission-webhook -n config-management-system
O ConfigManagement Operator recria o webhook de admissão do Config Sync.
Se essa solução alternativa não funcionar, talvez seja necessário reinstalar o Config Sync.
Para evitar que o erro se repita, remova o repositório de namespace antes de remover o namespace.
A seguir
- Se ainda estiver com problemas, verifique se o seu é um problema conhecido.