如要在 Google Distributed Cloud (GDC) 氣隙隔離環境中設定 Terraform,您必須下載並設定 Terraform,才能處理 Kubernetes 資源。
這份文件適用於所有需要設定 Terraform 的目標對象群組,方便他們管理與氣隙硬體和軟體工作流程相關的作業。詳情請參閱 GDC 氣隙環境適用的目標對象說明文件。
事前準備
按照 HashiCorp 提供的說明文件,將 Terraform 下載到工作站: https://developer.hashicorp.com/terraform/install。
確認您已有 GDC 儲存空間 bucket。 如果沒有儲存空間 bucket,請建立一個。詳情請參閱「建立 Storage 值區」。
安裝 gdcloud CLI。詳情請參閱「使用 gdcloud CLI」。
為代管要使用 Terraform 管理資源的 API 伺服器或叢集,產生 kubeconfig 檔案。詳情請參閱「取得 kubeconfig 檔案」。
設定 Terraform
如要在 GDC 環境中設定 Terraform,請完成下列步驟:
在 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:從包含存取憑證的密鑰取得的存取金鑰。如要進一步瞭解如何取得存取金鑰,請參閱「取得 bucket 存取憑證」。SECRET_KEY:從包含存取憑證的密鑰取得的密鑰。如要進一步瞭解如何取得私密金鑰,請參閱「取得 bucket 存取憑證」。
在您於上一步驟指定的儲存空間 bucket 中,初始化 Terraform 狀態檔案:
terraform initTerraform 可能會要求提供 AWS 區域做為必要輸入內容,但由於您使用的是 GDC 物件儲存空間,因此系統不會使用該值。輸入任何 AWS 區域,即可滿足這項需求。
部署
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"] --- 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更改下列內容:
KUBECONFIG:API 伺服器或叢集的 kubeconfig 檔案,其中包含您要透過 Terraform 管理的資源。USER_EMAIL:要將角色繫結至的使用者電子郵件地址。
將
crd-viewer角色部署至要使用 Terraform 的每個 API 伺服器或叢集。在
main.tf檔案中,插入下列required_providers區塊:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }這項設定會安裝 Kubernetes 供應商,在 GDC 環境中佈建及管理 Kubernetes 資源。
初始化 Terraform 工作目錄,安裝供應商:
terraform init