Kurzanleitung: Ressourcen mit Config Controller verwalten

Erfahren Sie, wie Sie eine Config Controller-Instanz erstellen, in der Config Connector, Policy Controller und Config Sync vorinstalliert sind. Als Nächstes erfahren Sie, wie Sie die Instanz verwenden, indem Sie die folgenden Aufgaben ausführen:

  • Mit Config Connector eine Google Cloud -Ressource erstellen und verwalten
  • Erstellen Sie eine Policy Controller-Einschränkung, um eine Richtlinie zu erzwingen und Richtlinienverstöße zu erkennen, bevor sie bereitgestellt werden.
  • Richten Sie GitOps ein, indem Sie Config Sync für die Synchronisierung aus einem Beispiel-Repository konfigurieren, das eine Google Cloud Ressource enthält.

Hinweise

  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. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

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

  9. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  10. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  14. Config Controller-Instanz erstellen

    1. Erstellen Sie im Terminal eine Autopilot Config Controller-Instanz:

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

      Dieser Vorgang kann bis zu 15 Minuten dauern.

      Die Ausgabe sieht so aus:

      Created instance [cc-example].
      Fetching cluster endpoint and auth data.
      kubeconfig entry generated for krmapihost-cc-example.
      
    2. Prüfen Sie anhand der Liste der Config Controller-Instanzen, ob die Instanz erstellt wurde:

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

      Die Ausgabe sieht so aus:

      NAME                 LOCATION                 STATE
      cc-example           us-central1              RUNNING
      

    Config Controller die erforderliche Berechtigung erteilen

    In diesem Abschnitt erteilen Sie Config Controller die Berechtigung zum Verwalten von Google Cloud-Ressourcen:

    1. Legen Sie eine Umgebungsvariable für die E-Mail-Adresse Ihres Dienstkontos fest:

      export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
          -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
      
    2. Erstellen Sie die Richtlinienbindung:

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

      Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

      Die Ausgabe sieht in etwa so aus:

      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
      

    Config Controller-Instanz verwenden

    In den folgenden Abschnitten werden die Möglichkeiten vorgestellt, wie Sie Ihre Config Controller-Instanz verwenden können.

    Google Cloud -Ressource mit Config Connector erstellen

    Mit Ihrer Config Controller-Instanz können Sie Config Connector nutzen, um viele Google Cloud Dienste und -Ressourcen mithilfe von Kubernetes-Tools und -APIs zu verwalten. In diesem Abschnitt verwenden Sie Config Controller, um eine PubSubTopic-Ressource zu erstellen.

    Führen Sie folgende Schritte aus, um mit Config Connector ein Pub/Sub-Thema zu erstellen:

    1. Verwenden Sie Config Connector, um die Pub/Sub API zu aktivieren:

      1. Erstellen Sie mit Ihrem bevorzugten Texteditor eine Datei mit dem Namen enable-pubsub.yaml und kopieren Sie die folgende YAML-Datei hinein:

        # 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
        

        Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

      2. Wenden Sie das Manifest auf Ihren Cluster an, um die Pub/Sub API zu aktivieren:

        kubectl apply -f enable-pubsub.yaml
        

        Das Aktivieren dieser API kann einige Minuten dauern.

    2. Erstellen Sie mit Config Connector ein Pub/Sub-Thema:

      1. Erstellen Sie eine Datei mit dem Namen pubsub-topic.yaml und kopieren Sie die folgende YAML-Datei hinein:

        # 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. Erstellen Sie das Pub/Sub-Thema:

        kubectl apply -f pubsub-topic.yaml
        
    3. Prüfen Sie in der Liste der Pub/Sub-Themen, ob Config Controller Ihre Ressource in Google Clouderstellt hat:

      gcloud pubsub topics list
      

      Die Ausgabe sieht etwa so aus:

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

    Richtlinie mit Policy Controller erzwingen

    Mit Ihrer Config Controller-Instanz können Sie Policy Controller- und Policy Controller-Einschränkungen verwenden. Im Rahmen der Installation von Policy Controller installiert Config Controller automatisch die Einschränkungsvorlagenbibliothek. Sie können die Vorlagen in dieser Bibliothek verwenden, um verschiedene gängige Sicherheits- und Compliancekontrollen für Ihre Config Controller-Instanzen zu erzwingen.

    In diesem Abschnitt erstellen Sie eine Einschränkung mit der Einschränkungsvorlage GCPStorageLocationConstraintV1. Mit dieser Vorlage können Sie den Standort einschränken, an dem Sie Cloud Storage-Buckets erstellen können. Die Einschränkung, die Sie mit dieser Vorlage erstellen, beschränkt den Standort auf us-central1. Mit dieser Einschränkung können Sie dafür sorgen, dass Ihre Buckets in einer Region erstellt werden, die den besten Preis und die beste Leistung bietet.

    So erstellen Sie die Einschränkung:

    1. Erstellen Sie eine Datei mit dem Namen bucket-constraint.yaml und kopieren Sie die folgende YAML-Datei hinein:

      # 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. Einschränkung erstellen

      kubectl apply -f bucket-constraint.yaml
      

      Die Ausgabe sieht so aus:

      gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
      
    3. Demonstrieren Sie, dass die Einschränkung funktioniert, indem Sie versuchen, mit Config Connector eine StorageBucket-Ressource in asia-southeast1 zu erstellen:

      1. Erstellen Sie eine Datei mit dem Namen asia-storage-bucket.yaml und kopieren Sie die folgende YAML-Datei hinein:

        # 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. Versuchen Sie, den Cloud Storage-Bucket zu erstellen:

        kubectl apply -f asia-storage-bucket.yaml
        

        Die Ausgabe sieht so aus:

        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"]
        

    GitOps mit Config Sync einrichten

    Config Sync ist ein GitOps-Dienst, mit dem Sie Ihre Config Controller-Instanz mit Konfigurationen, Richtlinien undGoogle Cloud -Ressourcen synchronisieren können, die in einem Git-Repository, einem OCI-Image oder einem Helm-Repository gespeichert sind. Da Config Sync den Status von Config Controller kontinuierlich mit den Konfigurationen in Ihrer Quelle abgleicht, können Sie dafür sorgen, dass Ihre Instanzen eine konsistente Konfiguration haben.

    In diesem Abschnitt synchronisieren Sie Ihre Config Controller-Instanz mit einem öffentlichen GitHub-Repository. Dieses Repository enthält eine weitere PubSubTopic-Ressource. Durch Synchronisierung Ihrer Instanz aus diesem Repository wird die Ressource automatisch erstellt und auf Ihre Instanz angewendet. Wenn Sie einen GitOps-Workflow verwenden möchten, können Sie Ihre Ressourcen mit Config Sync erstellen, anstatt die Ressource direkt anzuwenden.

    1. Richten Sie für die Synchronisierung von GitHub Cloud NAT ein. Das ist erforderlich, da Ihre Config Controller-Instanz von einem privaten GKE-Cluster unterstützt wird und private Clusterknoten keinen ausgehenden Internetzugang haben:

      1. Erstellen Sie einen Cloud NAT-Router. Sie benötigen diesen Router, um Ihr NAT-Gateway einzurichten.

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

        Die Ausgabe sieht in etwa so aus:

        Creating router [cc-nat-router]...done.
        NAME           REGION       NETWORK
        cc-nat-router  us-central1  default
        
      2. Richten Sie auf dem Router, den Sie im vorherigen Schritt erstellt haben, ein NAT-Gateway ein:

        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
        

        Die Ausgabe sieht so aus:

        Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
        
    2. Um Ihre Config Controller-Instanz für die Synchronisierung aus einem Beispiel-Repository zu konfigurieren, erstellen Sie eine Datei mit dem Namen cc-rootsync.yaml und kopieren Sie in diese das folgende YAML-Manifest:

      # 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. Wenden Sie die Konfiguration an:

      kubectl apply -f cc-rootsync.yaml
      

      Nachdem Ihre Instanz aus dem Repository synchronisiert wurde, erstellt Config Sync das Pub/Sub-Thema und wendet es auf Ihre Config Controller-Instanz an.

    4. Prüfen Sie, ob Config Sync das Git-Repository mit Ihrer Config Controller-Instanz synchronisiert:

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

      Die Ausgabe sieht in etwa so aus:

      *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
      

      Wenn diese Ausgabe nicht angezeigt wird, warten Sie einige Minuten und versuchen Sie es dann noch einmal.

    5. Prüfen Sie, ob Config Controller Ihre Ressource erstellt hat:

      gcloud pubsub topics list
      

      Die Ausgabe sieht in etwa so aus:

      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
      

      In dieser Ausgabe sehen Sie den Pub/Sub, den Sie im Abschnitt Config Controller-Instanz erstellen erstellt haben, und den Sie durch Synchronisieren Ihrer Instanz mit einem GitHub-Repository erstellt haben.

    Bereinigen

    Damit Ihrem Google Cloud -Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

    Projekt löschen

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Einzelne Ressourcen löschen

    1. Löschen Sie die Config Connector-PubSubTopic-Ressource:

      kubectl delete -f pubsub-topic.yaml
      
    2. Löschen Sie die Policy Controller-Einschränkung:

      kubectl delete -f bucket-constraint.yaml
      
    3. Löschen Sie den NAT-Router:

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

      Drücken Sie y, wenn Sie dazu aufgefordert werden.

    4. Löschen Sie die von Config Sync erstellte Pub/Sub-Ressource:

      kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
      
    5. Löschen Sie die RootSync-Ressource:

      kubectl delete rootsync root-sync -n config-management-system
      
    6. Löschen Sie mit Ihrem bevorzugten Texteditor alle von Ihnen erstellten YAML-Dateien:

      • enable-pubsub.yaml
      • pubsub-topic.yaml
      • bucket-constraint.yaml
      • asia-storage-bucket.yaml
      • cc-rootsync.yaml
    7. Löschen Sie die Config Controller-Instanz:

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

      Drücken Sie y, wenn Sie dazu aufgefordert werden.

    Nächste Schritte