Configurer la synchronisation à partir des dépôts d'espaces de noms
Lorsque vous installez Config Sync, vous configurez votre dépôt racine. Une fois que vous avez configuré votre dépôt racine, vous avez la possibilité de configurer des dépôts d'espaces de noms. Les dépôts d'espaces de noms vous permettent de déléguer la configuration et le contrôle de dépôts à des utilisateurs non administrateurs. Pour en savoir plus sur ces types de dépôts, consultez la section Dépôts dans la présentation de Config Sync.
Les dépôts d'espaces de noms nécessitent l'API RepoSync
. Si vous avez installé Config Sync à l'aide de Google Cloud Console ou de Google Cloud CLI et d'une version 1.7.0 ou ultérieure, cette API est déjà activée. Si vous avez installé Config Sync à l'aide de kubectl
et que vous utilisez un objet ConfigManagement
pour configurer votre dépôt Git, nous vous recommandons de migrer votre objet ConfigManagement pour activer l'API RepoSync
.
Bien que Config Sync détecte automatiquement les modifications de la source de référence, vous pouvez ajouter une couche de détection des écarts supplémentaire en ajoutant un webhook d'admission aux dépôts d'espaces de noms. Pour en savoir plus sur la procédure à suivre, consultez la page Empêcher les écarts de configuration.
Avant de commencer
- Créez un dépôt Git non structuré pouvant contenir les configurations avec lesquelles Config Sync se synchronise, ou assurez-vous d'y avoir accès. Les dépôts d'espaces de noms doivent utiliser le format non structuré.
- Créez un cluster résidant sur une plate-forme et une version compatibles d'Anthos, ou assurez-vous d'y avoir accès.
- Créez un cluster GKE répondant aux exigences de Config Sync ou assurez-vous d'y avoir accès.
Limites
NamespaceSelectors
(y compris les annotations pointant vers des sélecteurs) ne fonctionnent que dans le dépôt racine.
Choisir la méthode de configuration appropriée
Choisissez l'une des deux méthodes de configuration des dépôts d'espaces de noms :
Contrôler les dépôts d'espaces de noms dans le dépôt racine Cette méthode centralise la configuration des dépôts d'espaces de noms dans le dépôt racine, permettant ainsi à un administrateur central de contrôler entièrement la configuration.
Contrôler les dépôts d'espaces de noms avec l'API Kubernetes Utilisez cette méthode si vous souhaitez déléguer le contrôle du dépôt d'espaces de noms aux propriétaires d'espaces de noms.
Contrôler les dépôts d'espaces de noms dans le dépôt racine.
Dans cette méthode, l'administrateur central gère la configuration des dépôts d'espaces de noms directement à partir du dépôt racine. Étant donné que Config Sync gère les objets du dépôt d'espace de noms, cette méthode empêche toute modification locale des définitions de ce dépôt.
Pour utiliser cette méthode, effectuez les tâches suivantes :
Dans le dépôt racine, déclarez une configuration
namespace
:# ROOT_REPO/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE
Remplacez
NAMESPACE
par le nom de votre espace de noms.Dans le dépôt racine, créez un objet
RepoSync
dans le même espace de noms :# ROOT_REPO/namespaces/NAMESPACE/repo-sync.yaml # If you are using a Config Sync version earlier than 1.8.0, # use: apiVersion: configsync.gke.io/v1alpha1 apiVersion: configsync.gke.io/v1beta1 kind: RepoSync metadata: name: repo-sync namespace: NAMESPACE spec: # Since this is for a namespace repository, the format should be unstructured sourceFormat: unstructured git: repo: NAMESPACE_REPOSITORY revision: NAMESPACE_REVISION branch: NAMESPACE_BRANCH dir: "NAMESPACE_DIRECTORY" auth: NAMESPACE_AUTH_TYPE gcpServiceAccountEmail: NAMESPACE_EMAIL secretRef: name: NAMESPACE_SECRET_NAME # The `noSSLVerify` field is supported in Anthos Config Management version 1.8.2 and later. noSSLVerify: NAMESPACE_NO_SSL_VERIFY
Remplacez l'élément suivant :
NAMESPACE
: ajoutez le nom de votre espace de noms.NAMESPACE_REPOSITORY
: ajoutez l'URL du dépôt Git à utiliser comme dépôt de l'espace de noms. Vous pouvez saisir des URL à l'aide du protocole HTTPS ou SSH. Par exemple,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
utilise le protocole HTTPS. Si vous ne saisissez pas de protocole, l'URL est traitée comme une URL HTTPS. Ce champ est obligatoire.NAMESPACE_REVISION
: ajoutez la révision Git (tag ou hachage) à récupérer. Ce champ est facultatif et la valeur par défaut estHEAD
.NAMESPACE_BRANCH
: ajoutez la branche du dépôt à partir de laquelle la synchronisation doit être effectuée. Ce champ est facultatif et la valeur par défaut estmaster
.NAMESPACE_DIRECTORY
: ajoutez le chemin d'accès dans le dépôt Git au répertoire racine contenant la configuration que vous souhaitez synchroniser. Ce champ est facultatif et le paramètre par défaut est le répertoire racine (/
) du dépôt.NAMESPACE_AUTH_TYPE
: ajoutez l'un des types d'authentification suivants :none
: n'utiliser aucune authentificationssh
: utiliser une paire de clés SSHcookiefile
: utiliser uncookiefile
token
: utiliser un jetongcpserviceaccount
: utiliser un compte de service Google pour accéder à un dépôt dans Cloud Source Repositoriesgcenode
: utiliser un compte de service Google pour accéder à un dépôt dans Cloud Source Repositories. Ne sélectionnez cette option que si Workload Identity n'est pas activé dans votre cluster.Pour en savoir plus sur ces types d'authentification, consultez la page Accorder à Config Sync un accès en lecture seule à Git.
Ce champ est obligatoire.
NAMESPACE_EMAIL
: si vous avez ajoutégcpserviceaccount
commeAUTH_TYPE
, ajoutez l'adresse e-mail de votre compte de service Google. Par exemple,acm@PROJECT_ID.iam.gserviceaccount.com
.NAMESPACE_SECRET_NAME
: ajoutez le nom que vous souhaitez donner à votre Secret. Ce champ est facultatif.NAMESPACE_NO_SSL_VERIFY
: pour désactiver la validation du certificat SSL, définissez ce champ surtrue
. La valeur par défaut estfalse
.
Pour obtenir une explication des champs et une liste complète des champs que vous pouvez ajouter au champ
spec
, consultez la section Champs RepoSync.Il peut y avoir au maximum un objet RepoSync par espace de noms. Pour appliquer cette restriction, l'objet
name
doit êtrerepo-sync
. Toutes les configurations contenues dans le répertoire référencé parRepoSync
doivent également se trouver dans le même espace de noms que l'objetRepoSync
.Dans le dépôt racine, déclarez une configuration
RoleBinding
qui accorde au compte de servicens-reconciler-NAMESPACE
l'autorisation de gérer des objets dans l'espace de noms. Config Sync crée automatiquement le compte de servicens-reconciler-NAMESPACE
lorsque la configurationRepoSync
est synchronisée avec le cluster.Pour déclarer
RoleBinding
, créez l'objet suivant :# ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: syncs-repo namespace: NAMESPACE subjects: - kind: ServiceAccount name: ns-reconciler-NAMESPACE namespace: config-management-system roleRef: kind: ClusterRole name: RECONCILER_ROLE apiGroup: rbac.authorization.k8s.io
Remplacez l'élément suivant :
NAMESPACE
: ajoutez le nom de votre espace de noms.RECONCILER_ROLE
: en tant qu'administrateur central, vous pouvez définirRECONCILER_ROLE
pour appliquer les types de configuration pouvant être synchronisés à partir du dépôt d'espaces de noms. Vous pouvez choisir l'un des rôles suivants :Un ClusterRole par défaut :
admin
edit
Pour en savoir plus, consultez la section Rôles pour les utilisateurs.
Un rôle
ClusterRole
ouRole
défini par l'utilisateur et déclaré dans le dépôt racine. Ce rôle permet des autorisations précises.
Effectuez un commit des modifications dans le dépôt racine :
git add . git commit -m 'Setting up new namespace repository.' git push
Si nécessaire, créez un secret basé sur la méthode d'authentification de votre choix. Si vous avez utilisé
none
comme type d'authentification, vous pouvez ignorer cette étape.Le Secret doit répondre aux exigences suivantes :
- Créez le Secret dans le même espace de noms que l'objet RepoSync.
- Le nom du Secret doit correspondre au nom
spec.git.secretRef
que vous avez défini dansrepo-sync.yaml
. - Vous devez ajouter la clé publique du Secret au fournisseur Git.
Pour vérifier la configuration, utilisez
kubectl get
sur l'un des objets du dépôt d'espaces de noms. Exemple :kubectl get rolebindings -n NAMESPACE
Contrôler les dépôts d'espaces de noms avec l'API Kubernetes
Dans cette méthode, l'administrateur central ne déclare que l'espace de noms dans le dépôt racine et délègue la déclaration de l'objet RepoSync
à l'opérateur d'application.
Tâches administratives centrales
L'administrateur central effectue les tâches suivantes :
Dans le dépôt racine, déclarez une configuration
namespace
:# ROOT_REPO/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE
Remplacez
NAMESPACE
par le nom de votre espace de noms.Dans le dépôt racine, déclarez un
RoleBinding
pour accorder les autorisations aux opérateurs d'application. Utilisez la prévention de l'élévation RBAC pour vous assurer que l'opérateur d'application ne pourra pas appliquer ultérieurement une liaison de rôle avec des autorisations non accordées par cette liaison de rôle.Pour déclarer l'objet RoleBinding, créez le fichier manifeste suivant :
# ROOT_REPO/namespaces/NAMESPACE/operator-rolebinding.yaml kind: RoleBinding # Add RBAC escalation prevention apiVersion: rbac.authorization.k8s.io/v1 metadata: name: operator namespace: NAMESPACE subjects: - kind: User name: USERNAME apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: OPERATOR_ROLE apiGroup: rbac.authorization.k8s.io
Remplacez l'élément suivant :
NAMESPACE
: ajoutez l'espace de noms que vous avez créé dans le dépôt racine.USERNAME
: ajoutez le nom d'utilisateur de l'opérateur d'application.OPERATOR_ROLE
: en tant qu'administrateur central, vous pouvez définirOPERATOR_ROLE
pour appliquer les types de configuration pouvant être synchronisés à partir du dépôt d'espaces de noms. Vous pouvez choisir l'un des rôles suivants :Un ClusterRole par défaut :
admin
edit
Pour en savoir plus, consultez la section Rôles pour les utilisateurs.
Un ClusterRole ou Role défini par l'utilisateur déclaré dans le dépôt racine. Ce rôle permet des autorisations précises.
Effectuez un commit des modifications dans le dépôt racine :
git add . git commit -m 'Setting up new namespace repository.' git push
Tâches de l'opérateur d'application
L'opérateur d'application effectue les tâches suivantes :
Déclarez une configuration
RoleBinding
qui accorde au compte de servicens-reconciler-NAMESPACE
provisionné automatiquement l'autorisation de gérer les objets de l'espace de noms. Config Sync crée automatiquement le compte de servicens-reconciler-NAMESPACE
lorsque la configurationRepoSync
est synchronisée avec le cluster.Pour déclarer l'objet RoleBinding, créez le fichier manifeste suivant :
# sync-rolebinding.yaml kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: syncs-repo namespace: NAMESPACE subjects: - kind: ServiceAccount name: ns-reconciler-NAMESPACE namespace: config-management-system roleRef: kind: ClusterRole name: RECONCILER_ROLE apiGroup: rbac.authorization.k8s.io
Remplacez l'élément suivant :
NAMESPACE
: ajoutez l'espace de noms que vous avez créé dans le dépôt racine.RECONCILER_ROLE
: en tant qu'opérateur d'application, vous pouvez définirRECONCILER_ROLE
pour appliquer les types de configuration pouvant être synchronisés à partir du dépôt d'espaces de noms. Vous ne pouvez restreindre davantage l'ensemble d'autorisations que l'administrateur central vous a accordées. Par conséquent, ce rôle ne peut pas être plus permissif queOPERATOR_ROLE
que l'administrateur central a déclaré dans la section précédente.
Appliquez la configuration RoleBinding :
kubectl apply -f sync-rolebinding.yaml
Si nécessaire, créez un secret basé sur la méthode d'authentification de votre choix. Si vous avez utilisé
none
comme type d'authentification, vous pouvez ignorer cette étape.Le Secret doit répondre aux exigences suivantes :
- Créez le Secret dans le même espace de noms que l'objet RepoSync.
- Le nom du Secret doit correspondre au nom
spec.git.secretRef
que vous avez défini dansroot-sync.yaml
. - Vous devez ajouter la clé publique du Secret au fournisseur Git.
Déclarez une configuration
RepoSync
:# repo-sync.yaml # If you are using a Config Sync version earlier than 1.8.0, # use: apiVersion: configsync.gke.io/v1alpha1 apiVersion: configsync.gke.io/v1beta1 kind: RepoSync metadata: name: repo-sync namespace: NAMESPACE spec: # Since this is for a namespace repository, the format should be unstructured sourceFormat: unstructured git: repo: NAMESPACE_REPOSITORY revision: NAMESPACE_REVISION branch: NAMESPACE_BRANCH dir: "NAMESPACE_DIRECTORY" auth: NAMESPACE_AUTH_TYPE gcpServiceAccountEmail: NAMESPACE_EMAIL secretRef: name: NAMESPACE_SECRET_NAME # The `noSSLVerify` field is supported in Anthos Config Management version 1.8.2 and later. noSSLVerify: REPO_SSL_VERIFY
Remplacez l'élément suivant :
NAMESPACE_REPOSITORY
: ajoutez l'URL du dépôt Git à utiliser comme dépôt de l'espace de noms. Vous pouvez saisir des URL à l'aide du protocole HTTPS ou SSH. Par exemple,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
utilise le protocole HTTPS. Si vous ne saisissez pas de protocole, l'URL est traitée comme une URL HTTPS. Ce champ est obligatoire.NAMESPACE_REVISION
: ajoutez la révision Git (tag ou hachage) à récupérer. Ce champ est facultatif et la valeur par défaut estHEAD
.NAMESPACE_BRANCH
: ajoutez la branche du dépôt à partir de laquelle la synchronisation doit être effectuée. Ce champ est facultatif et la valeur par défaut estmaster
.NAMESPACE_DIRECTORY
: ajoutez le chemin d'accès dans le dépôt Git au répertoire racine contenant la configuration que vous souhaitez synchroniser. Ce champ est facultatif et le paramètre par défaut est le répertoire racine (/
) du dépôt.NAMESPACE_AUTH_TYPE
: ajoutez l'un des types d'authentification suivants :none
: n'utiliser aucune authentificationssh
: utiliser une paire de clés SSHcookiefile
: utiliser uncookiefile
token
: utiliser un jetongcpserviceaccount
: utiliser un compte de service Google pour accéder à un dépôt dans Cloud Source Repositoriesgcenode
: utiliser un compte de service Google pour accéder à un dépôt dans Cloud Source Repositories. Ne sélectionnez cette option que si Workload Identity n'est pas activé dans votre cluster.Pour en savoir plus sur ces types d'authentification, consultez la page Accorder à Config Sync un accès en lecture seule à Git.
Ce champ est obligatoire.
NAMESPACE_EMAIL
: si vous avez ajoutégcpserviceaccount
commeAUTH_TYPE
, ajoutez l'adresse e-mail de votre compte de service Google. Par exemple,acm@PROJECT_ID.iam.gserviceaccount.com
.NAMESPACE_SECRET_NAME
: ajoutez le nom que vous souhaitez donner à votre Secret. Ce champ est facultatif.NAMESPACE_NO_SSL_VERIFY
: pour désactiver la validation du certificat SSL, définissez ce champ surtrue
. La valeur par défaut estfalse
.
Pour obtenir une explication des champs et une liste complète des champs que vous pouvez ajouter au champ
spec
, consultez la section Champs RepoSync.Il peut y avoir au maximum un objet RepoSync par espace de noms. Pour appliquer cette règle, le nom de l'objet
name
doit êtrerepo-sync
. Toutes les configurations contenues dans le répertoire référencé parRepoSync
doivent également se trouver dans le même espace de noms que l'objetRepoSync
.Appliquez la configuration
RepoSync
:kubectl apply -f repo-sync.yaml
Pour vérifier la configuration, utilisez
kubectl get
sur l'un des objets du dépôt d'espaces de noms. Exemple :kubectl get rolebindings -n NAMESPACE
Vérifier l'état de synchronisation du dépôt d'espaces de noms
Vous pouvez utiliser la commande nomos status
pour inspecter l'état de synchronisation du dépôt d'espaces de noms :
nomos status
Un résultat semblable aux lignes suivantes doit s'afficher :
my_managed_cluster-1
--------------------
<root> git@github.com:foo-corp/acme/admin@main
SYNCED f52a11e4
--------------------
bookstore git@github.com:foo-corp/acme/bookstore@v1
SYNCED 34d1a8c8
Dans cet exemple de résultat, le dépôt d'espaces de noms est configuré pour l'espace de noms nommé bookstore
.
Vérifier l'installation de RepoSync
Lorsque vous créez un objet RepoSync, Config Sync crée un rapprochement appelé ns-reconciler-NAMESPACE
, où NAMESPACE
est l'espace de noms dans lequel vous avez créé votre objet RepoSync.
Vous pouvez vérifier que l'objet RepoSync fonctionne correctement en vérifiant l'état du déploiement ns-reconciler-NAMESPACE
:
kubectl get -n config-management-system deployment/ns-reconciler-NAMESPACE
Remplacez NAMESPACE
par l'espace de noms dans lequel vous avez créé votre dépôt d'espaces de noms.
Pour analyser plus en détail l'état de votre objet RepoSync, consultez la section Explorer les objets RootSync et RepoSync.
Supprimer un dépôt d'espaces de noms
Sélectionnez l'onglet Méthode du dépôt racine ou Méthode de l'API Kubernetes pour afficher les instructions correspondantes.
Méthode du dépôt racine
Si vous avez utilisé la méthode Contrôler les dépôts d'espaces de noms dans le dépôt racine, un administrateur central peut effectuer les deux étapes suivantes pour supprimer un dépôt d'espaces de noms :
Annulez la gestion ou supprimez les ressources gérées par l'objet RepoSync en suivant les instructions de dépannage.
Supprimez l'objet RepoSync du dépôt Git.
Méthode de l'API Kubernetes
Si vous avez utilisé la méthode Contrôler les dépôts d'espace de noms avec l'API Kubernetes, les opérateurs d'application peuvent suivre les deux étapes suivantes pour supprimer un dépôt d'espaces de noms :
Annulez la gestion ou supprimez les ressources gérées par l'objet RepoSync en suivant les instructions de dépannage.
Supprimez l'objet
RepoSync
en exécutant la commande suivante :kubectl delete -f repo-sync.yaml
Étape suivante
- Découvrez comment empêcher les écarts de configuration dans les dépôts d'espaces de noms.
- Découvrez comment surveiller vos objets RootSync et RepoSync.