將環境連結至虛擬私有雲網路

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本頁面說明環境如何在 Cloud Composer 3 中存取虛擬私有雲網路,並提供將環境連線至虛擬私有雲網路的操作說明,以及如何停用先前設定的連線。

關於虛擬私有雲網路存取權

在 Cloud Composer 3 中,您可以為環境啟用虛擬私有雲網路存取權。

如果您為環境啟用虛擬私有雲網路存取權:

  • 環境中的 Airflow 元件可以存取虛擬私有雲網路中的私人網路端點。舉例來說,DAG 程式碼可透過已設定的 Airflow 連線存取位於虛擬私人雲端網路中的資源。

  • 如果您的環境使用私人 IP 網路所有內部流量都會轉送至您的 VPC 網路,但透過私人 Google 存取權可供私人 IP 環境使用的 Google API、服務和網域的流量除外。

  • 視您設定虛擬私人雲端網路的方式而定,私人 IP 環境可以透過虛擬私人雲端網路存取網際網路

  • 在虛擬私有雲網路中定義的私人 DNS 區域會自動提供給環境的 Airflow 元件。

  • 環境會在虛擬私有雲子網路中保留兩個 IP 位址。

Cloud Composer 會使用網路連結,將環境連線至虛擬私有雲網路:

  • 如果您指定虛擬私有雲網路和子網路,Cloud Composer 會在專案中建立新的網路連結。刪除環境、停用與虛擬私有雲網路的連線,或覆寫虛擬私有雲網路連線參數後,這個附件就會遭到刪除。

  • 如果您指定現有的網路附件,則該附件必須位於與環境相同的專案中。刪除環境、停用連線或覆寫 VPC 連線參數後,這個附件不會遭到刪除。

  • 在共用虛擬私有雲網路中:

    • 請確認您已為 Cloud Composer 設定共用虛擬私有雲網路。如要瞭解如何設定 Cloud Composer 的專案和權限,請參閱「設定共用虛擬私有雲」一文。

    • 設定共用虛擬私有雲網路後,您就可以從主專案將環境連線至 VPC 網路。如果您使用現有的網路附件,則必須在服務專案 (環境所在位置) 中建立該附件,並將其附加至共用虛擬私有雲網路。

Cloud Composer 3 中間接 DNS 對等的限制

對應 DNS 對等互連的限制會以以下方式套用至 Cloud Composer 3 環境:

  • Cloud DNS 的限制為一個中繼跳躍,也就是說,系統只支援兩個跳躍。
  • 在 Cloud Composer 3 中,環境的元件會在用戶群專案中執行,並透過虛擬私有雲對等互連,與環境所在的專案通訊。租用戶專案的 VPC 對等互連會使用這個傳遞式跳躍,因此總共只能使用一個跳躍。

關於環境的內部 IP 範圍

Cloud Composer 3 環境需要為在租用戶專案中執行的元件 (例如環境叢集和 Cloud SQL 代理程式) 提供多個 IP 位址。這些 IP 位址來自環境的內部 IP 位址範圍

  • 預設內部 IP 範圍為 100.64.128.0/20

  • 您可以在建立環境時指定不同的內部 IP 範圍。這個範圍必須使用 /20 遮罩。

  • 您無法變更現有環境的內部 IP 範圍。

內部 IP 範圍會以以下方式與虛擬私有雲網路互動:

  • 內部 IP 範圍不得與 Cloud Composer 環境連線的 VPC 子網路相衝突。無法啟用與內部 IP 範圍重疊的 VPC 子網路連線。

  • 如果環境的內部 IP 範圍與虛擬私有雲網路範圍重疊,則虛擬私有雲網路中 IP 位址重疊的端點無法從環境存取

    舉例來說,如果內部範圍是 100.64.128.0/20,則任何對 VPC 網路中 100.64.128.1 端點的請求都會失敗,因為該請求不會離開租用戶專案。

  • 內部 IP 範圍未保留。由於不同環境使用的內部虛擬私有雲網路是分開的,因此您可以為多個環境使用相同的內部 IP 範圍,而無需額外設定。

  • 只要環境中的 DAG 和工作不會向內部範圍 IP 位址提出要求,您就可以將內部範圍 IP 位址用於其他用途。

連線至虛擬私有雲網路

主控台

  1. 前往 Google Cloud 控制台的「Environments」頁面。

    前往「環境」

  2. 在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。

  3. 前往「環境設定」分頁。

  4. 在「Network configuration」部分中,找出「Network attachment」項目,然後按一下「Edit」

  5. 在「Network attachment」對話方塊中:

    • 如要建立新的網路連結,請在「Network attachment」清單中選取「Create a new network attachment」。在「Network」和「Subnetwork」清單中,選取虛擬私有雲網路和子網路。

    • 如要使用現有的網路連結,請在「Network attachment」清單中選取所需連結。

  6. 按一下 [儲存]

gcloud

下列 Google Cloud CLI 引數會指定 VPC 網路連線參數:

  • --network:虛擬私有雲網路 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:虛擬私有雲網路 ID
  • SUBNETWORK_ID:虛擬私有雲子網路 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:虛擬私有雲網路 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:虛擬私有雲網路 ID
  • SUBNETWORK_ID:虛擬私有雲子網路 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
  }
}

現有的網路連結

因此,環境將不再使用附件。為解決這個問題,請確認 Terraform 會忽略附件 producer_accept_lists 參數的變更,如下所示:

resource "google_compute_network_attachment" "NETWORK_ATTACHMENT_ID" {
  lifecycle {
    ignore_changes = [producer_accept_lists]
  }
  # ... other configuration parameters
}

接著,請為環境指定這個附件。您也可以指定在 Terraform 中未管理的附件,請參閱範例。

resource "google_composer_environment" "example" {
  name = "example-environment"
  region = "us-central1"
  config {
    node_config {
      composer_network_attachment = google_compute_network_attachment.NETWORK_ATTACHMENT_ID.id
    }
    # ... other configuration parameters
  }
}

更改下列內容:

  • ENVIRONMENT_NAME:環境名稱。
  • LOCATION:環境所在的地區。
  • NETWORK_ATTACHMENT_ID:網路附件 ID。

範例 (現有的網路連結):

resource "google_compute_network_attachment" "example" {
  lifecycle {
    ignore_changes = [producer_accept_lists]
  }
  # ... other configuration parameters
}

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

  config {

    node_config {
      # Attachment is managed in Terraform:

      composer_network_attachment = google_compute_network_attachment.NETWORK_ATTACHMENT_ID.id

      # Attachment is not managed in Terraform:

      # composer_network_attachment = projects/example-project/regions/us-central1/networkAttachments/example-network-attachment
    }
    # ... other configuration parameters
  }
}

停用連線至虛擬私有雲網路

主控台

  1. 前往 Google Cloud 控制台的「Environments」頁面。

    前往「環境」

  2. 在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。

  3. 前往「環境設定」分頁。

  4. 在「Network configuration」部分中,找出「Network attachment」項目,然後按一下「Edit」

  5. 在「Network attachment」對話方塊中,選取「None」,然後按一下「Save」

gcloud

--disable-vpc-connectivity 引數會停用環境的虛擬私有雲端網路連線:

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 網路,或是使用 Google Cloud CLI 等其他工具來卸除網路。

後續步驟