Guide de démarrage rapide : gérer les ressources avec Config Controller

Découvrez comment créer une instance Config Controller préinstallée avec Config Connector, Policy Controller et Config Sync. Découvrez ensuite comment utiliser votre instance en effectuant les tâches suivantes:

  • Utilisez Config Connector pour créer et gérer une ressource Google Cloud .
  • Créez une contrainte de contrôleur de règles pour appliquer une règle et détecter un cas de non-respect de la règle avant son déploiement.
  • Configurez GitOps en configurant Config Sync pour qu'il se synchronise à partir d'un exemple de dépôt contenant une ressource Google Cloud .

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  8. Install the Google Cloud CLI.

  9. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  14. Créer une instance Config Controller

    1. Dans le terminal, créez une instance Config Controller Autopilot :

      gcloud anthos config controller create cc-example \
          --location=us-central1 \
          --full-management
      

      Cette opération peut prendre jusqu'à 15 minutes.

      Le résultat est le suivant :

      Created instance [cc-example].
      Fetching cluster endpoint and auth data.
      kubeconfig entry generated for krmapihost-cc-example.
      
    2. Vérifiez que votre instance a été créée en affichant la liste des instances Config Controller :

      gcloud anthos config controller list --location=us-central1
      

      Le résultat est le suivant :

      NAME                 LOCATION                 STATE
      cc-example           us-central1              RUNNING
      

    Accorder l'autorisation requise à Config Controller

    Dans cette section, vous autorisez Config Controller à gérer les ressources Google Cloud:

    1. Définissez une variable d'environnement pour l'adresse e-mail de votre compte de service :

      export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
          -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
      
    2. Créez la liaison de stratégie :

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:${SA_EMAIL}" \
          --role "roles/owner" \
          --project PROJECT_ID
      

      Remplacez PROJECT_ID par l'ID du projet.

      Le résultat ressemble à ce qui suit :

      Updated IAM policy for project [PROJECT_ID].
      auditConfigs:
      - auditLogConfigs:
        - logType: ADMIN_READ
        - logType: DATA_READ
        - logType: DATA_WRITE
        service: gkehub.googleapis.com
      # Remainder of output omitted
      

    Utiliser votre instance Config Controller

    Les sections suivantes vous présentent les différentes façons d'utiliser votre instance Config Controller.

    Créer une ressource Google Cloud avec Config Connector

    Avec votre instance Config Controller, vous pouvez utiliser Config Connector pour gérer de nombreux Google Cloud services et ressources à l'aide d'outils et d'API Kubernetes. Dans cette section, vous allez utiliser le contrôleur de configuration pour créer une ressource PubSubTopic.

    Pour créer un sujet Pub/Sub à l'aide de Config Connector, procédez comme suit :

    1. Utilisez Config Connector pour activer l'API Pub/Sub:

      1. À l'aide de l'éditeur de texte de votre choix, créez un fichier nommé enable-pubsub.yaml et copiez-y le code YAML suivant :

        # enable-pubsub.yaml
        apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
        kind: Service
        metadata:
          name: pubsub.googleapis.com
          namespace: config-control
        spec:
          projectRef:
            external: projects/PROJECT_ID
        

        Remplacez PROJECT_ID par l'ID du projet.

      2. Pour activer l'API Pub/Sub, appliquez le fichier manifeste à votre cluster :

        kubectl apply -f enable-pubsub.yaml
        

        L'activation de cette API peut prendre plusieurs minutes.

    2. Utilisez Config Connector pour créer un sujet Pub/Sub :

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

        # pubsub-topic.yaml
        apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
        kind: PubSubTopic
        metadata:
          annotations:
            cnrm.cloud.google.com/project-id: PROJECT_ID
          labels:
            label-one: "value-one"
          name: example-topic
          namespace: config-control
        
      2. Créez le sujet Pub/Sub :

        kubectl apply -f pubsub-topic.yaml
        
    3. Vérifiez que Config Controller a créé votre ressource dans Google Clouden affichant la liste des sujets Pub/Sub:

      gcloud pubsub topics list
      

      Le résultat ressemble à ce qui suit :

      ---
      name: projects/PROJECT_ID/topics/start-instance-event
      ---
      labels:
        label-one: value-one
        managed-by-cnrm: 'true'
      name: projects/PROJECT_ID/topics/example-topic
      

    Appliquer une règle avec Policy Controller

    Votre instance Config Controller vous permet d'utiliser Policy Controller et les contraintes Policy Controller. Lors de l'installation de Policy Controller, Config Controller installe automatiquement la bibliothèque de modèles de contraintes. Vous pouvez utiliser les modèles de cette bibliothèque pour appliquer divers contrôles de sécurité et de conformité courants sur vos instances Config Controller.

    Dans cette section, vous allez créer une contrainte à l'aide du modèle de contrainte GCPStorageLocationConstraintV1. Ce modèle vous permet de limiter l'emplacement dans lequel vous pouvez créer des buckets Cloud Storage. La contrainte que vous créez à l'aide de ce modèle limite l'emplacement à us-central1. Vous pouvez utiliser cette contrainte pour vous assurer que vos buckets sont créés dans une région qui offre le meilleur prix et les meilleures performances.

    Pour créer la contrainte, procédez comme suit :

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

      # bucket-constraint.yaml
      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: GCPStorageLocationConstraintV1
      metadata:
        name: storage-only-in-us-central1
      spec:
        match:
          kinds:
          - apiGroups:
            - storage.cnrm.cloud.google.com
            kinds:
            - StorageBucket
        parameters:
          locations:
          - us-central1
      
    2. Créez la contrainte :

      kubectl apply -f bucket-constraint.yaml
      

      Le résultat est le suivant :

      gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
      
    3. Démontrez que la contrainte fonctionne en essayant d'utiliser Config Connector pour créer une ressource StorageBucket dans asia-southeast1 :

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

        # asia-storage-bucket.yaml
        apiVersion: storage.cnrm.cloud.google.com/v1beta1
        kind: StorageBucket
        metadata:
          name: bucket-in-disallowed-location
          namespace: config-control
        spec:
          location: asia-southeast1
        
      2. Essayez de créer le bucket Cloud Storage :

        kubectl apply -f asia-storage-bucket.yaml
        

        Le résultat est le suivant :

        Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
        

    Configurer GitOps avec Config Sync

    Config Sync est un service GitOps qui vous permet de synchroniser votre instance Config Controller avec les configurations, les règles et les ressourcesGoogle Cloud stockées dans un dépôt Git, une image OCI ou un dépôt Helm. Étant donné que Config Sync consolide en permanence l'état de Config Controller avec les configurations de votre source, vous pouvez vous assurer que vos instances ont une configuration cohérente.

    Dans cette section, vous allez synchroniser votre instance Config Controller avec un dépôt GitHub public. Ce dépôt contient une autre ressource PubSubTopic. En synchronisant votre instance à partir de ce dépôt, la ressource est automatiquement créée et appliquée à votre instance. Vous pouvez choisir de créer vos ressources à l'aide de Config Sync (au lieu d'appliquer la ressource directement) si vous souhaitez utiliser un workflow GitOps.

    1. Pour effectuer la synchronisation à partir de GitHub, configurez Cloud NAT. Cette démarche est nécessaire, car votre instance Config Controller s'appuie sur un cluster privé Google Kubernetes Engine (GKE) Enterprise Edition et les nœuds de cluster privé ne disposent pas d'un accès Internet sortant :

      1. Créez un routeur Cloud NAT. Vous en aurez besoin pour configurer votre passerelle NAT.

        gcloud compute routers create cc-nat-router \
            --network default \
            --region us-central1
        

        Le résultat ressemble à ce qui suit :

        Creating router [cc-nat-router]...done.
        NAME           REGION       NETWORK
        cc-nat-router  us-central1  default
        
      2. Configurez une passerelle NAT sur le routeur que vous avez créé à l'étape précédente :

        gcloud compute routers nats create cc-nat-config \
            --router-region us-central1 \
            --router cc-nat-router \
            --nat-all-subnet-ip-ranges \
            --auto-allocate-nat-external-ips
        

        Le résultat est le suivant :

        Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
        
    2. Pour configurer votre instance Config Controller afin qu'elle se synchronise à partir d'un exemple de dépôt, créez un fichier nommé cc-rootsync.yaml et copiez-y le code YAML suivant :

      # cc-rootsync.yaml
      apiVersion: configsync.gke.io/v1beta1
      kind: RootSync
      metadata:
        name: root-sync
        namespace: config-management-system
      spec:
        sourceFormat: unstructured
        git:
          repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
          branch: main
          dir: config-controller-quickstart
          auth: none
      
    3. Appliquez la configuration :

      kubectl apply -f cc-rootsync.yaml
      

      Une fois votre instance synchronisée à partir du dépôt, Config Sync crée le sujet Pub/Sub et l'applique à votre instance Config Controller.

    4. Vérifiez que Config Sync synchronise le dépôt Git avec votre instance Config Controller :

      nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
      

      Le résultat ressemble à ce qui suit :

      *gke_PROJECT_ID_us-central1_krmapihost-cc-example
      --------------------
      <root>:root-sync                         https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main
      SYNCED @ 2023-01-10 18:31:02 +0000 UTC   715b4295d3eac07b057cce2543275c1ee104cad8
      Managed resources:
         NAMESPACE        NAME                                                               STATUS   SOURCEHASH
         config-control   pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync  Current   715b429
         config-control   service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com   Current   715b429
      

      Si cette sortie n'apparaît pas, attendez quelques minutes et réessayez.

    5. Vérifiez que Config Controller a créé votre ressource :

      gcloud pubsub topics list
      

      Le résultat ressemble à ce qui suit :

      name: projects/PROJECT_ID/topics/start-instance-event
      ---
      labels:
        managed-by-cnrm: 'true'
      name: projects/PROJECT_ID/topics/sample-topic
      ---
      labels:
        managed-by-cnrm: 'true'
      name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync
      ---
      labels:
        label-one: value-one
        managed-by-cnrm: 'true'
      name: projects/PROJECT_ID/topics/example-topic
      

      Dans cette sortie, vous pouvez voir le Pub/Sub que vous avez créé dans la section Créer une instance Config Controller et celui que vous avez créé en synchronisant votre instance avec un dépôt GitHub.

    Effectuer un nettoyage

    Pour éviter que les ressources utilisées dans ce tutoriel ne soient facturées sur votre compte Google Cloud , supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

    Supprimer le projet

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Supprimer les ressources individuelles

    1. Supprimez la ressource PubSubTopic de Config Connector :

      kubectl delete -f pubsub-topic.yaml
      
    2. Supprimez la contrainte Policy Controller :

      kubectl delete -f bucket-constraint.yaml
      
    3. Supprimez le routeur NAT :

      gcloud compute routers delete cc-nat-router \
          --project=PROJECT_ID \
          --region=us-central1
      

      Appuyez sur y lorsque vous y êtes invité.

    4. Supprimez la ressource Pub/Sub créée par Config Sync :

      kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
      
    5. Supprimez la ressource RootSync :

      kubectl delete rootsync root-sync -n config-management-system
      
    6. À l'aide de l'éditeur de texte de votre choix, supprimez tous les fichiers YAML que vous avez créés :

      • enable-pubsub.yaml
      • pubsub-topic.yaml
      • bucket-constraint.yaml
      • asia-storage-bucket.yaml
      • cc-rootsync.yaml
    7. Supprimez l'instance Config Controller :

      gcloud anthos config controller delete --location=us-central1 cc-example
      

      Appuyez sur y lorsque vous y êtes invité.

    Étapes suivantes