Per utilizzare Terraform nel tuo ambiente air-gap Google Distributed Cloud (GDC), devi scaricarlo e configurarlo per gestire le risorse Kubernetes.
Prima di iniziare
Scarica Terraform sulla tua workstation seguendo la documentazione fornita da HashiCorp: https://developer.hashicorp.com/terraform/install.
Verifica di avere un bucket di archiviazione GDC esistente. Se non hai un bucket di archiviazione, creane uno.
Assicurati che il sistema possa riconoscere il certificato dell'autorità di certificazione (CA) utilizzato dall'object storage.
Gestire il file di stato
Il file di stato in Terraform viene utilizzato per registrare lo stato attuale del deployment e mapparlo alla configurazione Terraform. Poiché l'archiviazione di oggetti GDC è implementata utilizzando S3, puoi utilizzare l'API Terraform S3 per la sincronizzazione con un file di stato condiviso. Per farlo, devi configurare Terraform per la sincronizzazione 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" endpoint = "BUCKET_ENDPOINT" skip_credentials_validation = true force_path_style = true access_key = "ACCESS_KEY" secret_key = "SECRET_KEY" ... } }
Sostituisci quanto segue:
BUCKET_FQN
: il nome completo della risorsa personalizzataBucket
.TF_STATE_PATH
: la posizione del file di stato Terraform da archiviare nel bucket di archiviazione.BUCKET_ENDPOINT
: l'endpoint della risorsa personalizzataBucket
.ACCESS_KEY
: la chiave di accesso acquisita dal secret contenente le tue credenziali di accesso. Segui Ottieni le credenziali di accesso al bucket per acquisire la chiave di accesso.SECRET_KEY
: la chiave segreta acquisita dal secret contenente le tue credenziali di accesso. Segui Ottieni le credenziali di accesso al bucket per acquisire la chiave segreta.
Devi impostare
skip_credentials_validation
eforce_style_path
sutrue
poiché GDC non supporta la convalida delle credenziali e utilizza l'endpoint di stile del percorso.Inizializza le nuove modifiche al file di stato nel bucket di archiviazione specificato nel passaggio precedente:
terraform init
Terraform potrebbe richiedere una regione AWS come input obbligatorio, ma il valore non viene utilizzato perché utilizzi l'object storage GDC. Inserisci una regione AWS qualsiasi per soddisfare il requisito.
Imposta autorizzazioni
Oltre alle autorizzazioni necessarie per eseguire un'attività specifica utilizzando Terraform, ad esempio la creazione di un progetto GDC, devi disporre anche delle autorizzazioni per visualizzare le definizioni di risorse personalizzate in questo ambito. Applica le autorizzazioni richieste 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"] EOF
Sostituisci
KUBECONFIG
con il file kubeconfig del server API o del cluster che ospita la risorsa che gestisci con Terraform. Ad esempio, la maggior parte delle risorse viene eseguita sul server API Management. Per i carichi di lavoro 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
Per eseguire il provisioning e gestire le risorse Kubernetes, devi installare il provider 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.6.1" } } }
Inizializza la directory di lavoro di Terraform per installare il provider:
terraform init