Configurer Config Controller

Cette page vous explique comment configurer Config Controller. Config Controller est un service hébergé permettant de provisionner et d'orchestrer des ressources Anthos et Google Cloud. Il offre un point de terminaison d'API pouvant provisionner, activer et orchestrer des ressources Google Cloud dans le cadre d'Anthos Config Management. Pour en savoir plus sur Config Controller, consultez la présentation de Config Controller.

Avant de commencer

Avant de configurer Config Controller, vous devez effectuer les étapes suivantes :

  1. Installez et initialisez le SDK Cloud, qui fournit les commandes gcloud, kubectl et nomos utilisées dans les présentes instructions. Si vous utilisez Cloud Shell, le SDK Cloud est pré-installé.

    kubectl n'est pas installé par défaut par le SDK Cloud. Pour installer kubectl, exécutez la commande suivante :

    gcloud components install kubectl
    
  2. Créez ou autorisez la création d'un réseau par défaut. Config Controller en dépend. Pour créer un réseau par défaut, exécutez la commande suivante :

    gcloud compute networks create default --subnet-mode=auto
    

Configurer Config Controller

Créez un contrôleur de configuration à l'aide des commandes suivantes de l'outil gcloud :

  1. Activez les services sur votre projet pour utiliser les commandes suivantes de l'outil gcloud :

    gcloud services enable krmapihosting.googleapis.com \
        container.googleapis.com \
        cloudresourcemanager.googleapis.com
    
  2. Créez votre contrôleur de configuration. Cette opération peut prendre plus de 15 minutes.

    gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
        --location=LOCATION
    

    Remplacez les éléments suivants :

    • CONFIG_CONTROLLER_NAME : nom que vous souhaitez attribuer à votre contrôleur.
    • LOCATION : ajoutez us-central1 ou us-east1. Aucune autre région n'est acceptée.
  3. Une fois l'instance créée, elle apparaît dans la liste des instances. Pour afficher la liste des instances, exécutez la commande suivante :

    gcloud anthos config controller list --location=LOCATION
    
  4. Pour appliquer des fichiers manifestes, authentifiez-vous auprès de l'instance :

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location LOCATION
    
  5. Autorisez Config Controller à gérer les ressources Google Cloud dans le projet :

    export PROJECT_ID=$(gcloud config get-value project)
    export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
        -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "roles/owner" \
        --project "${PROJECT_ID}"
    

Gérer des ressources Google Cloud à l'aide de Config Controller

Une fois que vous avez terminé la configuration de Config Controller, vous êtes prêt à l'utiliser pour gérer les ressources Google Cloud.

Dans cet exemple, vous allez créer un dépôt dans Cloud Source Repositories et l'utiliser dans la section Configurer GitOps.

  1. Créez un fichier nommé service.yaml et copiez-y le fichier YAML ci-dessous :

    # service.yaml
    
    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sourcerepo.googleapis.com
      namespace: config-control
    
  2. Appliquez le fichier manifeste et attendez que Cloud Source Repositories soit activé :

    kubectl apply -f service.yaml
    kubectl wait -f service.yaml --for=condition=Ready
    
  3. Créez un fichier nommé repo.yaml et copiez-y le fichier YAML ci-dessous :

    # repo.yaml
    
    apiVersion: sourcerepo.cnrm.cloud.google.com/v1beta1
    kind: SourceRepoRepository
    metadata:
      name: REPO_NAME
      namespace: config-control
    

    Remplacez REPO_NAME par le nom que vous souhaitez attribuer au dépôt Cloud Source Repositories.

  4. Appliquez le fichier manifeste pour créer le dépôt :

    kubectl apply -f repo.yaml
    

Configurer GitOps

Vous pouvez synchroniser les configurations de votre dépôt Git avec votre Config Controller à l'aide de Config Sync. Dans l'exemple de cette section, vous utilisez les dépôts Cloud Source Repositories que vous avez créés dans la section précédente.

  1. Créez un fichier nommé gitops-iam.yaml et copiez-y le fichier YAML ci-dessous :

    # gitops-iam.yaml
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMServiceAccount
    metadata:
      name: config-sync-sa
      namespace: config-control
    spec:
      displayName: ConfigSync
    
    ---
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: config-sync-wi
      namespace: config-control
    spec:
      member: serviceAccount:PROJECT_ID.svc.id.goog[config-management-system/importer]
      role: roles/iam.workloadIdentityUser
      resourceRef:
        apiVersion: iam.cnrm.cloud.google.com/v1beta1
        kind: IAMServiceAccount
        name: config-sync-sa
    
    ---
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: allow-configsync-sa-read-csr
      namespace: config-control
    spec:
      member: serviceAccount:config-sync-sa@PROJECT_ID.iam.gserviceaccount.com
      role: roles/source.reader
      resourceRef:
        apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1
        kind: Project
        external: projects/PROJECT_ID
    

    Remplacez PROJECT_ID par l'ID du projet dans lequel Config Controller est en cours d'exécution.

  2. Pour autoriser Config Sync à accéder au dépôt, appliquez le fichier manifeste.

    kubectl apply -f gitops-iam.yaml
    
  3. Pour que les configurations de votre dépôt soient synchronisées avec votre Config Controller à l'aide de Config Sync, créez un fichier nommé config-management.yaml et collez-y le code suivant :

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      enableMultiRepo: false
      policyController:
        enabled: true
      clusterName: krmapihost-CONFIG_CONTROLLER_NAME
      git:
        policyDir: REPO_PATH
        gcpServiceAccountEmail: config-sync-sa@PROJECT_ID.iam.gserviceaccount.com
        secretType: gcpserviceaccount
        syncBranch: REPO_BRANCH
        syncRepo: https://source.developers.google.com/p/PROJECT_ID/r/REPO_NAME
      sourceFormat: unstructured
    

    Remplacez les éléments suivants :

    • CONFIG_CONTROLLER_NAME : nom de votre Config Controller.
    • REPO_PATH : chemin d'accès du répertoire à synchroniser, associé à la racine du dépôt Git. La valeur par défaut est /.
    • PROJECT_ID : ID du projet contenant le compte de service et le dépôt Git.
    • REPO_BRANCH : branche du dépôt à partir de laquelle la synchronisation doit être effectuée. La valeur par défaut est master.
    • REPO_NAME : nom du dépôt Git à partir duquel extraire la configuration et surveiller les modifications.

    Pour en savoir plus sur la configuration de Config Sync, consultez la section Accorder à Config Sync un accès en lecture seule à Git.

  4. Appliquez la configuration à l'aide de la commande kubectl apply :

    kubectl apply -f config-management.yaml
    

Vérifier le bon déroulement de la tâche

Vous pouvez vérifier la configuration initiale en procédant comme suit :

  1. Vérifiez que tous les contrôleurs ont bien été configurés sur votre Config Controller :

    kubectl wait pod --all --all-namespaces --for=condition=Ready
    
  2. Vérifiez que le dépôt Git est synchronisé avec Config Controller grâce à Config Sync à l'aide de la commande nomos :

    nomos status --contexts $(kubectl config current-context)
    

Supprimer votre contrôleur de configuration

Si vous décidez d'arrêter d'utiliser Config Controller, vous devez nettoyer toutes les ressources créées. Vous devez d'abord supprimer les ressources du contrôleur de configuration avant de le supprimer.

Supprimer votre Config Controller sans d'abord supprimer les ressources provisionnées laisse les ressources dans un état abandonné. Les ressources existent toujours dans Google Cloud (et entraînent des frais de facturation), mais ne sont pas gérées à partir de la configuration déclarative.

Une fois toutes vos ressources supprimées, vous pouvez supprimer Config Controller à l'aide de l'outil gcloud :

gcloud anthos config controller delete --location=LOCATION CONFIG_CONTROLLER_NAME

Considérations relatives à la production

Lorsque vous passez à l'environnement de production, vous devez d'abord consulter les points essentiels à prendre en compte liés à la haute disponibilité pour Config Controller.

Étape suivante