Questa pagina mostra come risolvere i problemi relativi all'ammissione per Config Sync tramite webhook. Per scoprire di più sul webhook, consulta Previeni la deviazione della configurazione.
Risolvere gli errori di KNV 2009
Le sezioni seguenti ti aiutano a risolvere KNV2009
errori.
Connessione al webhook di ammissione rifiutata
Se hai abilitato la protezione dalla deriva, 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 lo è stato non è integro. Di solito si tratta di un errore temporaneo che puoi visualizzare durante il bootstrap Config Sync.
Se il problema persiste, descrivi il deployment del webhook di ammissione per vedere se i suoi pod possono essere pianificati e sono integri:
kubectl describe deploy admission-webhook -n config-management-system
kubectl get pods -n config-management-system -l app=admission-webhook
Un deployment con pod in stato integro 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 richiesta webhook di ammissione
Se ricevi un errore simile al seguente quando il riconciliatore tenta di
applicare una configurazione al cluster, la porta del webhook di ammissione 8676
potrebbe essere
bloccato dal firewall alla 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 dal webhook di ammissione Config Sync
per prevenire la deviazione. La porta 8676
deve essere aperta dal piano di controllo al
nodi perché il piano di controllo deve poter raggiungere il backend webhook
sui nodi del cluster.
L'admission webhook ha rifiutato una richiesta
Se ricevi il seguente errore quando cerchi di applicare una modifica a un campo gestito da Config Sync, potresti aver creato un conflitto modifica:
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 viene sincronizzato con un cluster, Config Sync gestisce il campo. Qualsiasi la modifica che tenti di apportare al campo è una modifica in conflitto.
Ad esempio, se nel repository è presente una configurazione di deployment
con l'etichetta environment:prod
e provi a modificare
quell'etichetta a environment:dev
nel tuo cluster, si verifica un conflitto
modifica e dovresti ricevere il messaggio di errore precedente. Tuttavia, se aggiungi
una nuova etichetta (ad esempio tier:frontend
) al deployment, non troveresti
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
ha 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 tenti di eliminare un oggetto Namespace
da una directory radice
ma alcuni oggetti all'interno dello spazio dei nomi sono ancora gestiti attivamente da un
strumento di riconciliazione dello spazio dei nomi. Quando uno spazio dei nomi viene eliminato, lo spazio dei nomi
un controller,
il cui account di servizio
system:serviceaccount:kube-system:namespace-controller
, proverà a eliminare
per tutti gli oggetti contenuti nello spazio dei nomi. Tuttavia, i requisiti di ammissione a Config Sync
webhook consente solo alla directory principale
strumento di riconciliazione dello spazio dei nomi per eliminare questi oggetti e nega lo spazio dei nomi
controller per eliminare questi oggetti.
Per risolvere questo problema, elimina il webhook di ammissione Config Sync:
kubectl delete deployment.apps/admission-webhook -n config-management-system
L'operatore ConfigManagement ricrea il webhook di ammissione 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 il nello spazio dei nomi.
Passaggi successivi
- Se i problemi persistono, controlla se è un problema noto.