Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本頁面說明環境如何在 Cloud Composer 3 中存取虛擬私有雲網路,並提供將環境連線至虛擬私有雲網路的操作說明,以及如何停用先前設定的連線。
如要為環境的 Airflow 元件啟用或停用網際網路存取權,請參閱「變更環境網路類型 (私人或公開 IP)」。
如果您只想在安裝 PyPI 套件時停用或啟用網際網路存取權,請參閱「安裝 PyPI 套件時設定網際網路存取權」。
如要設定共用虛擬私有雲網路,請參閱「設定共用虛擬私有雲」,瞭解如何設定專案和權限。
關於虛擬私有雲網路存取權
在 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 位址用於其他用途。
連線至虛擬私有雲網路
主控台
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
前往「環境設定」分頁。
在「Network configuration」部分中,找出「Network attachment」項目,然後按一下「Edit」。
在「Network attachment」對話方塊中:
如要建立新的網路連結,請在「Network attachment」清單中選取「Create a new network attachment」。在「Network」和「Subnetwork」清單中,選取虛擬私有雲網路和子網路。
如要使用現有的網路連結,請在「Network attachment」清單中選取所需連結。
按一下 [儲存]。
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
:虛擬私有雲網路 IDSUBNETWORK_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
建立
environments.patch
API 要求。在這個要求中:
如要建立新的網路連結,請按照下列步驟操作:
在
updateMask
參數中指定config.node_config.network,config.node_config.subnetwork
遮罩。在要求主體的
network
和subnetwork
欄位中,指定 VPC 網路和子網路 ID。
如要使用現有的網路連結,請按照下列步驟操作:
在
updateMask
參數中指定config.node_config.composer_network_attachment
遮罩。在要求主體中,以
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
:虛擬私有雲網路 IDSUBNETWORK_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
}
}
停用連線至虛擬私有雲網路
主控台
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
前往「環境設定」分頁。
在「Network configuration」部分中,找出「Network attachment」項目,然後按一下「Edit」。
在「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
建立
environments.patch
API 要求。在這個要求中:
在
updateMask
參數中指定config.node_config.network,config.node_config.subnetwork
遮罩。在要求主體的
network
和subnetwork
欄位中,指定空值。
範例:
// 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 等其他工具來卸除網路。