El Sincronizador de configuración reduce el riesgo de “operaciones en la sombra” mediante la reparación automática, la resincronización periódica y la prevención de desvíos opcional. Cuando el Sincronizador de configuración detecta el desvío entre el clúster y la fuente de información, se puede permitir y revertir con rapidez o rechazar por completo.
La autorreparación observa los recursos administrados, detecta el desvío de la fuente de información y revierte ese desvío. La autorreparación siempre está habilitada.
La resincronización periódica se sincroniza automáticamente una hora después de la última sincronización correcta, incluso si no se realizaron cambios en la fuente de información. La resincronización periódica siempre está habilitada.
Si bien la autorreparación y las resincronizaciones periódicas ayudan a solucionar los desvíos, la prevención de desvíos intercepta las solicitudes para cambiar objetos administrados y valida si se debe permitir el cambio. Si el cambio no coincide con la fuente de información, se rechaza el cambio. La prevención de desvíos está inhabilitada de forma predeterminada. Cuando está habilitada, la prevención de desvío protege los objetos RootSync
de forma predeterminada y también se puede configurar para proteger objetos RepoSync
.
Para usar la prevención de desvíos, debes habilitar las APIs de RootSync
y RepoSync
.
Habilita la prevención de desvíos
Configura el campo
preventDrift
en el archivo de configuración comotrue
y aplica ese archivo.gcloud
Habilita la prevención de desvíos mediante la CLI de gcloud si instalaste el Sincronizador de configuración con la consola de Google Cloud o la CLI de gcloud. Asegúrate de actualizar tu CLI de gcloud a la versión más reciente. Establece el campo
spec.configSync.preventDrift
del archivo de configuración de gcloud entrue
y, luego, aplica ese archivo.kubectl
Habilita la prevención de desvíos con
kubectl
si instalaste el Sincronizador de configuración de forma manual conkubectl
. Establece el campospec.preventDrift
del objetoConfigManagement
entrue
y, luego, aplica el objetoConfigManagement
.Espera hasta que el operador de ConfigManagement cree el objeto
ValidateWebhookConfiguration
del Sincronizador de configuración.kubectl get validatingwebhookconfiguration admission-webhook.configsync.gke.io
Deberías ver un resultado similar al siguiente:
NAME WEBHOOKS AGE admission-webhook.configsync.gke.io 0 2m15s
Confirma un cambio nuevo en la fuente de información para que se sincronice a fin de que la implementación de
root-reconciler
pueda agregar webhooks en el objeto ValidatingWebhookConfiguration del Sincronizador de configuración. Una alternativa es borrar la implementaciónroot-reconcilier
para activar una conciliación. El nuevo Deployment deroot-reconciler
actualizaría el objeto ValidtingWebhookConfiguration del Sincronizador de configuración.Espera hasta que el servidor de webhook esté listo. El registro de implementación del webhook de admisión de Sincronizador de configuración debe incluir
serving webhook server
. Esto puede tomar varios minutos.kubectl logs -n config-management-system -l app=admission-webhook --tail=-1 | grep "serving webhook server"
Deberías ver un resultado similar al siguiente:
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
Inhabilita la prevención de desvíos
gcloud
Inhabilita el prevención de desvío mediante la CLI de gcloud si instalaste el Sincronizador de configuración con la consola de Google Cloud o la CLI de gcloud.
Asegúrate de actualizar tu CLI de gcloud a la versión más reciente.
Establece el campo spec.configSync.preventDrift
del archivo de configuración de gcloud en false
o quita ese campo y, luego, aplica ese archivo.
kubectl
Inhabilita la prevención de desvíos con kubectl
si instalaste el Sincronizador de configuración de forma manual con kubectl
.
Configura el campo spec.preventDrift
del objeto ConfigManagement
como false
o quita el campo y, luego, aplica el objeto ConfigManagement
.
Esto borra todos los recursos de webhook de admisión del Sincronizador de configuración.
Debido a que el objeto ValidatingWebhookConfiguration
Sincronizador de configuración ya no existe, los conciliadores del Sincronizador de configuración ya no generan los archivos de configuración de webhook para los recursos administrados.
Habilita el webhook de admisión en fuentes con alcance de espacio de nombres
Las fuentes de información con alcance de espacio de nombres no están protegidas por completo por el webhook. El conciliador del Sincronizador de configuración para cada fuente de espacio de nombres no tiene permiso para leer o actualizar los objetos ValidatingWebhookConfiguration
a nivel de clúster.
Esta falta de permiso da como resultado un error para los registros de conciliación del espacio de nombres similar al siguiente ejemplo:
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
Puedes ignorar este error si no deseas usar la protección de webhook para tu fuente de información con alcance de espacio de nombres. Sin embargo, si deseas usar el webhook, otórgale permiso al conciliador por cada fuente de información con alcance de espacio de nombres después de configurar la sincronización desde más de una fuente de información.
Es posible que no debas realizar estos pasos si ya existe un RoleBinding para ns-reconciler-NAMESPACE
con permisos cluster-admin
de ClusterRole.
En la fuente de información raíz, declara una nueva configuración de ClusterRole que otorgue permiso al webhook de admisión de sincronización del Sincronizador de configuración. Este ClusterRole solo se debe definir una vez por clúster:
# 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"]
Para cada fuente con alcance de espacio de nombres en el que se debe otorgar el permiso de webhook de admisión, declara una configuración ClusterRoleBinding para otorgar el acceso:
# 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
Reemplaza
NAMESPACE
por el espacio de nombres en el que creaste la fuente con alcance de espacio de nombres.Confirma los cambios en la fuente de información raíz, por ejemplo, si se sincroniza desde un repositorio de Git:
git add . git commit -m 'Providing namespace repository the permission to update the admission webhook.' git push
Para verificar, usa
kubectl get
a fin de asegurarte de que se hayan creado ClusterRole y ClusterRoleBinding:kubectl get clusterrole admission-webhook-role kubectl get clusterrolebindings syncs-webhook
Inhabilita la prevención de desvíos para recursos abandonados
Cuando borras un objeto RootSync
o RepoSync
, el Sincronizador de configuración no modifica los recursos que ese objeto RootSync
o RepoSync
administra antes. Esto puede dejar atrás varias etiquetas y anotaciones que usa el Sincronizador de configuración para realizar un seguimiento de estos objetos de recursos. Si la protección contra desvíos está habilitada, esto puede hacer que se rechacen los cambios en los recursos administrados con anterioridad.
Si no usaste la propagación de eliminación, es posible que los objetos de recursos restantes aún retengan etiquetas y anotaciones que haya agregado el Sincronizador de configuración.
Si deseas mantener estos recursos administrados, deja de administrarlos antes de borrar los objetos RootSync
o RepoSync
. Para ello, configura la anotación configmanagement.gke.io/managed
como disabled
en cada objeto administrado. recurso declarado en la fuente de información. Esto le indica al Sincronizador de configuración que quite sus etiquetas y anotaciones de los recursos administrados, sin borrar estos recursos. Una vez que se completa la sincronización, puedes quitar el objeto RootSync
o RepoSync
.
Si deseas borrar estos recursos administrados, tienes dos opciones:
- Borra los recursos administrados de la fuente de información. Luego, el Sincronizador de configuración borrará los objetos administrados del clúster. Una vez que se completa la sincronización, puedes quitar el objeto
RootSync
oRepoSync
. - Habilita la propagación de eliminación en el objeto
RootSync
oRepoSync
antes de borrarlo. Luego, el Sincronizador de configuración borrará los objetos administrados del clúster.
Si el objeto RootSync
o RepoSync
se borra antes de dejar de administrar o borrar sus recursos administrados, puedes volver a crear el objeto RootSync
o RepoSync
y adoptar los recursos en el que coincidan con la fuente de información. Luego, puedes dejar de administrar o borrar los recursos, esperar a que los cambios se sincronicen y volver a borrar el objeto RootSync
o RepoSync
.
¿Qué sigue?
- Obtén más información para solucionar problemas del webhook.