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

Managed Airflow (第 3 代) | Managed Airflow (第 2 代) | Managed Airflow (舊版第 1 代)

本頁說明環境如何存取 Managed Airflow (第 3 代) 中的虛擬私有雲網路,並提供將環境連線至虛擬私有雲網路的操作說明,以及說明如何停用先前設定的連線。

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

在 Managed Airflow (第 3 代) 中,您可以為環境啟用虛擬私有雲網路的存取權。

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

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

  • 如果您的環境使用私人 IP 網路所有流量都會路由至您的虛擬私有雲端網路,但透過 Private Google Access 可供私人 IP 環境使用的 Google API、服務和網域除外。此外,這個方法還可讓 Airflow 元件連線至 GKE 中設定的私用公開 IP (PUPI),因為流量會透過虛擬私有雲網路傳送,而不是傳送至公用網際網路。

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

  • 環境的 Airflow 元件會自動使用虛擬私有雲網路中定義的私人 DNS 區域

  • 環境會在 VPC 子網路中保留兩個 IP 位址,並在維護和升級期間使用兩個額外 IP 位址。請確認虛擬私有雲子網路中每個環境有四個 IP 位址

Managed Airflow 會使用網路附件,將環境連線至虛擬私有雲網路:

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

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

  • 在 Shared VPC 網路中:

    • 確認您已為 Managed Airflow 設定 Shared VPC 網路。如要瞭解如何設定專案和 Managed Airflow 的權限,請參閱「設定 Shared VPC」。

    • 設定 Shared VPC 網路後,即可將環境連線至主專案的虛擬私有雲網路。如要使用現有網路連結,必須在服務專案 (環境所在位置) 中建立,並連接至 Shared VPC 網路。

Managed Airflow (第 3 代) 中遞移 DNS 對等互連的限制

遞移 DNS 對等互連的限制適用於 Managed Airflow (第 3 代) 環境,方式如下:

  • Cloud DNS 的遞移躍點限制為一個,也就是說總共只能有兩個躍點。
  • 在 Managed Airflow (第 3 代) 中,環境的元件會在租戶專案中執行,並透過 DNS 對等互連與環境所在的專案通訊。遞移躍點是由租戶專案的 DNS 對接所使用,因此總共只能使用一個躍點。

關於環境的內部 IP 範圍

Managed Airflow (第 3 代) 環境需要多個 IP 位址,才能在租戶專案中執行元件,例如環境的叢集和 Cloud SQL Proxy。這些 IP 位址取自環境的內部 IP 範圍

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

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

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

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

  • 內部 IP 範圍不得與 Managed Airflow 環境連線的虛擬私有雲子網路衝突。如果虛擬私有雲子網路與內部 IP 範圍重疊,就無法啟用連線。

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

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

  • 內部 IP 範圍未保留。由於不同環境使用的內部虛擬私有雲網路是分開的,因此您可以在多個環境中使用相同的內部 IP 範圍,不必進行任何額外設定。

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

連線至虛擬私有雲網路

控制台

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

    前往「環境」

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

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

  4. 在「網路設定」部分,找出「網路附件」項目,然後按一下「編輯」

  5. 在「網路連結」對話方塊中:

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

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

  6. 按一下 [儲存]

gcloud

下列 Google Cloud CLI 引數會指定虛擬私有雲網路連線參數:

  • --network:虛擬私有雲網路 ID。
  • --subnetwork:虛擬私有雲子網路 ID。
  • --network-attachment:請改用現有的網路連結。

新的網路連結

如要透過新的網路連結將環境連線至虛擬私有雲網路,請執行下列 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

現有網路連結

如要透過新的網路連結將環境連線至虛擬私有雲網路,請執行下列 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 欄位中,指定虛擬私有雲網路和子網路 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 區塊中的下列欄位會指定虛擬私有雲網路連線參數:

  • network:虛擬私有雲網路 ID。
  • subnetwork:虛擬私有雲子網路 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. 在「網路設定」部分,找出「網路附件」項目,然後按一下「編輯」

  5. 在「網路附件」對話方塊中,選取「無」,然後按一下「儲存」

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 分離虛擬私有雲網路。您可以改為附加其他虛擬私有雲網路,或使用 Google Cloud CLI 等其他工具分離網路。

後續步驟