如要在 Google Distributed Cloud (GDC) 實體隔離環境中設定 Terraform,您必須下載 Terraform,並設定 Terraform 來處理 Kubernetes 資源。
本文適用於所有需要設定 Terraform,以管理實體隔離硬體和軟體工作流程的目標對象。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。
事前準備
請按照 HashiCorp 提供的說明文件,將 Terraform 1.6.3 以上版本下載到工作站:https://developer.hashicorp.com/terraform/install。本文中的後端設定採用舊版 Terraform 不支援的設定。
確認您已有 GDC 儲存空間 bucket。如果沒有 Storage bucket,請建立一個。詳情請參閱「建立儲存空間 bucket」。
確認系統能辨識物件儲存庫使用的憑證授權單位 (CA) 憑證。
安裝 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" 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 } }更改下列內容:
BUCKET_FQN:Bucket自訂資源的status.fullyQualifiedName值。例如aabc2z8-platform-terraform-state。TF_STATE_PATH:要儲存在 bucket 中的 Terraform 狀態檔案路徑。例如:main.tfstate。ZONE:Bucket自訂資源 (status.region) 的可用區,例如zone1。Terraform 需要區域值,但 GDC 物件儲存庫不會檢查該值。BUCKET_ENDPOINT:Bucket自訂資源的status.endpoint值。例如https://objectstorage.org-1.zone1.google.gdch.test。ACCESS_KEY:從含有存取憑證的密鑰取得的存取金鑰。如要進一步瞭解如何取得存取金鑰,請參閱「取得 bucket 存取憑證」。Secret 中的值是以 base64 編碼。請先解碼再使用。SECRET_KEY:從含有存取憑證的密鑰取得的密鑰。如要進一步瞭解如何取得 Secret Key,請參閱「取得 bucket 存取憑證」。Secret 中的值是以 base64 編碼。請先解碼再使用。
GDC 物件儲存空間與 S3 相容,但並非 AWS。其餘設定會為非 AWS S3 儲存空間設定後端:
use_path_style:使用路徑樣式 bucket 定址,用於 GDC 物件儲存庫。skip_credentials_validation和skip_requesting_account_id:阻止 Terraform 呼叫 AWS STS 和 AWS IAM。GDC 不提供這些服務。skip_metadata_api_check:禁止 Terraform 查詢 AWS EC2 中繼資料服務。skip_region_validation:可讓您將可用區名稱當做區域。skip_s3_checksum:Terraform 上傳狀態檔案時,不會要求提供 SHA-256 核對和。
在上一個步驟指定的儲存空間 bucket 中,初始化 Terraform 狀態檔案:
terraform init部署
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