Config Sync reduce el riesgo de que se produzcan operaciones ocultas mediante la reparación automática, la resincronización periódica y la prevención de desviaciones opcional. Cuando Config Sync detecta una desviación entre el clúster y la fuente de información veraz, se puede permitir y revertir rápidamente o rechazar por completo.
La función de reparación automática monitoriza los recursos gestionados, detecta las desviaciones de la fuente de información veraz y las revierte. La reparación automática siempre está habilitada.
La resincronización periódica sincroniza automáticamente una hora después de la última sincronización correcta, aunque no se haya hecho ningún cambio en la fuente de información veraz. La resincronización periódica siempre está habilitada.
Aunque la autorreparación y las resincronizaciones periódicas ayudan a corregir las desviaciones, la prevención de desviaciones intercepta las solicitudes para cambiar objetos gestionados y valida si se debe permitir el cambio. Si el cambio no coincide con la fuente de información veraz, se rechaza. La prevención de la deriva está inhabilitada de forma predeterminada. Cuando está habilitada, la prevención de la deriva protege los objetos RootSync
de forma predeterminada y también se puede configurar para proteger los objetos RepoSync
.
Para usar la prevención de la deriva, debes habilitar las APIs RootSync
y RepoSync
.
Habilitar la prevención de la deriva
Si has usado la Google Cloud consola o la CLI de gcloud para instalar Config Sync, habilita la prevención de desviaciones con la CLI de gcloud. Asegúrate de actualizar tu CLI de gcloud a la última versión. Asigna el valor
true
al campospec.configSync.preventDrift
del archivo de configuración de gcloud y, a continuación, aplica el archivo de configuración de gcloud.Espera a que el operador de ConfigManagement cree el objeto
ValidateWebhookConfiguration
de Config Sync:kubectl get validatingwebhookconfiguration admission-webhook.configsync.gke.io
Debería ver un resultado similar al siguiente ejemplo:
NAME WEBHOOKS AGE admission-webhook.configsync.gke.io 0 2m15s
Confirma un nuevo cambio en la fuente de información veraz que se va a sincronizar para que la implementación pueda añadir webhooks al objeto ValidatingWebhookConfiguration de Config Sync.
root-reconciler
Otra opción es eliminar laroot-reconcilier
implementación para activar una conciliación. La nuevaroot-reconciler
implementación actualizaría el objeto ValidatingWebhookConfiguration de Config Sync.Espera a que el servidor webhook esté listo. El registro de implementación del webhook de admisión de Config Sync debe incluir
serving webhook server
. Este proceso puede tardar varios minutos.kubectl logs -n config-management-system -l app=admission-webhook --tail=-1 | grep "serving webhook server"
Debería ver un resultado similar al siguiente ejemplo:
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
Inhabilitar la prevención de la deriva
Inhabilita la prevención de la deriva con la CLI de gcloud si has instalado Config Sync con la Google Cloud consola o la CLI de gcloud.
Asegúrate de actualizar tu CLI de gcloud
a la última versión.
Define el campo spec.configSync.preventDrift
del archivo de configuración de gcloud como false
o elimina el campo y, a continuación, aplica el archivo de configuración de gcloud.
De este modo, se eliminarán todos los recursos de webhook de admisión de Config Sync.
Como el objeto ValidatingWebhookConfiguration
de Config Sync ya no existe, los reconciliadores de Config Sync ya no generan las configuraciones de webhook de los recursos gestionados.
Habilita el webhook de admisión en fuentes centradas en espacios de nombres
Las fuentes de información con permisos de espacio de nombres no están totalmente protegidas por el webhook. El reconciliador de Config Sync de cada fuente de espacio de nombres no tiene permiso para leer ni actualizar los objetos ValidatingWebhookConfiguration
a nivel de clúster.
Si no se tiene este permiso, se producirá un error en los registros de los reconciliadores de espacios de nombres, como el que se muestra en el 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 quieres usar la protección de webhook para tu fuente de información única con ámbito de espacio de nombres. Sin embargo, si quieres usar el webhook, debes conceder permiso al reconciliador para cada fuente de referencia con ámbito de espacio de nombres después de haber configurado la sincronización desde más de una fuente de referencia.
Puede que no tengas que seguir estos pasos si ya existe un RoleBinding para ns-reconciler-NAMESPACE
con permisos de ClusterRole cluster-admin
.
En la fuente de información veraz raíz, declara una nueva configuración de ClusterRole que conceda permiso al webhook de admisión de Config Sync. Este ClusterRole solo debe definirse 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"]
Por cada fuente con ámbito de espacio de nombres en la que se deba conceder el permiso de webhook de admisión, declara una configuración de ClusterRoleBinding para conceder acceso al webhook de admisión:
# 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
Sustituye
NAMESPACE
por el espacio de nombres en el que has creado el origen con ámbito de espacio de nombres.Confirma los cambios en la fuente de información principal raíz. Por ejemplo, si la sincronización se realiza desde un repositorio de Git, haz lo siguiente:
git add . git commit -m 'Providing namespace repository the permission to update the admission webhook.' git push
Para verificarlo, usa
kubectl get
para asegurarte de que se han creado ClusterRole y ClusterRoleBinding:kubectl get clusterrole admission-webhook-role kubectl get clusterrolebindings syncs-webhook
Inhabilitar la prevención de desviaciones en recursos abandonados
Cuando eliminas un objeto RootSync
o RepoSync
, de forma predeterminada, Config Sync no modifica los recursos gestionados anteriormente por ese objeto RootSync
o RepoSync
. Esto puede dejar varias etiquetas y anotaciones que Config Sync usa para monitorizar estos objetos de recurso. Si la protección contra la deriva está habilitada, esto puede provocar que se rechacen los cambios en los recursos gestionados anteriormente.
Si no has usado la propagación de la eliminación, es posible que los objetos de recursos que queden conserven las etiquetas y las anotaciones añadidas por Config Sync.
Si quieres conservar estos recursos gestionados, deja de gestionarlos antes de eliminar los objetos RootSync
o RepoSync
. Para ello, asigna el valor disabled
a la anotación configmanagement.gke.io/managed
en todos los recursos gestionados declarados en la fuente de información veraz. De esta forma, se indica a Config Sync que quite sus etiquetas y anotaciones de los recursos gestionados sin eliminar estos recursos. Una vez que se haya completado la sincronización, puede quitar el objeto RootSync
o RepoSync
.
Si quieres eliminar estos recursos gestionados, tienes dos opciones:
- Elimina los recursos gestionados de la fuente de información veraz. A continuación, Config Sync eliminará los objetos gestionados del clúster. Una vez que se haya completado la sincronización, puedes quitar el objeto
RootSync
oRepoSync
. - Habilita la propagación de la eliminación en el objeto
RootSync
oRepoSync
antes de eliminarlo. A continuación, Config Sync eliminará los objetos gestionados del clúster.
Si se elimina el objeto RootSync
o RepoSync
antes de quitar la gestión o eliminar sus recursos gestionados, puedes volver a crear el objeto RootSync
o RepoSync
, y este adoptará los recursos del clúster que coincidan con la fuente de información. Después, puedes dejar de gestionar o eliminar los recursos, esperar a que se sincronicen los cambios y eliminar el objeto RootSync
o RepoSync
de nuevo.
Siguientes pasos
- Consulta cómo solucionar problemas con el webhook.