Configura Terraform

Per utilizzare Terraform nel tuo ambiente GDC con air gap, devi scaricarlo e configurarlo per gestire le risorse Kubernetes.

Prima di iniziare

  • Scarica Terraform 1.6.3 o versioni successive sulla tua workstation seguendo la documentazione fornita da HashiCorp: https://developer.hashicorp.com/terraform/install. La configurazione del backend in questo documento utilizza impostazioni non supportate dalle versioni precedenti di Terraform.

  • Verifica di avere un bucket di archiviazione GDC esistente. Se non hai un bucket di archiviazione, creane uno.

  • Assicurati che il tuo sistema possa riconoscere il certificato dell'autorità di certificazione (CA) utilizzato dall'archiviazione di oggetti.

Gestisci il file di stato

Il file di stato in Terraform viene utilizzato per registrare lo stato attuale del deployment e mapparlo alla configurazione di Terraform. Poiché l'archiviazione di oggetti GDC è implementata utilizzando S3, puoi utilizzare l'API S3 di Terraform per la sincronizzazione con un file di stato condiviso. Per farlo, devi configurare Terraform in modo che si sincronizzi con lo stato remoto:

  1. Aggiungi la seguente configurazione a un file Terraform archiviato localmente, ad esempio il file main.tf:

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

    Sostituisci quanto segue:

    • BUCKET_FQN: il valore status.fullyQualifiedName della risorsa personalizzata Bucket. Ad esempio aabc2z8-platform-terraform-state.

    • TF_STATE_PATH: il percorso del file di stato Terraform da archiviare nel bucket di archiviazione. Ad esempio, main.tfstate.

    • ZONE: la zona della risorsa personalizzata Bucket (status.region). Ad esempio, zone1. Terraform richiede un valore per la regione, ma l'archiviazione di oggetti GDC non lo controlla.

    • BUCKET_ENDPOINT: il valore status.endpoint della risorsa personalizzata Bucket. Ad esempio https://objectstorage.org-1.zone1.google.gdch.test.

    • ACCESS_KEY: la chiave di accesso acquisita dal secret contenente le tue credenziali di accesso. Segui la procedura per ottenere le credenziali di accesso al bucket per acquisire la chiave di accesso. Il valore nel secret è codificato in base64. Decodificalo prima di utilizzarlo.

    • SECRET_KEY: la chiave secret acquisita dal secret contenente le tue credenziali di accesso. Segui Ottieni le credenziali di accesso al bucket per acquisire la chiave secret. Il valore nel secret è codificato in base64. Decodificalo prima di utilizzarlo.

    L'archiviazione di oggetti GDC è compatibile con S3, ma non è AWS. Le impostazioni rimanenti configurano il backend per lo spazio di archiviazione non AWS S3:

    • use_path_style: utilizza l'indirizzamento dei bucket in stile percorso per l'archiviazione di oggetti GDC.

    • skip_credentials_validation e skip_requesting_account_id: impedisce a Terraform di chiamare AWS STS e AWS IAM. GDC non fornisce questi servizi.

    • skip_metadata_api_check: impedisce a Terraform di eseguire query sul servizio di metadati AWS EC2.

    • skip_region_validation: consente di utilizzare il nome della zona come regione.

    • skip_s3_checksum: impedisce a Terraform di richiedere un checksum SHA-256 quando carica il file di stato.

  2. Inizializza le modifiche al nuovo file di stato nel bucket di archiviazione specificato nel passaggio precedente:

    terraform init
    

Imposta le autorizzazioni

Oltre alle autorizzazioni necessarie per eseguire un'attività specifica utilizzando Terraform, come la creazione di un progetto GDC, devi disporre anche delle autorizzazioni per visualizzare le definizioni di risorse personalizzate in quell'ambito. Applica le autorizzazioni necessarie per utilizzare Terraform:

  1. Crea la risorsa del ruolo del cluster crd-viewer:

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

    Sostituisci KUBECONFIG con il file kubeconfig del server API o del cluster che ospita la risorsa che stai gestendo con Terraform. Ad esempio, la maggior parte delle risorse viene eseguita sul server API di gestione. Per i workload dei container, imposta il file kubeconfig del cluster Kubernetes. Assicurati di impostare il server API globale se gestisci una risorsa globale.

  2. Associa il ruolo del cluster definito nel passaggio precedente all'utente:

    kubectl apply --kubeconfig KUBECONFIG -f - <<EOF
    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
    

Ripeti questi passaggi per ogni server o cluster API per cui vuoi impostare le autorizzazioni Terraform.

Installa e configura il provider Terraform

Devi installare il provider Kubernetes per eseguire il provisioning e gestire le risorse Kubernetes.

  1. In un file Terraform all'interno del modulo, ad esempio il file main.tf, inserisci il seguente blocco required_providers:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = ">=2.24.0"
        }
      }
    }
    
  2. Inizializza la directory di lavoro di Terraform per installare il provider:

    terraform init