如要在 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