配置 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_FQNBucket 自定义资源的完全限定名称。

    • TF_STATE_PATH:要存储在存储桶中的 Terraform 状态文件的位置。

    • BUCKET_ENDPOINT:来自 Bucket 自定义资源的端点。

    • ACCESS_KEY:从包含访问凭据的 Secret 中获取的访问密钥。按照获取存储桶访问凭据中的步骤获取访问密钥。

    • SECRET_KEY:从包含访问凭据的 Secret 中获取的密钥密文。按照获取存储桶访问凭据中的步骤获取密钥。

    您必须将 skip_credentials_validationforce_style_path 设置为 true,因为 GDC 不支持凭据验证,并且使用路径样式端点。

  2. 在您在上一步中指定的存储桶中初始化新的状态文件编辑内容:

    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