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éer une contrainte Policy Controller pour appliquer une règle et détecter un cas de non-respect des règles avant son déploiement
  • Configurer GitOps en configurant Config Sync pour la synchronisation à 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. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

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

  6. 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
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

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

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

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. Pour configurer kubectl afin de communiquer avec le point de terminaison Config Controller, obtenez les identifiants d'authentification et les informations de point de terminaison requis :

    gcloud anthos config controller get-credentials cc-example \
        --location us-central1
    
  3. 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 présentent les différentes manières d'utiliser votre instance Config Controller.

Créer une ressource Google Cloud avec Config Connector

Avec votre instance Config Controller, vous pouvez tirer parti de Config Connector pour gérer de nombreux services et ressources Google Cloud à l'aide d'outils et d'API Kubernetes. Dans cette section, vous allez utiliser Config Controller 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 Cloud en 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 stratégie à l'aide de Policy Controller

Votre instance Config Controller vous permet d'utiliser les contraintes Policy Controller et Policy Controller. Dans le cadre 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 la 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 ressources Google Cloud stockées dans un dépôt Git, une image OCI ou un dépôt Helm. Étant donné que Config Sync consolide continuellement 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 directement la ressource) 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, puis 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 ce résultat, 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 lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.

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