Questa pagina mostra come risolvere i problemi relativi al webhook di ammissione di Config Sync. Per saperne di più sul webhook, consulta la sezione Impedire la deriva della configurazione.
Risolvere gli errori KNV 2009
Le sezioni seguenti ti aiutano a risolvere gli errori KNV2009.
Connessione al webhook di ammissione rifiutata
Se hai attivato 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 è diventato non integro. In genere si tratta di un errore temporaneo che potresti visualizzare durante il bootstrapping di Config Sync.
Se il problema persiste, descrivi il deployment del webhook di ammissione per verificare se i relativi 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 integri 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 errore simile al seguente quando il riconciliatore tenta di applicare una configurazione al cluster, la porta 8676 del webhook di ammissione potrebbe essere bloccata dal firewall alla rete del control plane:
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 di Config Sync per la
prevenzione della deriva. La porta 8676 deve essere aperta dal control plane ai nodi perché il control plane deve essere in grado di raggiungere il backend del webhook sui nodi del cluster.
Il webhook di ammissione ha rifiutato una richiesta
Se ricevi il seguente errore quando tenti di applicare una modifica a un campo gestito da Config Sync, potresti aver 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 dalla deriva, quando dichiari un campo in una configurazione e il repository viene sincronizzato con un cluster, Config Sync gestisce il campo. Qualsiasi modifica tenti di apportare a questo campo è una modifica in conflitto.
Ad esempio, se hai una configurazione di deployment nel repository con un'etichetta environment:prod e tenti di modificare l'etichetta 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 verificherà alcun conflitto.
Se vuoi che Config Sync ignori le modifiche apportate 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 un repository root, ma alcuni oggetti nello spazio dei nomi sono ancora gestiti attivamente da un riconciliatore dello spazio dei nomi. Quando uno spazio dei nomi viene eliminato, il controller dello spazio dei nomi, il cui account di servizio è system:serviceaccount:kube-system:namespace-controller, tenta di eliminare tutti gli oggetti in quello spazio dei nomi. Tuttavia, il webhook
di ammissione di Config Sync consente solo al riconciliatore root o dello
spazio dei nomi di eliminare questi oggetti e nega al controller
dello spazio dei nomi l'eliminazione di questi oggetti.
Per risolvere il problema, elimina il 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 spazio dei nomi.
Passaggi successivi
Se continui a riscontrare problemi, controlla se il tuo problema è un problema noto.
Se non riesci a trovare una soluzione al tuo problema nella documentazione, consulta la sezione Richiedere assistenza per ulteriore aiuto, inclusi consigli sui seguenti argomenti:
- Aprire una richiesta di assistenza contattando l'assistenza clienti Google Cloud.
- Ricevere assistenza dalla community ponendo domande su
Stack Overflow.
Se utilizzi kpt o Kustomize, utilizza il tag
kptokustomizeper cercare problemi simili. - Aprire bug o richieste di funzionalità utilizzando il tracker di problemi pubblico su GitHub.