Prévenir les écarts de configuration
Config Sync réduit le risque d'opérations "shadow" grâce à l'autoréparation automatique, à la resynchronisation périodique et à la prévention facultative des dérives. Lorsque Config Sync détecte une dérive entre le cluster et la source de référence, celle-ci peut être autorisée, puis annulée rapidement ou totalement rejetée.
L'auto-réparation surveille les ressources gérées, détecte les dérives depuis la source de référence et les annule. L'autoréparation est toujours activée.
Une resynchronisation périodique est effectuée automatiquement une heure après la dernière synchronisation réussie, même si aucune modification n'a été apportée à la source de référence. La resynchronisation périodique est toujours activée.
Bien que l'autoréparation et les resynchronisations périodiques aident à corriger les dérives, la prévention de la dérive intercepte les requêtes de modification des objets gérés et valide si la modification doit être autorisée. Si la modification ne correspond pas à la source de référence, elle est refusée. La protection contre la dérive est désactivée par défaut. Lorsqu'elle est activée, la prévention de la dérive protège les objets RootSync
par défaut. Elle peut également être configurée pour protéger les objets RepoSync
.
Pour utiliser la prévention de la dérive, vous devez activer les API RootSync
et RepoSync
.
Activer la protection contre les dérives
Dans le fichier de configuration, définissez le champ
preventDrift
surtrue
et appliquez le fichier de configuration:gcloud
Activez la prévention de dérive à l'aide de gcloud CLI si vous avez installé Config Sync à l'aide de Google Cloud Console ou de gcloud CLI. Veillez à mettre à jour gcloud CLI vers la dernière version. Définissez le champ
spec.configSync.preventDrift
du fichier de configuration gcloud surtrue
, puis appliquez le fichier de configuration gcloud.kubectl
Activez la protection contre les dérives en utilisant
kubectl
si vous avez installé manuellement Config Sync aveckubectl
. Définissez le champspec.preventDrift
de l'objetConfigManagement
surtrue
, puis appliquez l'objetConfigManagement
.Attendez que l'objet Config Sync
ValidateWebhookConfiguration
soit créé par ConfigManagement Operator:kubectl get validatingwebhookconfiguration admission-webhook.configsync.gke.io
Un résultat semblable aux lignes suivantes doit s'afficher :
NAME WEBHOOKS AGE admission-webhook.configsync.gke.io 0 2m15s
Validez une nouvelle modification de la source de référence à synchroniser afin que le déploiement
root-reconciler
puisse ajouter des webhooks à l'objet ValidatingWebhookConfiguration de Config Sync. Vous pouvez également supprimer le déploiementroot-reconcilier
pour déclencher un rapprochement. Le nouveau déploiementroot-reconciler
mettra à jour l'objet Config Sync ValidatingWebhookConfiguration.Attendez que le serveur de webhook soit prêt. Le journal de déploiement du webhook d'admission Config Sync doit inclure
serving webhook server
. Cette opération peut prendre plusieurs minutes.kubectl logs -n config-management-system -l app=admission-webhook --tail=-1 | grep "serving webhook server"
Un résultat semblable aux lignes suivantes doit s'afficher :
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
Désactiver la protection contre les dérives
gcloud
Désactivez la prévention de dérive à l'aide de gcloud CLI si vous avez installé Config Sync à l'aide de Google Cloud Console ou de gcloud CLI.
Veillez à mettre à jour gcloud CLI vers la dernière version.
Définissez le champ spec.configSync.preventDrift
du fichier de configuration gcloud sur false
ou supprimez-le, puis appliquez le fichier de configuration gcloud.
kubectl
Désactivez la protection contre les dérives en utilisant kubectl
si vous avez installé manuellement Config Sync avec kubectl
.
Définissez le champ spec.preventDrift
de l'objet ConfigManagement
sur false
ou supprimez le champ, puis appliquez l'objet ConfigManagement
.
Cette action supprime toutes les ressources du webhook d'admission Config Sync.
Comme l'objet ValidatingWebhookConfiguration
de Config Sync n'existe plus, les rapprochements Config Sync ne génèrent plus de configurations de webhook pour les ressources gérées.
Activer le webhook d'admission dans les sources à l'échelle d'un espace de noms
Les sources de vérité à l'échelle de l'espace de noms ne sont pas entièrement protégées par le webhook. Le rapprochement de Config Sync pour chaque source d'espace de noms n'est pas autorisé à lire ni à mettre à jour les objets ValidatingWebhookConfiguration
au niveau du cluster.
Cette absence d'autorisation génère une erreur dans les journaux des rapprochements d'espaces de noms comme dans cet exemple :
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
Vous pouvez ignorer cette erreur si vous ne souhaitez pas utiliser la protection webhook pour votre source de référence à l'échelle de l'espace de noms. Toutefois, si vous souhaitez utiliser le webhook, accordez l'autorisation au rapprochement pour chaque source de vérité à l'échelle d'un espace de noms après avoir configuré la synchronisation à partir de plusieurs sources de référence.
Vous n'aurez peut-être pas besoin d'effectuer ces étapes si un RoleBinding pour le ns-reconciler-NAMESPACE
existe déjà avec les autorisations ClusterRole cluster-admin
.
Dans la source de référence racine, déclarez une nouvelle configuration ClusterRole qui accorde l'autorisation au webhook d'admission Config Sync. Cet objet ClusterRole n'a besoin d'être défini qu'une seule fois par 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"]
Pour chaque source à l'échelle d'un espace de noms pour laquelle l'autorisation de webhook d'admission doit être accordée, déclarez une configuration ClusterRoleBinding pour accorder l'accès au webhook d'admission:
# 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
Remplacez
NAMESPACE
par l'espace de noms dans lequel vous avez créé votre source à l'échelle d'un espace de noms.Validez les modifications dans la source de référence racine, par exemple en cas de synchronisation à partir d'un dépôt Git:
git add . git commit -m 'Providing namespace repository the permission to update the admission webhook.' git push
Pour vérifier, utilisez
kubectl get
pour vous assurer que les objets ClusterRole et ClusterRoleBinding ont été créés :kubectl get clusterrole admission-webhook-role kubectl get clusterrolebindings syncs-webhook
Désactiver la prévention de la dérive pour les ressources abandonnées
Lorsque vous supprimez un objet RootSync
ou RepoSync
, Config Sync ne modifie pas par défaut les ressources précédemment gérées par cet objet RootSync
ou RepoSync
. Cela peut laisser plusieurs libellés et annotations que Config Sync utilise pour suivre ces objets de ressource. Si la protection contre la dérive est activée, toutes les modifications apportées aux ressources précédemment gérées peuvent être refusées.
Si vous n'avez pas utilisé la propagation par suppression, les objets de ressources laissés de côté peuvent toujours conserver les libellés et les annotations ajoutés par Config Sync.
Si vous souhaitez conserver ces ressources gérées, annulez la gestion de ces ressources avant de supprimer les objets RootSync
ou RepoSync
en définissant l'annotation configmanagement.gke.io/managed
sur disabled
sur chaque ressource gérée déclarée dans la source de référence. Cela indique à Config Sync de supprimer ses libellés et annotations des ressources gérées, sans supprimer ces ressources. Une fois la synchronisation terminée, vous pouvez supprimer l'objet RootSync
ou RepoSync
.
Si vous souhaitez supprimer ces ressources gérées, deux options s'offrent à vous:
- Supprimez les ressources gérées de la source fiable. Ensuite, Config Sync supprimera les objets gérés du cluster. Une fois la synchronisation terminée, vous pouvez supprimer l'objet
RootSync
ouRepoSync
. - Activez la propagation de la suppression sur l'objet
RootSync
ouRepoSync
avant de le supprimer. Config Sync supprimera ensuite les objets gérés du cluster.
Si l'objet RootSync
ou RepoSync
est supprimé avant d'annuler la gestion ou de supprimer ses ressources gérées, vous pouvez recréer l'objet RootSync
ou RepoSync
pour qu'il adopte les ressources du cluster correspondant à la source fiable. Vous pouvez ensuite annuler la gestion ou supprimer les ressources, attendre la synchronisation des modifications et supprimer à nouveau l'objet RootSync
ou RepoSync
.
Étapes suivantes
- Découvrez comment résoudre les problèmes liés au webhook.