使用 VPC 网络对等互连部署中心辐射网络

Last reviewed 2022-01-11 UTC

本教程介绍了如何使用 Virtual Private Cloud (VPC) 的网络对等互连功能在 Google Cloud 中设置中心辐射型网络。VPC 网络对等互连使您可以连接 VPC 网络,以便不同 VPC 网络中的工作负载可在内部进行通信。流量保留在 Google 的网络中,不会通过公共互联网。

下图展示了您部署的架构。它由两个辐射 VPC 网络组成,每个网络都与一个中心 VPC 网络对等。其中一个辐射 VPC 网络与中心 VPC 网络之间的 VPN 隧道支持辐射连接。

使用 VPC 网络对等互连的中心辐射型架构

如需详细了解此架构和其他设计替代方案,请参阅中心辐射型网络架构

目标

使用 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 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. 确定您要在现有项目还是 Terraform 为您创建的新项目中部署资源。

  2. 获取所需的权限。

    要使用提供的 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)(在新项目中部署资源时需要)

    如果您没有所需的权限或不确定权限,请与组织管理员联系。

  3. (可选)如果要在 Terraform 创建的新项目中部署资源,请跳过此步骤。

    如需使用现有项目或您创建的项目,请完成以下步骤:

    1. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

      转到“项目选择器”

    2. 确保您的 Google Cloud 项目已启用结算功能

    3. 启用 Compute Engine、GKE、IAM、Service Usage 和 Resource Manager API。

      启用 API

准备环境

您可以使用 Cloud Shell 或本地主机完成本教程。Cloud Shell 已预安装 Terraform 并设置为使用 Google Cloud 进行身份验证。

使用 Cloud Shell

  • 下载并打开 Cloud Shell 中的 Terraform 示例模板。

    在 Cloud Shell 中打开

    Cloud Shell 会在单独的浏览器标签页中启动,并且 Terraform 示例模板将下载到 Cloud Shell 环境的 `$HOME/cloudshell_open` 目录中。

使用本地主机

请完成以下步骤:

  1. 安装 Terraform 0.13.0 版或更高版本。

  2. 适用于 Google Cloud 的 Terraform 示例和模块下载 Terraform 示例模板。

  3. 设置身份验证:

    1. 创建服务帐号:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME 替换为服务帐号的名称。

    2. 向服务帐号授予 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
    3. 生成密钥文件:

      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
  4. 通过设置环境变量 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 范围,并指定要在其中部署资源的项目。

  1. 在您下载的代码中(在本地主机或 Cloud Shell 中),转到 blueprints/networking/hub-and-spoke-peering 子目录。

    cd blueprints/networking/hub-and-spoke-peering
    
  2. 打开 variables.tf 文件。

    在此文件中,声明了 Terraform 配置的输入变量。某些变量具有 default 值。

  3. 确定需要赋值的变量:

    • 没有默认值的变量(例如 project_id)。
    • 具有可能要更改的默认值的变量。

      例如,ip_ranges 具有默认 CIDR 范围,但您可能需要在部署中使用不同的范围。

    对于您标识的每个变量,请阅读其 description 并记下其 type

  4. 创建名为 terraform.tfvars 的文本文件。

  5. 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"
    
  6. 初始化 Terraform:

    terraform init
    

    等待系统显示以下消息:

    Terraform has been successfully initialized!
    
  7. 验证配置没有错误:

    terraform validate
    

    如果该命令返回错误,请在配置中进行所需的更正,然后再次运行 terraform validate

    重复此步骤,直到命令返回以下消息:

    Success! The configuration is valid.
    
  8. 查看配置中定义的资源:

    terraform plan
    

    输出列出了在应用配置时 Terraform 供应的资源。

    如果要进行任何更改,请修改配置,然后再次运行 terraform validateterraform plan

供应资源

如果配置不需要进一步更改,请部署资源:

  1. 运行以下命令:

    terraform apply
    

    Terraform 会显示将创建的资源列表。

  2. 在系统提示执行操作时,输入 yes

    如果 Terraform 显示一条错误消息,指出一个或多个 API 未启用,请使用消息中显示的每个链接启用所需的 API。

    Terraform 展示一些显示部署进度的消息。创建完所有资源后,Terraform 会显示以下消息:

    Apply complete!
    

您现在已在 Google Cloud 中部署了一个中心辐射型网络。

添加、更改或移除资源

如需添加、更改或移除资源,请修改 Terraform 配置,然后按顺序运行 terraform validateterraform planterraform apply 命令。

清除数据

为避免系统因本教程中创建的资源而向您的 Google Cloud 帐号收取费用,请在不需要时删除所有资源。

  1. 运行以下命令:

    terraform destroy
    

    Terraform 会显示将被销毁的资源列表。

  2. 在系统提示执行操作时,输入 yes

    Terraform 会显示显示进度的消息。删除所有资源后,Terraform 将显示以下消息:

    Destroy complete!
    

后续步骤