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.

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 :

  1. 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.

  2. 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 est HEAD.
    • 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 est master.
    • 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 authentification
      • ssh : utiliser une paire de clés SSH
      • cookiefile : utiliser un cookiefile
      • token : utiliser un jeton
      • gcpserviceaccount : utiliser un compte de service Google pour accéder à un dépôt dans Cloud Source Repositories
      • gcenode : 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 comme AUTH_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 sur true. La valeur par défaut est false.

    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 être repo-sync. Toutes les configurations contenues dans le répertoire référencé par RepoSync doivent également se trouver dans le même espace de noms que l'objet RepoSync.

  3. Dans le dépôt racine, déclarez une configuration RoleBinding qui accorde au compte de service ns-reconciler-NAMESPACE l'autorisation de gérer des objets dans l'espace de noms. Config Sync crée automatiquement le compte de service ns-reconciler-NAMESPACE lorsque la configuration RepoSync 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éfinir RECONCILER_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 ou Role défini par l'utilisateur et déclaré dans le dépôt racine. Ce rôle permet des autorisations précises.

  4. Effectuez un commit des modifications dans le dépôt racine :

     git add .
     git commit -m 'Setting up new namespace repository.'
     git push
    
  5. 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 dans repo-sync.yaml.
    • Vous devez ajouter la clé publique du Secret au fournisseur Git.
  6. 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 :

  1. 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.

  2. 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éfinir OPERATOR_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.

  3. 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 :

  1. Déclarez une configuration RoleBinding qui accorde au compte de service ns-reconciler-NAMESPACE provisionné automatiquement l'autorisation de gérer les objets de l'espace de noms. Config Sync crée automatiquement le compte de service ns-reconciler-NAMESPACE lorsque la configuration RepoSync 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éfinir RECONCILER_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 que OPERATOR_ROLE que l'administrateur central a déclaré dans la section précédente.
  2. Appliquez la configuration RoleBinding :

    kubectl apply -f sync-rolebinding.yaml
    
  3. 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 dans root-sync.yaml.
    • Vous devez ajouter la clé publique du Secret au fournisseur Git.
  4. 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 est HEAD.
    • 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 est master.
    • 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 authentification
      • ssh : utiliser une paire de clés SSH
      • cookiefile : utiliser un cookiefile
      • token : utiliser un jeton
      • gcpserviceaccount : utiliser un compte de service Google pour accéder à un dépôt dans Cloud Source Repositories
      • gcenode : 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 comme AUTH_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 sur true. La valeur par défaut est false.

    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 être repo-sync. Toutes les configurations contenues dans le répertoire référencé par RepoSync doivent également se trouver dans le même espace de noms que l'objet RepoSync.

  5. Appliquez la configuration RepoSync :

    kubectl apply -f repo-sync.yaml
    
  6. 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 :

  1. Annulez la gestion ou supprimez les ressources gérées par l'objet RepoSync en suivant les instructions de dépannage.

  2. 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 :

  1. Annulez la gestion ou supprimez les ressources gérées par l'objet RepoSync en suivant les instructions de dépannage.

  2. Supprimez l'objet RepoSync en exécutant la commande suivante :

    kubectl delete -f repo-sync.yaml
    

Étape suivante