如需在 Google Distributed Cloud (GDC) 网闸隔离环境中配置 Terraform,您必须下载该工具并将其配置为处理 Kubernetes 资源。
本文档适用于需要设置 Terraform 来管理其经过网闸隔离的硬件和软件工作流的所有受众群体。如需了解详情,请参阅适用于 GDC 网闸隔离配置文档的受众群体。
准备工作
按照 HashiCorp 提供的文档,将 Terraform 1.6.3 或更高版本下载到您的工作站:https://developer.hashicorp.com/terraform/install。本文档中的后端配置使用的设置不受旧版 Terraform 支持。
验证您是否有现有的 GDC 存储桶。 如果您没有存储桶,请创建一个。如需了解详情,请参阅创建存储桶。
确保您的系统可以识别对象存储区使用的证书授权机构 (CA) 证书。
安装 gdcloud CLI。如需了解详情,请参阅使用 gdcloud CLI。
为托管您要使用 Terraform 管理的资源的 API 服务器或集群生成 kubeconfig 文件。如需了解详情,请参阅获取 kubeconfig 文件。
设置 Terraform
如需在 GDC 环境中设置 Terraform,请完成以下操作:
在 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 状态文件的路径。例如main.tfstate。ZONE:Bucket自定义资源 (status.region) 的可用区。例如zone1。Terraform 需要区域值,但 GDC 对象存储区不会检查该值。BUCKET_ENDPOINT:Bucket自定义资源中的status.endpoint值。例如https://objectstorage.org-1.zone1.google.gdch.test。ACCESS_KEY:从包含访问凭证的 Secret 中获取的访问密钥。如需详细了解如何获取访问密钥,请参阅获取存储桶访问凭证。Secret 中的值采用 base64 编码。请先对其进行解码,然后再使用。SECRET_KEY:从包含访问凭证的 Secret 中获取的密钥。如需详细了解如何获取密钥,请参阅获取存储桶访问凭证。Secret 中的值采用 base64 编码。请先对其进行解码,然后再使用。
GDC 对象存储区与 S3 兼容,但不是 AWS。其余设置用于为非 AWS S3 存储配置后端:
use_path_style:对 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 状态文件:
terraform init部署
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"] --- 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替换以下内容:
KUBECONFIG:托管您使用 Terraform 管理的资源的 API 服务器或集群的 kubeconfig 文件。USER_EMAIL:要将该角色绑定到的用户的邮箱。
将
crd-viewer角色部署到您要使用 Terraform 的每个 API 服务器或集群。在
main.tf文件中,插入以下required_providers代码块:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }此配置会安装 Kubernetes 提供程序,以在 GDC 环境中预配和管理 Kubernetes 资源。
初始化 Terraform 工作目录以安装提供程序:
terraform init