Ressourcen mit Config Controller verwalten

Hier erfahren Sie, wie Sie eine Config Controller-Instanz erstellen, auf der Config Connector, Policy Controller und Config Sync vorinstalliert sind. Als Nächstes erfahren Sie, wie Sie Ihre Instanz verwenden können. Führen Sie dazu die folgenden Aufgaben aus:

  • Mit Config Connector eine Google Cloud-Ressource erstellen und verwalten.
  • Erstellen Sie eine Policy Controller-Einschränkung, um eine Richtlinie zu erzwingen und einen Richtlinienverstoß zu erkennen, bevor sie bereitgestellt wird.
  • 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. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Aktivieren Sie die KRM, GKE API, Resource Manager und Service Usage APIs:

    gcloud services enable krmapihosting.googleapis.com  container.googleapis.com  cloudresourcemanager.googleapis.com  serviceusage.googleapis.com
  7. Installieren Sie die Google Cloud CLI.
  8. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  9. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  10. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  11. Aktivieren Sie die KRM, GKE API, Resource Manager und Service Usage APIs:

    gcloud services enable krmapihosting.googleapis.com  container.googleapis.com  cloudresourcemanager.googleapis.com  serviceusage.googleapis.com

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. Rufen Sie die erforderlichen Anmeldedaten zur Authentifizierung und die Endpunktinformationen ab, um kubectl für die Kommunikation mit dem Config Controller-Endpunkt zu konfigurieren:

    gcloud anthos config controller get-credentials cc-example \
        --location us-central1
    
  3. Prüfen Sie in 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 erforderliche Berechtigung gewähren

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 erfahren Sie, 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 die folgenden 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 einem Texteditor eine Datei mit dem Namen enable-pubsub.yaml und kopieren Sie den folgenden YAML-Code in diese Datei:

      # 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. Verwenden Sie Config Connector, um ein Pub/Sub-Thema zu erstellen:

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

      # 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 Cloud erstellt hat:

    gcloud pubsub topics list
    

    Die Ausgabe sieht in 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 Policy Controller-Installation installiert Config Controller automatisch die Einschränkungsvorlagenbibliothek. Sie können die Vorlagen in dieser Bibliothek verwenden, um eine Vielzahl allgemeiner Sicherheits- und Compliancekontrollen für Ihre Config Controller-Instanzen zu erzwingen.

In diesem Abschnitt erstellen Sie mit der Einschränkungsvorlage GCPStorageLocationConstraintV1 eine Einschränkung. 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 das beste Preis- und Leistungsniveau bietet.

So erstellen Sie die Einschränkung:

  1. Erstellen Sie eine Datei mit dem Namen bucket-constraint.yaml und kopieren Sie den folgenden YAML-Code in diese Datei:

    # 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. Erstellen Sie die Einschränkung:

    kubectl apply -f bucket-constraint.yaml
    

    Die Ausgabe sieht so aus:

    gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
    
  3. Zeigen 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 den folgenden YAML-Code 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, mit dem Sie Ihre Config Controller-Instanz mit Konfigurationen, Richtlinien und Google Cloud-Ressourcen synchronisieren können, die in einem Git-Repository, OCI-Image- oder Helm-Repository gespeichert sind. Da Config Sync den Status von Config Controller kontinuierlich mit den Konfigurationen in Ihrer Quelle vergleicht, können Sie dafür sorgen, dass die Konfiguration Ihrer Instanzen konsistent ist.

In diesem Abschnitt synchronisieren Sie Ihre Config Controller-Instanz mit einem öffentlichen GitHub-Repository. Dieses Repository enthält eine weitere PubSubTopic-Ressource. Durch das Synchronisieren Ihrer Instanz mit 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. Dies ist erforderlich, da Ihre Config Controller-Instanz durch einen privaten Cluster der Google Kubernetes Engine (GKE) Enterprise-Version gesichert wird und private Clusterknoten keinen ausgehenden Internetzugriff 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. Wenn Sie Ihre Config Controller-Instanz für die Synchronisierung aus einem Beispiel-Repository konfigurieren möchten, erstellen Sie eine Datei mit dem Namen cc-rootsync.yaml und kopieren Sie den folgenden YAML-Code in diese Datei:

    # 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 die Instanz mit 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 Sie diese Ausgabe nicht sehen, warten Sie ein paar 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, sowie den Pub/Sub, 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

    Google Cloud-Projekt löschen:

    gcloud projects delete PROJECT_ID

Einzelne Ressourcen löschen

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

    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 einem 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