Gérer les ressources avec Config Controller

Découvrez comment créer une instance Config Controller sur laquelle Config Connector, Policy Controller et Config Sync sont préinstallés. Apprenez ensuite à 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 Policy Controller pour appliquer une règle et détecter un cas de non-respect des règles avant son déploiement.
  • Configurez GitOps en configurant Config Sync pour qu'il effectue la synchronisation à partir d'un exemple de dépôt contenant une ressource Google Cloud.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Activer les API KRM, API GKE, Resource Manager et Service Usage :

    gcloud services enable krmapihosting.googleapis.com  container.googleapis.com  cloudresourcemanager.googleapis.com  serviceusage.googleapis.com
  7. Installez Google Cloud CLI.
  8. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  9. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  10. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  11. Activer les API KRM, API GKE, Resource Manager et Service Usage :

    gcloud services enable krmapihosting.googleapis.com  container.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 qu'il communique avec le point de terminaison Config Controller, obtenez les identifiants d'authentification et les informations sur le 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 pour 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 expliquent comment 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 des outils et des 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 fichier YAML suivant:

      # 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 règle avec 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 offrant les meilleurs prix et performances.

Pour créer la contrainte:

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

    # 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 fichier YAML suivant:

      # 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 des configurations, des règles et des 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 la configuration de vos instances est cohérente.

Dans cette section, vous synchronisez votre instance Config Controller avec un dépôt GitHub public. Ce dépôt contient une autre ressource PubSubTopic. Lorsque vous synchronisez 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 une synchronisation à partir de GitHub, configurez Cloud NAT. Cette opération est nécessaire, car votre instance Config Controller repose 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éer un routeur Cloud NAT Vous avez besoin de ce routeur 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 à synchroniser à partir d'un exemple de dépôt, créez un fichier nommé cc-rootsync.yaml et copiez-y le fichier 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 vous ne voyez pas ce résultat, 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

    Supprimez un projet Google Cloud :

    gcloud projects delete PROJECT_ID

Supprimer les ressources individuelles

  1. Supprimez la ressource Config Connector PubSubTopic:

    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