Terraform verwenden

Wenn Sie Terraform in Ihrer GDC-Umgebung (Google Distributed Cloud) mit Air Gap konfigurieren möchten, müssen Sie es herunterladen und für die Verarbeitung von Kubernetes-Ressourcen konfigurieren.

Dieses Dokument richtet sich an alle Zielgruppen, die Terraform einrichten müssen, um ihre Hardware- und Software-Workflows mit Air Gap zu verwalten. Weitere Informationen finden Sie unter Zielgruppen für die Dokumentation zu GDC mit Air Gap.

Hinweis

  • Laden Sie Terraform 1.6.3 oder höher auf Ihre Workstation herunter. Folgen Sie dazu der Dokumentation von HashiCorp: https://developer.hashicorp.com/terraform/install. Die Backend-Konfiguration in diesem Dokument verwendet Einstellungen, die von älteren Terraform-Versionen nicht unterstützt werden.

  • Prüfen Sie, ob ein GDC-Speicher-Bucket vorhanden ist. Wenn Sie keinen Storage-Bucket haben, erstellen Sie einen. Weitere Informationen finden Sie unter Storage-Buckets erstellen.

  • Achten Sie darauf, dass Ihr System das vom Objektspeicher verwendete Zertifikat der Zertifizierungsstelle (CA) erkennen kann.

  • Installieren Sie die gdcloud CLI. Weitere Informationen finden Sie unter gdcloud CLI verwenden.

  • Generieren Sie die kubeconfig-Datei für den API-Server oder Cluster, der die Ressourcen hostet, die Sie mit Terraform verwalten möchten. Weitere Informationen finden Sie unter kubeconfig-Datei abrufen.

Terraform einrichten

So richten Sie Terraform in Ihrer GDC-Umgebung ein:

  1. Erstellen Sie in Ihrem Terraform-Modul oder in der Sammlung von Terraform-Dateien auf Ihrer Workstation die Datei main.tf und fügen Sie die folgende Konfiguration hinzu:

    terraform {
      backend "s3" {
        bucket = "BUCKET_FQN"
        key = "TF_STATE_PATH"
        region = "ZONE"
        endpoints = {
          s3 = "BUCKET_ENDPOINT"
        }
        use_path_style = true
        access_key = "ACCESS_KEY"
        secret_key = "SECRET_KEY"
        skip_credentials_validation = true
        skip_requesting_account_id = true
        skip_metadata_api_check = true
        skip_region_validation = true
        skip_s3_checksum = true
      }
    }
    

    Ersetzen Sie Folgendes:

    • BUCKET_FQN: der status.fullyQualifiedName-Wert aus der benutzerdefinierten Ressource Bucket. Beispiel: aabc2z8-platform-terraform-state.

    • TF_STATE_PATH: der Pfad der Terraform-Statusdatei, die im Storage-Bucket gespeichert werden soll. Beispiel: main.tfstate.

    • ZONE: die Zone der benutzerdefinierten Bucket-Ressource (status.region). Beispiel: zone1. Terraform erfordert einen Regionswert, der jedoch vom GDC-Objektspeicher nicht geprüft wird.

    • BUCKET_ENDPOINT: der status.endpoint-Wert aus der benutzerdefinierten Ressource Bucket. Beispiel: https://objectstorage.org-1.zone1.google.gdch.test.

    • ACCESS_KEY: der Zugriffsschlüssel, der aus dem Secret mit Ihren Zugriffsdaten abgerufen wurde. Weitere Informationen zum Abrufen des Zugriffsschlüssels finden Sie unter Bucket-Zugriffsanmeldedaten abrufen. Der Wert im Secret ist base64-codiert. Decodieren Sie ihn, bevor Sie ihn verwenden.

    • SECRET_KEY: der Secret-Schlüssel, der aus dem Secret mit Ihren Zugriffsanmeldedaten abgerufen wurde. Weitere Informationen zum Abrufen des geheimen Schlüssels finden Sie unter Anmeldedaten für den Bucket-Zugriff abrufen. Der Wert im Secret ist base64-codiert. Decodieren Sie ihn, bevor Sie ihn verwenden.

    Der GDC-Objektspeicher ist S3-kompatibel, aber nicht AWS. Mit den verbleibenden Einstellungen wird das Backend für Nicht-AWS-S3-Speicher konfiguriert:

    • use_path_style: Verwendet die pfadbasierte Bucket-Adressierung für den GDC-Objektspeicher.

    • skip_credentials_validation und skip_requesting_account_id: Verhindert, dass Terraform AWS STS und AWS IAM aufruft. GDC bietet diese Dienste nicht an.

    • skip_metadata_api_check: Verhindert, dass Terraform den AWS EC2-Metadatendienst abfragt.

    • skip_region_validation: Ermöglicht die Verwendung des Zonennamens als Region.

    • skip_s3_checksum: Verhindert, dass Terraform beim Hochladen der Statusdatei nach einer SHA-256-Prüfsumme fragt.

  2. Initialisieren Sie die Terraform-Statusdatei in dem Storage-Bucket, den Sie im vorherigen Schritt angegeben haben:

    terraform init
    
  3. Stellen Sie die Clusterrollenressource crd-viewer bereit und binden Sie sie an Ihr Nutzerkonto:

    kubectl apply --kubeconfig KUBECONFIG -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: crd-viewer
    rules:
    - apiGroups: ["apiextensions.k8s.io"]
      resources: ["customresourcedefinitions"]
      verbs: ["get", "list", "watch"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: crd-viewer-binding
    subjects:
    - kind: User
      name: USER_EMAIL
    roleRef:
      kind: ClusterRole
      name: crd-viewer
      apiGroup: rbac.authorization.k8s.io
    EOF
    

    Ersetzen Sie Folgendes:

    • KUBECONFIG: die kubeconfig-Datei des API-Servers oder Clusters, der die Ressourcen hostet, die Sie mit Terraform verwalten.

    • USER_EMAIL: die E-Mail-Adresse des Nutzers, an den die Rolle gebunden werden soll.

    Stellen Sie die Rolle crd-viewer auf jedem API-Server oder Cluster bereit, für den Sie Terraform verwenden möchten.

  4. Fügen Sie in der Datei main.tf den folgenden required_providers-Block ein:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = ">=2.24.0"
        }
      }
    }
    

    Mit dieser Konfiguration wird der Kubernetes-Anbieter installiert, um Kubernetes-Ressourcen in Ihrer GDC-Umgebung bereitzustellen und zu verwalten.

  5. Initialisieren Sie Ihr Terraform-Arbeitsverzeichnis, um den Anbieter zu installieren:

    terraform init
    

Nächste Schritte