Config Sync riduce il rischio di "operazioni ombra" grazie alla funzionalità di riparazione automatica, alla risincronizzazione periodica e alla prevenzione della deviazione facoltativa. Quando Config Sync rileva una deviazione tra il cluster e la fonte attendibile, può consentirla e ripristinarla rapidamente o rifiutarla completamente.
La riparazione automatica monitora le risorse gestite, rileva la deviazione dalla fonte attendibile e la ripristina. La riparazione automatica è sempre abilitata.
La risincronizzazione periodica sincronizza automaticamente un'ora dopo l'ultima sincronizzazione riuscita, anche se non sono state apportate modifiche alla fonte attendibile. La risincronizzazione periodica è sempre abilitata.
Sebbene la riparazione automatica e le risincronizzazioni periodiche aiutino a correggere la deviazione, la prevenzione della deviazione intercetta le richieste di modifica degli oggetti gestiti e convalida se la modifica deve essere consentita. Se la modifica non corrisponde alla fonte attendibile, la
modifica viene rifiutata. La prevenzione della deviazione è disattivata per impostazione predefinita. Quando è abilitata, la prevenzione della deviazione protegge gli oggetti RootSync per impostazione predefinita e può essere configurata anche per proteggere gli oggetti RepoSync.
Per utilizzare la prevenzione della deviazione, devi abilitare le
RootSync e RepoSync API.
Prima di iniziare
Se hai già installato Google Cloud CLI, scarica l'ultima versione eseguendo il comando gcloud components update.
Abilitare la prevenzione della deviazione
Puoi abilitare la prevenzione della deviazione utilizzando gcloud CLI. Non puoi abilitare la prevenzione della deviazione nella Google Cloud console.
Per abilitare la prevenzione della deviazione, completa i seguenti passaggi:
Aggiorna il file manifest delle specifiche di applicazione per impostare il campo
spec.configSync.preventDriftsutrue:applySpecVersion: 1 spec: configSync: enabled: true ... existing content ... preventDrift: trueApplica il file 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 file manifest delle specifiche di applicazione, in genereapply-spec.yaml.PROJECT_ID: il tuo ID progetto.
Attendi la creazione dell'oggetto
ValidateWebhookConfigurationdi Config Sync da parte dell'operatore ConfigManagement:kubectl get validatingwebhookconfiguration admission-webhook.configsync.gke.ioDovresti visualizzare un output simile al seguente esempio:
NAME WEBHOOKS AGE admission-webhook.configsync.gke.io 0 2m15sEsegui il commit di una nuova modifica alla fonte attendibile da sincronizzare in modo che il deployment
root-reconcilerpossa aggiungere webhook all'oggetto ValidatingWebhookConfiguration di Config Sync. In alternativa, puoi eliminare il deploymentroot-reconcilierper attivare una riconciliazione. Il nuovo deploymentroot-reconcileraggiornerà l'oggetto ValidatingWebhookConfiguration di Config Sync.Attendi che il server webhook sia pronto. Il log del 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 visualizzare 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
Disabilitare la prevenzione della deviazione
Quando disabiliti la prevenzione della deviazione, Config Sync elimina tutte le risorse del webhook di ammissione di Config Sync.
Poiché l'oggetto ValidatingWebhookConfiguration di Config Sync non esiste più, i riconciliatori di Config Sync non generano più le configurazioni del webhook per le risorse gestite.
Per disabilitare la prevenzione della deviazione, completa i seguenti passaggi:
Aggiorna il file manifest delle specifiche di applicazione per impostare il campo
spec.configSync.preventDriftsufalse:applySpecVersion: 1 spec: configSync: enabled: false ... existing content ... preventDrift: falseApplica il file 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 file manifest delle specifiche di applicazione, in genereapply-spec.yaml.PROJECT_ID: il tuo ID progetto.
Abilitare il webhook di ammissione nelle origini con ambito dello spazio dei nomi
Le fonti attendibili con ambito dello spazio dei nomi non sono completamente protette dal webhook. Il riconciliatore di Config Sync per ogni origine dello spazio dei nomi non ha l'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 fonte attendibile con ambito dello spazio dei nomi. Tuttavia, se vuoi utilizzare il webhook, concedi
l'autorizzazione al riconciliatore per ogni fonte attendibile con ambito dello spazio dei nomi dopo aver
configurato la sincronizzazione da più di una fonte attendibile.
Potresti non dover eseguire questi passaggi se esiste già un RoleBinding per ns-reconciler-NAMESPACE con le autorizzazioni ClusterRole cluster-admin.
Nella fonte attendibile principale, dichiara una nuova configurazione ClusterRole che conceda 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 in cui è necessario concedere 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 alla fonte attendibile principale, ad esempio se la sincronizzazione viene eseguita 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.