Prevenzione di deviazioni dalla configurazione

Config Sync riduce il rischio di "shadow ops" mediante la riparazione automatica automatica, la ripetizione periodica della sincronizzazione e la prevenzione della deviazione facoltativa. Quando Config Sync rileva una deviazione tra il cluster e la fonte attendibile, può essere consentita rapidamente ripristinati o completamente rifiutati.

La riparazione automatica controlla le risorse gestite, rileva la deviazione dalla fonte attendibile e ripristina quella deviazione. La riparazione automatica è sempre attiva.

La nuova sincronizzazione periodica si sincronizza automaticamente un'ora dopo l'ultima sincronizzazione riuscita. anche se non sono state apportate modifiche alla fonte dei dati. La nuova sincronizzazione periodica è sempre attiva.

La riparazione automatica e le risincronizzazioni periodiche aiutano a rimediare alla deviazione, ma prevenire la deviazione intercetta le richieste di modifica degli oggetti gestiti e verifica se la modifica devono essere consentiti. Se la modifica non corrisponde alla fonte attendibile, la viene rifiutata. La prevenzione della deviazione è disattivata per impostazione predefinita. Quando l'opzione è attivata, devia la prevenzione protegge RootSync oggetti per impostazione predefinita e può anche essere configurata per proteggere RepoSync oggetti.

Per usare la prevenzione della deviazione, devi attivare la API RootSync e RepoSync.

Attiva prevenzione della deviazione

  1. Imposta il campo preventDrift nel file di configurazione su true e applica il file di configurazione:

    gcloud

    Abilita la prevenzione delle deviazioni utilizzando gcloud CLI se hai installato Config Sync utilizzando la console Google Cloud o gcloud CLI. Assicurati di aggiornare gcloud CLI all'ultima versione. Imposta il campo spec.configSync.preventDrift dello strumento di configurazione a true, quindi applica il file di configurazione gcloud.

    kubectl

    Attiva la prevenzione della deviazione utilizzando kubectl se hai installato manualmente Config Sync utilizzando kubectl. Imposta il campo spec.preventDrift dell'oggetto ConfigManagement su true, quindi applica l'oggetto ConfigManagement.

  2. Attendi fino alla creazione dell'oggetto Config Sync ValidateWebhookConfiguration dall'operatore ConfigManagement:

    kubectl get validatingwebhookconfiguration admission-webhook.configsync.gke.io
    

    Dovresti vedere un output simile all'esempio seguente:

    NAME                                  WEBHOOKS   AGE
    admission-webhook.configsync.gke.io   0          2m15s
    
  3. Esegui il commit di una nuova modifica alla fonte di riferimento da sincronizzare, in modo che Il deployment root-reconciler può aggiungere webhook a Config Sync Convalida dell'oggetto WebhookConfiguration. Un'alternativa è eliminare root-reconcilier Deployment per attivare una riconciliazione. Il nuovo deployment root-reconciler aggiorna l'oggetto Config Sync ValidatingWebhookConfiguration.

  4. Attendi che il server webhook sia pronto. Il webhook di ammissione per Config Sync Il log del deployment deve includere serving webhook server. Questa 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 all'esempio seguente:

    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 prevenzione della deviazione

gcloud

Disabilita la prevenzione delle deviazioni utilizzando gcloud CLI se hai installato Config Sync utilizzando la console Google Cloud o gcloud CLI. Assicurati di aggiornare gcloud CLI all'ultima versione. Imposta il campo spec.configSync.preventDrift dello strumento di configurazione a false o rimuovi il campo, quindi applica gcloud config.

kubectl

Disabilita la prevenzione della deviazione utilizzando kubectl se hai installato manualmente Config Sync utilizzando kubectl. Imposta il campo spec.preventDrift dell'oggetto ConfigManagement su false o rimuovi il campo, quindi applica l'oggetto ConfigManagement.

Questa azione elimina tutte le risorse del webhook di ammissione di Config Sync. Poiché l'oggetto Config Sync ValidatingWebhookConfiguration non esiste più, i riconciliatori Config Sync non generano più le configurazioni webhook per delle tue risorse gestite.

Attiva il webhook di ammissione nelle origini con ambito dello spazio dei nomi

Le origini attendibili con ambito a livello di spazio dei nomi non sono completamente protette dal webhook. La Il riconciliatore di Config Sync per ogni origine dello spazio dei nomi non dispone dell'autorizzazione per legge o aggiorna gli oggetti ValidatingWebhookConfiguration a livello di cluster.

Questa mancanza di autorizzazione determina un errore per i log dei riconciliatori dello spazio dei nomi simile all'esempio seguente:

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 webhook per il tuo basata sullo spazio dei nomi. Tuttavia, se vuoi utilizzare il webhook, concedi al riconciliatore per ogni origine dati con ambito dello spazio dei nomi dopo aver configurato la sincronizzazione da più fonti di riferimento. Potrebbe non essere necessario eseguire questi passaggi se un oggetto RoleBinding per ns-reconciler-NAMESPACE esiste già con autorizzazioni ClusterRole cluster-admin.

  1. Nella fonte attendibile principale, dichiara una nuova configurazione ClusterRole che conceda per il webhook di ammissione Config Sync. Solo questo ClusterRole deve essere definito una 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"]
    
  2. Per ogni origine con ambito dei nomi in cui è necessaria l'autorizzazione per il webhook di ammissione da concedere, 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.io
    

    Sostituisci NAMESPACE con lo spazio dei nomi che ha creato l'origine con ambito dello spazio dei nomi.

  3. Esegui il commit delle modifiche nella fonte attendibile principale, ad esempio se esegui la sincronizzazione da un Repository Git:

    git add .
    git commit -m 'Providing namespace repository the permission to update the admission webhook.'
    git push
    
    
  4. Per la verifica, usa kubectl get per assicurarti che ClusterRole e Il ClusterRoleBinding è stato creato:

    kubectl get clusterrole admission-webhook-role
    kubectl get clusterrolebindings syncs-webhook
    

Disattiva la prevenzione della deviazione per le risorse abbandonate

Quando elimini un oggetto RootSync o RepoSync, per impostazione predefinita Config Sync non modificare le risorse precedentemente gestite dall'oggetto RootSync o RepoSync. Questo può lasciare diverse etichette e annotazioni che Config Sync utilizza il monitoraggio di questi oggetti delle risorse. Se la protezione dalla deriva è abilitata, in questo modo le modifiche alle risorse gestite in precedenza rifiutato.

Se non hai utilizzato l'eliminazione la propagazione, gli oggetti risorsa lasciati indietro potrebbero comunque conservare le etichette e le annotazioni aggiunte Config Sync.

Se vuoi conservare le risorse gestite, annulla la gestione prima di eliminando gli oggetti RootSync o RepoSync impostando configmanagement.gke.io/managed annotazione per disabled su ogni dichiarata nella fonte attendibile. Questo indica a Config Sync di rimuovere le relative etichette e annotazioni dalle risorse gestite, senza eliminarle Google Cloud. Al termine della sincronizzazione, puoi rimuovere RootSync o RepoSync .

Per eliminare queste risorse gestite, hai due opzioni:

  • Elimina le risorse gestite dalla fonte attendibile. Quindi, Config Sync gli oggetti gestiti verranno eliminati dal cluster. Al termine della sincronizzazione, puoi rimuovere l'oggetto RootSync o RepoSync.
  • Attiva la propagazione dell'eliminazione sull'oggetto RootSync o RepoSync prima che lo elimina. Quindi, Config Sync eliminerà gli oggetti gestiti dal cluster.

Se l'oggetto RootSync o RepoSync viene eliminato prima dell'annullamento della gestione o dell'eliminazione del relativo oggetto risorse gestite, puoi ricreare l'oggetto RootSync o RepoSync adotta le risorse sul cluster che corrispondono alla fonte attendibile. Poi puoi annullare la gestione o eliminare le risorse, attendere la sincronizzazione delle modifiche ed eliminare di nuovo RootSync o RepoSync.

Passaggi successivi