Questa pagina mostra come risolvere i problemi relativi al webhook di ammissione di Config Sync. Per scoprire di più sul webhook, consulta Evitare la deriva della configurazione.
Risolvere gli errori di KNV 2009
Le sezioni seguenti ti aiutano a risolvere gli errori KNV2009
.
Connessione del webhook di ammissione rifiutata
Se hai attivato la protezione dal drift, potresti ricevere il seguente errore quando il riconciliatore tenta di applicare una configurazione al 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
Questo errore indica che il webhook di ammissione non è ancora pronto o non è più in stato corretto. Di solito si tratta di un errore transitorio che potresti visualizzare durante l'avvio iniziale di Config Sync.
Se il problema persiste, descrivi il deployment dell'webhook di ammissione per verificare se i relativi pod possono essere pianificati e sono operativi:
kubectl describe deploy admission-webhook -n config-management-system
kubectl get pods -n config-management-system -l app=admission-webhook
Un deployment con pod funzionanti ha un output simile al seguente:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
...
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
...
Timeout I/O della richiesta del webhook di ammissione
Se ricevi un messaggio di errore simile al seguente quando il riconciliatore tenta di applicare una configurazione al cluster, la porta webhook di ammissione 8676
potrebbe essere bloccata dal firewall per la rete del piano di controllo:
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
Per risolvere il problema, aggiungi una regola firewall per consentire la porta 8676
, utilizzata dall'webhook di ammissione di Config Sync per la prevenzione del drift. La porta 8676
deve essere aperta dal piano di controllo ai nodi perché il piano di controllo deve essere in grado di raggiungere il backend webhook sui nodi del cluster.
L'admission webhook ha rifiutato una richiesta
Se ricevi il seguente errore quando provi ad applicare una modifica a un campo gestito da Config Sync, è possibile che tu abbia apportato una modifica in conflitto:
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 hai attivato la protezione da deviazione, quando dichiari un campo in una configurazione e il tuo repository è sincronizzato con un cluster, Config Sync gestisce il campo. Qualsiasi modifica che tenti di apportare a quel campo è in conflitto.
Ad esempio, se nel tuo repository hai una configurazione di Deployment con un'etichetta environment:prod
e provi a modificarla in environment:dev
nel cluster, si verificherà una modifica in conflitto e riceverai il messaggio di errore precedente. Tuttavia, se aggiungi
una nuova etichetta (ad esempio tier:frontend
) al deployment, non si verificherebbe
un conflitto.
Se vuoi che Config Sync ignori le modifiche a un oggetto, puoi aggiungere l'annotazione descritta in Ignorare le mutazioni degli oggetti.
Impossibile eliminare tutti i tipi di risorse
Uno spazio dei nomi bloccato nella fase Terminating
presenta la seguente condizione:
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
Questo errore si verifica quando si tenta di eliminare un oggetto Namespace
da un repository principale, ma alcuni oggetti nel nome spazio sono ancora gestiti attivamente da un riconciliatore del nome spazio. Quando viene eliminato uno spazio dei nomi, il controllore dello spazio dei nomi, il cui account di servizio è system:serviceaccount:kube-system:namespace-controller
, tenta di eliminare tutti gli oggetti nello spazio dei nomi. Tuttavia, il webhook di ammissione per la sincronizzazione della configurazione consente solo al riconciliatore dello spazio dei nomi o principale di eliminare questi oggetti e nega al controller dello spazio dei nomi la possibilità di eliminarli.
Per risolvere il problema, elimina l'webhook di ammissione di Config Sync:
kubectl delete deployment.apps/admission-webhook -n config-management-system
L'operatore ConfigManagement ricrea il webhook di ammissione di Config Sync.
Se questa soluzione alternativa non funziona, potrebbe essere necessario reinstallare Config Sync.
Per evitare di riscontrare di nuovo l'errore, rimuovi il repository dello spazio dei nomi prima di rimuovere lo stesso.
Passaggi successivi
- Se i problemi persistono, controlla se si tratta di un problema noto.