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 un allontanamento tra il cluster e la fonte attendibile, può essere consentito e annullato rapidamente o rifiutato completamente.
La riparazione automatica controlla le risorse gestite, rileva la deviazione dall'origine della verità e la ripristina. La riparazione automatica è sempre attivata.
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 risincronizzazione periodica è sempre attivata.
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 all'origine della verità, 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 utilizzare la prevenzione dello slittamento, devi attivare le API RootSync
e RepoSync
.
Attiva la prevenzione dello slittamento
Imposta il campo
preventDrift
nel file di configurazione sutrue
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 la CLI gcloud alla versione più recente. Imposta il campo
spec.configSync.preventDrift
del file di configurazione gcloud sutrue
, quindi applica il file di configurazione gcloud.kubectl
Attiva la prevenzione delle deviazioni utilizzando
kubectl
se hai installato Config Sync manualmente utilizzandokubectl
. Imposta il campospec.preventDrift
dell'oggettoConfigManagement
sutrue
e poi applica l'oggettoConfigManagement
.Attendi che l'oggetto
ValidateWebhookConfiguration
di Config Sync venga creato 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
Esegui il commit di una nuova modifica alla fonte attendibile da sincronizzare in modo che il deployment di
root-reconciler
possa aggiungere webhook all'oggetto Config Sync ValidatingWebhookConfiguration. Un'alternativa è eliminare il deploymentroot-reconcilier
per attivare una riconciliazione. Il nuovo deploymentroot-reconciler
aggiornerebbe l'oggetto ValidatingWebhookConfiguration di Config Sync.Attendi che il server webhook sia pronto. Il log di deployment del webhook di ammissione 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 prevenzione della deviazione
gcloud
Disattiva la prevenzione dello scostamento utilizzando gcloud CLI se hai installato Config Sync utilizzando la console Google Cloud o gcloud CLI.
Assicurati di aggiornare la CLI gcloud alla versione più recente.
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
.
Vengono eliminate tutte le risorse 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 fonti attendibili basate sullo spazio dei nomi non sono completamente protette dall'webhook. Il Mediatore 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 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 dei webhook per la tua verità assoluta basata sullo spazio dei nomi. Tuttavia, se vuoi utilizzare il webhook, concedi all'agente di riconciliazione l'autorizzazione per ogni origine di riferimento basata sullo spazio dei nomi dopo aver configurato la sincronizzazione da più di un'origine di riferimento.
Potresti non dover eseguire questi passaggi se esiste già un RoleBinding per ns-reconciler-NAMESPACE
con autorizzazioni ClusterRole cluster-admin
.
Nella fonte attendibile principale, dichiara una nuova configurazione ClusterRole che concede l'autorizzazione all'webhook di ammissione di Config Sync. Questo ClusterRole deve essere definito solo 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"]
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 in cui hai creato l'origine basata sullo spazio dei nomi.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
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
Disattivare la prevenzione dello slittamento per le risorse abbandonate
Quando elimini un oggetto RootSync
o RepoSync
, per impostazione predefinita Config Sync non modifica le risorse gestite in precedenza da quell'oggetto RootSync
o RepoSync
. Ciò può lasciare diverse etichette e annotazioni che Config Sync utilizza per monitorare questi oggetti della risorsa. Se la protezione antideviazione è attivata, le modifiche apportate alle risorse gestite in precedenza potrebbero essere rifiutate.
Se non hai utilizzato la propagazione dell'eliminazione, gli oggetti di risorsa lasciati potrebbero conservare le etichette e le annotazioni aggiunte da Config Sync.
Se vuoi conservare queste risorse gestite, annulla la gestione prima di eliminare gli oggetti RootSync
o RepoSync
impostando l'annotazione configmanagement.gke.io/managed
su disabled
su ogni risorsa gestita dichiarata nella verità. 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
oRepoSync
. - Attiva la propagazione dell'eliminazione sull'oggetto
RootSync
oRepoSync
prima di eliminarlo. Successivamente, Config Sync eliminerà gli oggetti gestiti dal cluster.
Se l'oggetto RootSync
o RepoSync
viene eliminato prima di annullare la gestione o eliminare le risorse gestite, puoi ricreare l'oggetto RootSync
o RepoSync
, che adotterà le risorse del cluster corrispondenti all'origine attendibile. Poi puoi
annullare la gestione o eliminare le risorse, attendere la sincronizzazione delle modifiche ed eliminare
di nuovo RootSync
o RepoSync
.
Passaggi successivi
- Scopri come risolvere i problemi relativi al webhook.