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:
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 valorestatus.fullyQualifiedNamedella risorsa personalizzataBucket. Ad esempioaabc2z8-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 personalizzataBucket(status.region). Ad esempio,zone1. Terraform richiede un valore per la regione, ma l'archiviazione di oggetti GDC non lo controlla.BUCKET_ENDPOINT: il valorestatus.endpointdella risorsa personalizzataBucket. Ad esempiohttps://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_validationeskip_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.
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:
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"] EOFSostituisci
KUBECONFIGcon 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.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.
In un file Terraform all'interno del modulo, ad esempio il file
main.tf, inserisci il seguente bloccorequired_providers:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }Inizializza la directory di lavoro di Terraform per installare il provider:
terraform init