設定 Terraform

如要在 Google Distributed Cloud (GDC) 實體隔離環境中使用 Terraform,您必須下載並設定 Terraform,才能處理 Kubernetes 資源。

事前準備

管理狀態檔案

Terraform 中的狀態檔案用於記錄部署作業的目前狀態,並將其對應至 Terraform 設定。由於 GDC 物件儲存空間是使用 S3 實作,因此您可以使用 Terraform S3 API 與共用狀態檔案同步。如要這麼做,您必須設定 Terraform,與遠端狀態同步:

  1. 在儲存在本機的 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_validationforce_style_path 設為 true,因為 GDC 不支援憑證驗證,且使用路徑樣式端點。

  2. 在您於上一步指定的儲存空間 bucket 中,初始化新的狀態檔案編輯作業:

    terraform init
    

    Terraform 可能會要求提供 AWS 區域做為必要輸入內容,但由於您使用的是 GDC 物件儲存空間,因此不會用到該值。輸入任何 AWS 區域即可滿足這項需求。

設定權限

除了使用 Terraform 執行特定工作 (例如建立 GDC 專案) 所需的權限外,您也必須具備在該範圍內查看自訂資源定義的權限。套用使用 Terraform 的必要權限:

  1. 建立 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 伺服器。

  2. 將上一個步驟中定義的叢集角色繫結至使用者:

    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 資源。

  1. 在模組的 Terraform 檔案 (例如 main.tf 檔案) 中,插入下列 required_providers 區塊:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = "~>2.6.1"
        }
      }
    }
    
  2. 初始化 Terraform 工作目錄,安裝供應商:

    terraform init