如要在 Google Distributed Cloud (GDC) 實體隔離環境中使用 Terraform,您必須下載並設定 Terraform,才能處理 Kubernetes 資源。
事前準備
- 按照 HashiCorp 提供的說明文件,將 Terraform 下載到工作站: https://developer.hashicorp.com/terraform/install。 
- 請確認系統可辨識物件儲存空間使用的憑證授權單位 (CA) 憑證。 
管理狀態檔案
Terraform 中的狀態檔案用於記錄部署作業的目前狀態,並將其對應至 Terraform 設定。由於 GDC 物件儲存空間是使用 S3 實作,因此您可以使用 Terraform S3 API 與共用狀態檔案同步。如要這麼做,您必須設定 Terraform,與遠端狀態同步:
- 在儲存在本機的 Terraform 檔案中新增以下設定,例如 - 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" ... } }- 更改下列內容: - BUCKET_FQN:來自- Bucket自訂資源的完整名稱。
- TF_STATE_PATH:要儲存在儲存空間 bucket 中的 Terraform 狀態檔案位置。
- BUCKET_ENDPOINT:來自- Bucket自訂資源的端點。
- ACCESS_KEY:從包含存取憑證的密鑰取得的存取金鑰。請按照「取得值區存取憑證」一文的說明取得存取金鑰。
- SECRET_KEY:從包含存取憑證的密鑰取得的密鑰。請按照「取得值區存取憑證」一文的說明取得私密金鑰。
 - 您必須將 - skip_credentials_validation和- force_style_path設為- true,因為 GDC 不支援憑證驗證,且使用路徑樣式端點。
- 在您於上一步指定的儲存空間 bucket 中,初始化新的狀態檔案編輯作業: - terraform init- Terraform 可能會要求提供 AWS 區域做為必要輸入內容,但由於您使用的是 GDC 物件儲存空間,因此不會用到該值。輸入任何 AWS 區域即可滿足這項需求。 
設定權限
除了使用 Terraform 執行特定工作 (例如建立 GDC 專案) 所需的權限外,您也必須具備在該範圍內查看自訂資源定義的權限。套用使用 Terraform 的必要權限:
- 建立 - 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- 請將 - KUBECONFIG替換為 API 伺服器或叢集的 kubeconfig 檔案,該伺服器/叢集會代管您要透過 Terraform 管理的資源。舉例來說,大多數資源都會在 Management API 伺服器上執行。如果是容器工作負載,請設定 Kubernetes 叢集 kubeconfig 檔案。如果您要管理全域資源,請務必設定全域 API 伺服器。
- 將上一個步驟中定義的叢集角色繫結至使用者: - 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
針對要設定 Terraform 權限的每個 API 伺服器或叢集,重複執行這些步驟。
安裝及設定 Terraform 供應商
您必須安裝 Kubernetes 供應商,才能佈建及管理 Kubernetes 資源。
- 在模組的 Terraform 檔案 (例如 - main.tf檔案) 中,插入下列- required_providers區塊:- terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "~>2.6.1" } } }
- 初始化 Terraform 工作目錄,安裝供應商: - terraform init