如需在 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
:要存储在存储桶中的 Terraform 状态文件的位置。BUCKET_ENDPOINT
:来自Bucket
自定义资源的端点。ACCESS_KEY
:从包含访问凭据的 Secret 中获取的访问密钥。按照获取存储桶访问凭据中的步骤获取访问密钥。SECRET_KEY
:从包含访问凭据的 Secret 中获取的密钥密文。按照获取存储桶访问凭据中的步骤获取密钥。
您必须将
skip_credentials_validation
和force_style_path
设置为true
,因为 GDC 不支持凭据验证,并且使用路径样式端点。在您在上一步中指定的存储桶中初始化新的状态文件编辑内容:
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