如要在 Google Distributed Cloud (GDC) 實體隔離環境中使用 Terraform,您必須下載 Terraform,並設定 Terraform 處理 Kubernetes 資源。
事前準備
請按照 HashiCorp 提供的說明文件,將 Terraform 1.6.3 以上版本下載到工作站:https://developer.hashicorp.com/terraform/install。本文中的後端設定採用舊版 Terraform 不支援的設定。
確認系統能辨識物件儲存庫使用的憑證授權單位 (CA) 憑證。
管理狀態檔案
Terraform 中的狀態檔案用於記錄部署作業的目前狀態,並對應至 Terraform 設定。由於 GDC 物件儲存庫是使用 S3 實作,因此您可以使用 Terraform S3 API 與共用狀態檔案同步。為此,您必須設定 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:Terraform 狀態檔案的路徑,用於儲存在 Storage bucket 中。例如: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:從含有存取憑證的密鑰取得的密鑰。請按照「取得 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 核對和。
在上一步指定的儲存空間值區中,初始化新的狀態檔案編輯內容:
terraform init
設定權限
除了使用 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 Provider,才能佈建及管理 Kubernetes 資源。
在模組的 Terraform 檔案 (例如
main.tf檔案) 中,插入下列required_providers區塊:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }初始化 Terraform 目前使用的目錄,以便安裝供應商:
terraform init