Risolvere i problemi relativi al webhook di ammissione

Questa pagina mostra come risolvere i problemi relativi al webhook di ammissione di Config Sync. Per scoprire di più sul webhook, consulta Impedire la deriva della configurazione.

Risolvere gli errori di KNV 2009

Le sezioni seguenti ti aiutano a risolvere gli errori relativi a KNV2009.

Connessione webhook di ammissione rifiutata

Se hai abilitato la protezione dalla deriva, potresti ricevere il seguente errore quando lo strumento di riconciliazione 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 è integro. Di solito è un errore temporaneo che potresti vedere durante l'avvio di Config Sync.

Se il problema persiste, descrivi il deployment del webhook di ammissione per verificare 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 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 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 bloccata 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 la prevenzione delle deviazioni. 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.

Il webhook di ammissione ha rifiutato una richiesta

Se ricevi il seguente errore quando provi ad 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 abilitato la protezione dalla deriva, quando dichiari un campo in una configurazione e il repository è sincronizzato con un cluster, questo campo viene gestito da Config Sync. Qualsiasi modifica che tenti di apportare al campo rappresenta una modifica in conflitto.

Ad esempio, se nel repository è presente 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 verrà visualizzato il messaggio di errore precedente. Tuttavia, se aggiungi una nuova etichetta (ad esempio, tier:frontend) al deployment, non ci sarà alcun conflitto.

Se vuoi che Config Sync ignori eventuali 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 stai tentando di eliminare un oggetto Namespace da un repository principale, 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, prova a eliminare tutti gli oggetti in quello spazio dei nomi. Tuttavia, il webhook di ammissione Config Sync consente solo al riconciliazione principale o allo spazio dei nomi di eliminare questi oggetti e nega al controller dello spazio dei nomi di eliminare questi oggetti.

Per risolvere questo 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 Config Sync.

Se questa soluzione non funziona, potrebbe essere necessario reinstallare Config Sync.

Per evitare di incorrere di nuovo nell'errore, rimuovi il repository dello spazio dei nomi prima di rimuovere lo spazio dei nomi.

Passaggi successivi

  • Se i problemi persistono, controlla se il tuo problema è un problema noto.