Config Sync ti consente di evitare deviazioni della configurazione in modo che le risorse del cluster rimangano allineate alla tua fonte attendibile centrale. Per impostazione predefinita, la riparazione automatica integrata in Config Sync rileva e ripristina automaticamente la deviazione con un impatto minimo sulle prestazioni del cluster.
Quando il tuo ambiente richiede il blocco delle modifiche in conflitto prima che il cluster le applichi, puoi attivare il webhook di ammissione di Config Sync per la prevenzione della deviazione. Poiché questo webhook aumenta l'overhead della memoria e può causare errori di memoria esaurita (OOM), per la maggior parte dei casi d'uso affidati alla riparazione automatica integrata.
Perché la prevenzione della deviazione non è consigliata
Il webhook di ammissione richiede che Config Sync carichi lo schema OpenAPI di Kubernetes per convalidare le richieste. Nei cluster con molte risorse o CustomResourceDefinition, questa elaborazione dello schema può superare i limiti di memoria, causando errori dei componenti. Per la maggior parte dei casi d'uso, la riparazione automatica integrata in Config Sync fornisce protezione dalla deviazione senza i rischi di stabilità del webhook. Non puoi disattivare la riparazione automatica integrata.
Se abilitata, la prevenzione della deviazione protegge gli oggetti RootSync per impostazione predefinita. Puoi configurare la funzionalità per proteggere gli oggetti RepoSync. Per utilizzare la prevenzione della deviazione, devi abilitare le API RootSync e RepoSync. Per saperne di più, consulta Campi RootSync e RepoSync.
Prima di iniziare
Se hai già installato Google Cloud CLI, scarica l'ultima versione eseguendo il comando gcloud components update.
Abilita la prevenzione della deviazione
Puoi attivare la prevenzione della deviazione utilizzando gcloud CLI. Non puoi attivare la prevenzione della deviazione nella console Google Cloud .
Per attivare la prevenzione della deviazione, completa i seguenti passaggi:
Aggiorna il manifest della specifica di applicazione per impostare il campo
spec.configSync.preventDriftsutrue:applySpecVersion: 1 spec: configSync: enabled: true ... existing content ... preventDrift: trueApplica il manifest aggiornato:
gcloud beta container fleet config-management apply \ --membership=MEMBERSHIP_NAME \ --config=MANIFEST_NAME \ --project=PROJECT_IDSostituisci quanto segue:
MEMBERSHIP_NAME: il nome dell'appartenenza al parco risorse che hai scelto quando hai registrato il cluster. Recupera il nome con il comandogcloud container fleet memberships list.MANIFEST_NAME: il nome del manifest della specifica di applicazione, di solitoapply-spec.yaml.PROJECT_ID: il tuo ID progetto.
Attendi che l'oggetto Config Sync
ValidateWebhookConfigurationvenga creato dall'operatore ConfigManagement:kubectl get validatingwebhookconfiguration admission-webhook.configsync.gke.ioDovresti vedere un output simile al seguente esempio:
NAME WEBHOOKS AGE admission-webhook.configsync.gke.io 0 2m15sEsegui il commit di una nuova modifica alla fonte di riferimento da sincronizzare in modo che il deployment
root-reconcilerpossa aggiungere webhook all'oggetto ValidatingWebhookConfiguration di Config Sync. Un'alternativa è eliminare il deploymentroot-reconcilierper attivare una riconciliazione. Il nuovo deploymentroot-reconcileraggiornerebbe l'oggetto ValidatingWebhookConfiguration di Config Sync.Attendi che il server webhook sia pronto. Il log di deployment del webhook di ammissione di Config Sync deve includere
serving webhook server. L'operazione può richiedere diversi minuti.kubectl logs -n config-management-system -l app=admission-webhook --tail=-1 | grep "serving webhook server"Dovresti vedere un output simile al seguente esempio:
I1201 18:05:41.805531 1 deleg.go:130] controller-runtime/webhook "level"=0 "msg"="serving webhook server" "host"="" "port"=10250 I1201 18:07:04.626199 1 deleg.go:130] controller-runtime/webhook "level"=0 "msg"="serving webhook server" "host"="" "port"=10250
Disattiva la prevenzione della deviazione
Quando disattivi la prevenzione della deviazione, Config Sync elimina tutte le risorse del webhook di ammissione di Config Sync.
Poiché l'oggetto Config Sync ValidatingWebhookConfiguration non esiste più, i riconciliatori di Config Sync non generano più le configurazioni webhook per le risorse gestite.
Per disattivare la prevenzione della deviazione, completa i seguenti passaggi:
Aggiorna il manifest della specifica di applicazione per impostare il campo
spec.configSync.preventDriftsufalse:applySpecVersion: 1 spec: configSync: enabled: false ... existing content ... preventDrift: falseApplica il manifest aggiornato:
gcloud beta container fleet config-management apply \ --membership=MEMBERSHIP_NAME \ --config=MANIFEST_NAME \ --project=PROJECT_IDSostituisci quanto segue:
MEMBERSHIP_NAME: il nome dell'appartenenza al parco risorse che hai scelto quando hai registrato il cluster. Recupera il nome con il comandogcloud container fleet memberships list.MANIFEST_NAME: il nome del manifest della specifica di applicazione, di solitoapply-spec.yaml.PROJECT_ID: il tuo ID progetto.
Abilita il webhook di ammissione nelle origini con ambito dello spazio dei nomi
Le fonti di riferimento con ambito dello spazio dei nomi non sono completamente protette dal webhook. Il reconciler di Config Sync per ogni origine dello spazio dei nomi non dispone dell'autorizzazione per leggere o aggiornare gli oggetti ValidatingWebhookConfiguration a livello di cluster.
Questa mancanza di autorizzazione genera un errore nei log dei riconciliatori dello spazio dei nomi simile al seguente esempio:
Failed to update admission webhook: KNV2013: applying changes to
admission webhook: Insufficient permission. To fix, make sure the reconciler has
sufficient permissions.:
validatingwebhookconfigurations.admissionregistration.k8s.io "admission-
webhook.configsync.gke.io" is forbidden: User "system:serviceaccount:config-
management-system:ns-reconciler-NAMESPACE" cannot update resource
"validatingwebhookconfigurations" in API group "admissionregistration.k8s.io" at
the cluster scope
Puoi ignorare questo errore se non vuoi utilizzare la protezione del webhook per la tua fonte di verità con ambito dello spazio dei nomi. Tuttavia, se vuoi utilizzare il webhook, concedi l'autorizzazione al reconciler per ogni fonte di riferimento con ambito dello spazio dei nomi dopo aver configurato Config Sync da più fonti di riferimento.
Potresti non dover eseguire questi passaggi se esiste già un RoleBinding per ns-reconciler-NAMESPACE con le autorizzazioni ClusterRole cluster-admin.
Nella single source of truth principale, dichiara una nuova configurazione ClusterRole che concede l'autorizzazione al webhook di ammissione di Config Sync. Questo ClusterRole deve essere definito una sola volta per cluster:
# ROOT_SOURCE/cluster-roles/webhook-role.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: admission-webhook-role rules: - apiGroups: ["admissionregistration.k8s.io"] resources: ["validatingwebhookconfigurations"] resourceNames: ["admission-webhook.configsync.gke.io"] verbs: ["get", "update"]Per ogni origine con ambito dello spazio dei nomi a cui deve essere concessa l'autorizzazione del webhook di ammissione, dichiara una configurazione ClusterRoleBinding per concedere l'accesso al webhook di ammissione:
# ROOT_SOURCE/NAMESPACE/sync-webhook-rolebinding.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: syncs-webhook subjects: - kind: ServiceAccount name: ns-reconciler-NAMESPACE namespace: config-management-system roleRef: kind: ClusterRole name: admission-webhook-role apiGroup: rbac.authorization.k8s.ioSostituisci
NAMESPACEcon lo spazio dei nomi in cui hai creato l'origine con ambito dello spazio dei nomi.Esegui il commit delle modifiche nell'origine dati principale, ad esempio se la sincronizzazione avviene da un repository Git:
git add . git commit -m 'Providing namespace repository the permission to update the admission webhook.' git pushPer verificare, utilizza
kubectl getper assicurarti che ClusterRole e ClusterRoleBinding siano stati creati:kubectl get clusterrole admission-webhook-role kubectl get clusterrolebindings syncs-webhook
Passaggi successivi
- Scopri come risolvere i problemi relativi al webhook.