下图展示了您部署的架构。它由两个辐射 VPC 网络组成,每个网络都与一个中心 VPC 网络对等。其中一个辐射 VPC 网络与中心 VPC 网络之间的 VPN 隧道支持辐射连接。
如需详细了解此架构和其他设计替代方案,请参阅中心辐射型网络架构。
目标
使用 Google 提供的 Terraform 模板在 Google Cloud 中供应以下资源:- 三个 VPC 网络,一个指定为中心网络,另外两个指定为辐射型网络。
- 您指定的区域的每个 VPC 网络中的子网。
- 每个辐射 VPC 网络和中心 VPC 网络之间的 VPC 网络对等互连配置。
- 每个 VPC 网络的一组防火墙规则。
- 每个辐射 VPC 网络的 Cloud NAT 网关。
- 每个 VPC 网络的测试 Compute Engine 实例。
- spoke-2 VPC 网络中具有单个节点池的测试 Google Kubernetes Engine (GKE) 集群。
- Compute Engine 实例的服务帐号。
- GKE 节点的服务帐号。
- 中心 VPC 网络和 spoke-2 VPC 网络中的静态 Cloud VPN 网关,每个网关只有一条隧道。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
确定您要在现有项目还是 Terraform 为您创建的新项目中部署资源。
获取所需的权限。
要使用提供的 Terraform 模板创建和管理资源,Google 帐号或服务帐号需要以下 Identity and Access Management (IAM) 角色:
- Compute Admin (
roles/compute.admin
) - Kubernetes Engine Admin (
roles/container.admin
) - Service Account Admin (
roles/iam.serviceAccountAdmin
) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) - Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
) - Project Creator (
roles/resourcemanager.projectCreator
)(在新项目中部署资源时需要)
如果您没有所需的权限或不确定权限,请与组织管理员联系。
- Compute Admin (
(可选)如果要在 Terraform 创建的新项目中部署资源,请跳过此步骤。
如需使用现有项目或您创建的项目,请完成以下步骤:
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 Compute Engine、GKE、IAM、Service Usage 和 Resource Manager API。
-
准备环境
您可以使用 Cloud Shell 或本地主机完成本教程。Cloud Shell 已预安装 Terraform 并设置为使用 Google Cloud 进行身份验证。
使用 Cloud Shell
使用本地主机
请完成以下步骤:
-
安装 Terraform 0.13.0 版或更高版本。
-
从适用于 Google Cloud 的 Terraform 示例和模块下载 Terraform 示例模板。
-
设置身份验证:
-
创建服务帐号:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
将
SERVICE_ACCOUNT_NAME
替换为服务帐号的名称。 -
向服务帐号授予
roles/owner
IAM 角色:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/owner
请替换以下内容:
SERVICE_ACCOUNT_NAME
:服务帐号的名称PROJECT_ID
:您在其中创建服务帐号的项目的 ID
-
生成密钥文件:
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
替换以下内容:
FILE_NAME
:密钥文件的名称SERVICE_ACCOUNT_NAME
:服务帐号的名称PROJECT_ID
:您在其中创建服务帐号的项目的 ID
-
-
通过设置环境变量
GOOGLE_APPLICATION_CREDENTIALS
向应用代码提供身份验证凭据。此变量仅适用于当前的 Shell 会话。如果您希望变量应用于未来的 Shell 会话,请在 shell 启动文件中设置变量,例如在~/.bashrc
或~/.profile
文件中。Linux 或 macOS
export GOOGLE_APPLICATION_CREDENTIALS="
KEY_PATH
"将
KEY_PATH
替换为包含凭据的 JSON 文件的路径。例如:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Windows
对于 PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="
KEY_PATH
"将
KEY_PATH
替换为包含凭据的 JSON 文件的路径。例如:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
对于命令提示符:
set GOOGLE_APPLICATION_CREDENTIALS=
KEY_PATH
将
KEY_PATH
替换为包含凭据的 JSON 文件的路径。
配置 Terraform 变量
您下载的 Terraform 代码包含可用于根据需要自定义部署的变量。例如,您可以调整子网 CIDR 范围,并指定要在其中部署资源的项目。
在您下载的代码中(在本地主机或 Cloud Shell 中),转到
blueprints/networking/hub-and-spoke-peering
子目录。cd blueprints/networking/hub-and-spoke-peering
打开
variables.tf
文件。在此文件中,声明了 Terraform 配置的输入变量。某些变量具有
default
值。确定需要赋值的变量:
- 没有默认值的变量(例如
project_id
)。 具有可能要更改的默认值的变量。
例如,
ip_ranges
具有默认 CIDR 范围,但您可能需要在部署中使用不同的范围。
对于您标识的每个变量,请阅读其
description
并记下其type
。- 没有默认值的变量(例如
创建名为
terraform.tfvars
的文本文件。在
terraform.tfvars
文件中,为您之前确定的变量分配适当的值。例如:
ip_ranges = { hub = "10.0.0.0/24" spoke-1 = "10.0.24.0/24" spoke-2 = "10.0.48.0/24" } prefix = "dev" project_id = "my-project" region = "us-central1"
初始化 Terraform:
terraform init
等待系统显示以下消息:
Terraform has been successfully initialized!
验证配置没有错误:
terraform validate
如果该命令返回错误,请在配置中进行所需的更正,然后再次运行
terraform validate
。重复此步骤,直到命令返回以下消息:
Success! The configuration is valid.
查看配置中定义的资源:
terraform plan
输出列出了在应用配置时 Terraform 供应的资源。
如果要进行任何更改,请修改配置,然后再次运行
terraform validate
和terraform plan
。
供应资源
如果配置不需要进一步更改,请部署资源:
运行以下命令:
terraform apply
Terraform 会显示将创建的资源列表。
在系统提示执行操作时,输入
yes
。如果 Terraform 显示一条错误消息,指出一个或多个 API 未启用,请使用消息中显示的每个链接启用所需的 API。
Terraform 展示一些显示部署进度的消息。创建完所有资源后,Terraform 会显示以下消息:
Apply complete!
您现在已在 Google Cloud 中部署了一个中心辐射型网络。
添加、更改或移除资源
如需添加、更改或移除资源,请修改 Terraform 配置,然后按顺序运行 terraform validate
、terraform plan
、terraform apply
命令。
清除数据
为避免系统因本教程中创建的资源而向您的 Google Cloud 帐号收取费用,请在不需要时删除所有资源。运行以下命令:
terraform destroy
Terraform 会显示将被销毁的资源列表。
在系统提示执行操作时,输入
yes
。Terraform 会显示显示进度的消息。删除所有资源后,Terraform 将显示以下消息:
Destroy complete!