将环境连接到 VPC 网络

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

本页面介绍了您的环境如何在 Cloud Composer 3 中访问 VPC 网络,提供了将环境连接到 VPC 网络的说明,还介绍了如何停用先前配置的连接。

VPC 网络访问简介

在 Cloud Composer 3 中,您可以允许访问某个环境的 VPC 网络。

如果要为环境启用对 VPC 网络的访问权限:

  • 您环境的 Airflow 组件可以访问 VPC 网络中的专用网络端点。例如,您的 DAG 代码可以通过已配置的 Airflow 连接访问位于 VPC 网络中的资源。

  • 如果您的环境使用专用 IP 网络,则除流向 Google Services API 的流量之外的所有内部流量都会路由到您的 VPC 网络

  • 根据您配置 VPC 网络的方式,专用 IP 环境可以通过 VPC 网络访问互联网

  • 无论 VPC 网络访问状态如何,始终可以访问 Google 服务 API。

  • 您的 VPC 网络中定义的专用 DNS 区域会自动可供环境的 Airflow 组件使用。

  • 环境会在您的 VPC 子网中预留两个 IP 地址。

Cloud Composer 使用网络连接将您的环境连接到 VPC 网络:

  • 如果您指定 VPC 网络和子网,则 Cloud Composer 会在您的项目中创建新的网络连接。在您删除环境、停用与 VPC 网络的连接或覆盖 VPC 连接参数后,此连接将被删除。

  • 如果您指定现有网络连接,则该网络连接必须位于环境所在的同一项目中。在您删除环境、停用连接或覆盖 VPC 连接参数后,此连接不会被删除。

  • 在共享 VPC 网络中:

    • 确保您已为 Cloud Composer 配置了共享 VPC 网络。如需了解如何为 Cloud Composer 配置项目和权限,请参阅配置共享 VPC

    • 配置共享 VPC 网络后,您可以从宿主项目将环境连接到 VPC 网络。如果您使用现有网络连接,则必须在服务项目(环境所在的项目)中创建该连接,并将其连接到共享 VPC 网络。

关于环境的内部 IP 范围

对于在租户项目中运行的组件(例如环境的集群和 Cloud SQL 代理),Cloud Composer 3 环境需要使用多个 IP 地址。这些 IP 地址取自环境的内部 IP 范围

  • 默认内部 IP 范围为 100.64.128.0/20

  • 您可以在创建环境时指定其他内部 IP 范围。此范围必须使用 /20 掩码。

  • 您无法更改现有环境的内部 IP 范围。

内部 IP 范围通过以下方式与您的 VPC 网络进行交互:

  • 内部 IP 范围不得与 Cloud Composer 环境所连接的 VPC 子网冲突。无法启用与内部 IP 范围重叠的 VPC 子网的连接。

  • 如果环境的内部 IP 范围与您的 VPC 网络范围重叠,则无法从该环境访问 VPC 网络中具有重叠 IP 地址的端点

    例如,如果内部范围为 100.64.128.0/20,则对 VPC 网络中 100.64.128.1 端点的任何请求都会失败,因为请求不会离开租户项目。

  • 内部 IP 范围未预留。您可以为多个环境使用相同的内部 IP 地址范围,而无需进行任何其他设置,因为不同环境使用的内部 VPC 网络是分开的。

  • 您可以将内部范围 IP 地址用于其他目的,前提是您环境中的 DAG 和任务不向它们发出请求。

连接到 VPC 网络

控制台

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 转到环境配置标签页。

  4. 网络配置部分,找到网络连接项,然后点击修改

  5. 网络连接对话框中,执行以下操作:

    • 如需创建新的网络连接,请在网络连接列表中选择创建新的网络连接。在网络子网列表中,选择 VPC 网络和子网。

    • 如需使用现有网络连接,请在网络连接列表中选择一个连接。

  6. 点击保存

gcloud

以下 Google Cloud CLI 参数指定了 VPC 网络连接参数:

  • --network:VPC 网络 ID。
  • --subnetwork:VPC 子网 ID。
  • --network-attachment:改用现有的网络连接。

新建网络连接

如需通过新的网络连接将您的环境连接到 VPC 网络,请运行以下 Google Cloud CLI 命令:

gcloud beta composer environments update ENVIRONMENT_NAME \
  --location LOCATION \
  --network NETWORK_ID \
  --subnetwork SUBNETWORK_ID

请替换以下内容:

  • ENVIRONMENT_NAME:环境的名称
  • LOCATION:环境所在的区域
  • NETWORK_ID:VPC 网络 ID
  • SUBNETWORK_ID:VPC 子网 ID

示例:

gcloud beta composer environments update example-environment \
  --location us-central1 \
  --network projects/example-project/global/networks/example-network \
  --subnetwork projects/example-project/regions/us-central1/subnetworks/example-subnetwork

现有网络连接

如需通过新的网络连接将您的环境连接到 VPC 网络,请运行以下 Google Cloud CLI 命令:

gcloud beta composer environments update ENVIRONMENT_NAME \
  --location LOCATION \
  --network-attachment NETWORK_ATTACHMENT_ID

请替换以下内容:

  • ENVIRONMENT_NAME:环境的名称
  • LOCATION:环境所在的区域
  • NETWORK_ATTACHMENT_ID:网络连接,采用 projects/{project}/regions/{region}/networkAttachments/{networkAttachment} 格式。

示例:

gcloud beta composer environments update example-environment \
  --location us-central1 \
  --network-attachment projects/example-project/regions/us-central1/networkAttachments/example-network-attachment

API

  1. 创建 environments.patch API 请求。

  2. 在此请求中:

    • 要创建新的网络连接,请执行以下操作:

      1. updateMask 参数中,指定 config.node_config.network,config.node_config.subnetwork 掩码。

      2. 在请求正文的 networksubnetwork 字段中,指定 VPC 网络和子网 ID。

    • 如需使用现有网络连接,请执行以下操作:

      1. updateMask 参数中,指定 config.node_config.composer_network_attachment 掩码。

      2. 在请求正文中,以 projects/{project}/regions/{region}/networkAttachments/{networkAttachment} 格式提供现有网络连接的值。

示例(新网络连接):

// PATCH https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.node_config.network,config.node_config.subnetwork

"config": {
  "nodeConfig": {
    "network": "projects/example-project/global/networks/example-network",
    "subnetwork": "projects/example-project/regions/us-central1/subnetworks/example-subnetwork"
  }
}

示例(现有网络连接):

// PATCH https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.node_config.composer_network_attachment

"config": {
  "nodeConfig": {
    "composerNetworkAttachment": "projects/example-project/regions/us-central1/networkAttachments/example-network-attachment"
  }
}

Terraform

node_config 块中的以下字段指定 VPC 网络连接参数:

  • network:VPC 网络 ID。
  • subnetwork:VPC 子网 ID。
  • composer_network_attachment:改用现有的网络连接。

新建网络连接

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    node_config {
      network = NETWORK_ID
      subnetwork = SUBNETWORK_ID
    }

  }
}

请替换以下内容:

  • ENVIRONMENT_NAME:您的环境的名称。
  • LOCATION:环境所在的区域。
  • NETWORK_ID:VPC 网络 ID
  • SUBNETWORK_ID:VPC 子网 ID

示例(新网络连接):

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    node_config {
      network = "projects/example-project/global/networks/example-network"
      subnetwork = "projects/example-project/regions/us-central1/subnetworks/example-subnetwork"
    }

    ... other configuration parameters
  }
}

现有网络连接

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    node_config {
      composer_network_attachment = NETWORK_ATTACHMENT_ID
    }

  }
}

请替换以下内容:

  • ENVIRONMENT_NAME:您的环境的名称。
  • LOCATION:环境所在的区域。
  • NETWORK_ATTACHMENT_ID:网络连接 ID。

示例(现有网络连接):

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    node_config {
      composer_network_attachment = projects/example-project/regions/us-central1/networkAttachments/example-network-attachment
    }

    ... other configuration parameters
  }
}

停用与 VPC 网络的连接

控制台

  1. 在 Google Cloud 控制台中,前往环境页面。

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 转到环境配置标签页。

  4. 网络配置部分,找到网络连接项,然后点击修改

  5. 网络连接对话框中,选择,然后点击保存

gcloud

--disable-vpc-connectivity 参数会停用环境的 VPC 网络连接:

gcloud beta composer environments update ENVIRONMENT_NAME \
  --location LOCATION \
  --disable-vpc-connectivity

请替换以下内容:

  • ENVIRONMENT_NAME:环境的名称
  • LOCATION:环境所在的区域

示例:

gcloud beta composer environments update example-environment \
  --location us-central1 \
  --disable-vpc-connectivity

API

  1. 创建 environments.patch API 请求。

  2. 在此请求中:

    1. updateMask 参数中,指定 config.node_config.network,config.node_config.subnetwork 掩码。

    2. 在请求正文的 networksubnetwork 字段中,指定空值。

示例:

// PATCH https://composer.googleapis.com/v1beta1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.node_config.network,config.node_config.subnetwork

"config": {
  "nodeConfig": {
    "network": "",
    "subnetwork": ""
  }
}

Terraform

无法使用 Terraform 分离 VPC 网络。您可以改为连接其他 VPC 网络来代替它,也可以使用 Google Cloud CLI 等其他工具分离网络。

后续步骤