Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本頁說明如何在私人 IP 環境中使用私人使用的公開 IP 範圍。如要進一步瞭解如何建立私人 IP 環境,請參閱「設定私人 IP 環境」一文。
關於 Cloud Composer 中私人使用的公開 IP 範圍
Google Kubernetes Engine 需要許多 IP 位址來提供資源:每個節點、Pod 和服務都必須有一個不重複的 IP 位址。這可能導致現有的私人 IP 範圍無法容納足夠的 IP 位址。
Cloud Composer 環境可以使用非 RFC 1918 位址空間中的部分 IP 範圍,無須額外設定。
如果您想使用更多 IP 位址,環境可以私下使用特定公開 IP 位址範圍,做為 Pod 和服務的內部子網路 IP 位址範圍。這類範圍稱為私人使用的公開 IP (PUPI) 範圍。
您可以私下使用任何公開 IP 位址,但特定受限範圍除外。
事前準備
您只能在建立新環境時指定公用 IP 範圍。您無法變更現有環境的 IP 範圍。
您的環境必須是私人 IP 環境。
您只能使用
gcloud
、Terraform 和 REST API 建立含有 PUPI 範圍的環境。只有 GKE Pod 和服務可以使用公開 IP 範圍。其他環境元件 (例如 Cloud SQL、網頁伺服器和 GKE 控制層) 無法在私人 IP 環境中使用公開 IP 範圍。
建立 GKE 叢集時,預設 SNAT 會停用。
在建立環境時啟用 PUPI 範圍
gcloud
如要建立含有 PUPI 範圍的環境,請在建立私人 IP 環境時使用 --enable-privately-used-public-ips
引數。接著,請為 Pod 和服務指定公開 IP 範圍。
由 GKE 管理的子網路範圍
如要建立由 GKE 管理的子網路範圍,請按照下列步驟操作:
gcloud composer environments create ENVIRONMENT_NAME \
--location LOCATION \
--image-version composer-1.20.12-airflow-1.10.15 \
--enable-ip-alias \
--enable-private-environment \
--enable-privately-used-public-ips \
--cluster-ipv4-cidr POD_IP_RANGE \
--services-ipv4-cidr SERVICES_IP_RANGE
取代:
- 將
ENVIRONMENT_NAME
替換為環境的名稱。 LOCATION
改成環境所在的地區。POD_IP_RANGE
與 CIDR 標記法中的 IP 位址範圍。這個範圍會新增為環境的子網路次要 IP 位址範圍,並用於 Pod 的 IP 位址範圍。SERVICES_IP_RANGE
與 CIDR 標記法中的 IP 位址範圍。這個範圍是環境子網路中服務的次要 IP 位址範圍。
範例:
gcloud composer environments create example-environment \
--location us-central1 \
--image-version composer-1.20.12-airflow-1.10.15 \
--enable-ip-alias \
--enable-private-environment \
--enable-privately-used-public-ips \
--cluster-ipv4-cidr 10.3.192.0/20 \
--services-ipv4-cidr 172.16.194.0/23
使用者管理的子網路範圍
如要建立由使用者管理的範圍,請按照下列步驟操作:
gcloud composer environments create ENVIRONMENT_NAME \
--location LOCATION \
--image-version composer-1.20.12-airflow-1.10.15 \
--enable-ip-alias \
--enable-private-environment \
--enable-privately-used-public-ips \
--cluster-secondary-range-name POD_IP_RANGE_NAME \
--services-secondary-range-name SERVICES_IP_RANGE_NAME
取代:
- 將
ENVIRONMENT_NAME
替換為環境的名稱。 LOCATION
改成環境所在的地區。POD_IP_RANGE_NAME
與指定子網路中現有次要 IP 位址範圍的名稱。這個範圍由 Pod 使用。SERVICES_IP_RANGE_NAME
與指定子網路中現有次要 IP 位址範圍的名稱。服務會使用這個範圍。
範例:
gcloud composer environments create example-environment \
--location us-central1 \
--image-version composer-1.20.12-airflow-1.10.15 \
--enable-ip-alias \
--enable-private-environment \
--enable-privately-used-public-ips \
--cluster-secondary-range-name "public-1" \
--services-secondary-range-name "public-2"
API
建構 environments.create
API 要求。在 Environment 資源中,為含有 PUPI 範圍的環境指定設定參數。
由 GKE 管理的子網路範圍
如要建立由 GKE 管理的子網路範圍,請按照下列步驟操作:
// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments
{
"name": "ENVIRONMENT_NAME",
"config": {
"nodeConfig": {
"ipAllocationPolicy": {
"useIpAliases": true,
"clusterIpv4CidrBlock":"POD_IP_RANGE",
"servicesIpv4CidrBlock":"SERVICES_IP_RANGE"
}
},
"privateEnvironmentConfig": {
"enablePrivateEnvironment": true,
"enablePrivatelyUsedPublicIps": true
}
}
}
取代:
- 將
ENVIRONMENT_NAME
替換為環境的名稱。 POD_IP_RANGE
與 CIDR 標記法中的 IP 位址範圍。這個範圍會新增為環境的子網路次要 IP 位址範圍,並用於 Pod 的 IP 位址範圍。SERVICES_IP_RANGE
與 CIDR 標記法中的 IP 位址範圍。這個範圍是環境子網路中服務的次要 IP 位址範圍。
範例:
// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments
{
"name": "example-environment",
"config": {
"nodeConfig": {
"ipAllocationPolicy": {
"useIpAliases": true,
"clusterIpv4CidrBlock":"10.3.192.0/20",
"servicesIpv4CidrBlock":"172.16.194.0/23"
}
},
"privateEnvironmentConfig": {
"enablePrivateEnvironment": true,
"enablePrivatelyUsedPublicIps": true
}
}
}
使用者管理的子網路範圍
如要建立由使用者管理的範圍,請按照下列步驟操作:
// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments
{
"name": "ENVIRONMENT_NAME",
"config": {
"nodeConfig": {
"ipAllocationPolicy": {
"useIpAliases": true,
"clusterSecondaryRangeName":"POD_IP_RANGE",
"servicesSecondaryRangeName": "SERVICES_IP_RANGE"
}
},
"privateEnvironmentConfig": {
"enablePrivateEnvironment": true,
"enablePrivatelyUsedPublicIps": true
}
}
}
取代:
- 將
ENVIRONMENT_NAME
替換為環境的名稱。 POD_IP_RANGE_NAME
與指定子網路中現有次要 IP 位址範圍的名稱。這個範圍由 Pod 使用。SERVICES_IP_RANGE_NAME
與指定子網路中現有次要 IP 位址範圍的名稱。服務會使用這個範圍。
範例:
// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments
{
"name": "example-environment",
"config": {
"nodeConfig": {
"ipAllocationPolicy": {
"useIpAliases": true,
"clusterSecondaryRangeName":"public-1",
"servicesSecondaryRangeName": "public-2"
}
},
"privateEnvironmentConfig": {
"enablePrivateEnvironment": true,
"enablePrivatelyUsedPublicIps": true
}
}
}
Terraform
建立環境時,private_environment_config
區塊中的 enable_privately_used_public_ips
欄位會啟用 PUPI 範圍。您也必須為 Pod 和服務指定 PUPI 範圍。
由 GKE 管理的子網路範圍
如要建立由 GKE 管理的子網路範圍,請按照下列步驟操作:
resource "google_composer_environment" "example_environment" {
provider = google-beta
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
node_config {
ip_allocation_policy = [{
use_ip_aliases = true
cluster_ipv4_cidr_block = "POD_IP_RANGE"
services_ipv4_cidr_block = "SERVICES_IP_RANGE"
cluster_secondary_range_name = null
services_secondary_range_name = null
}]
}
private_environment_config {
enable_privately_used_public_ips = true
// Other private ip environment parameters
}
}
}
取代:
- 將
ENVIRONMENT_NAME
替換為環境的名稱。 LOCATION
改成環境所在的地區。POD_IP_RANGE
與 CIDR 標記法中的 IP 位址範圍。這個範圍會新增為環境的子網路次要 IP 位址範圍,並用於 Pod 的 IP 位址範圍。SERVICES_IP_RANGE
與 CIDR 標記法中的 IP 位址範圍。這個範圍是環境子網路中服務的次要 IP 位址範圍。
範例:
resource "google_composer_environment" "example_environment" {
provider = google-beta
name = "example-environment"
region = "us-central1"
config {
node_config {
// Specify your network and subnetwork
network = google_compute_network.example_network.id
subnetwork = google_compute_subnetwork.example_subnet.id
ip_allocation_policy = [{
use_ip_aliases = true
// Specify PUPI addresses
cluster_ipv4_cidr_block = "10.3.192.0/20"
services_ipv4_cidr_block = "172.16.194.0/23"
cluster_secondary_range_name = null
services_secondary_range_name = null
}]
}
private_environment_config {
enable_privately_used_public_ips = true
// Other private environment parameters
}
}
}
使用者管理的子網路範圍
如要建立由使用者管理的範圍,請按照下列步驟操作:
resource "google_composer_environment" "example_environment" {
provider = google-beta
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
node_config {
ip_allocation_policy = [{
use_ip_aliases = true
cluster_ipv4_cidr_block = null
services_ipv4_cidr_block = null
cluster_secondary_range_name = POD_IP_RANGE_NAME
services_secondary_range_name = SERVICES_IP_RANGE_NAME
}]
}
private_environment_config {
enable_privately_used_public_ips = true
// Other private ip environment parameters
}
}
取代:
- 將
ENVIRONMENT_NAME
替換為環境的名稱。 LOCATION
改成環境所在的地區。POD_IP_RANGE_NAME
與指定子網路中現有次要 IP 位址範圍的名稱。這個範圍由 Pod 使用。SERVICES_IP_RANGE_NAME
與指定子網路中現有次要 IP 位址範圍的名稱。服務會使用這個範圍。
範例:
resource "google_composer_environment" "example_environment" {
provider = google-beta
name = "example-environment"
region = "us-central1"
config {
node_config {
// Specify your network and subnetwork
network = google_compute_network.example_network.id
subnetwork = google_compute_subnetwork.example_subnet.id
ip_allocation_policy = [{
use_ip_aliases = true
cluster_ipv4_cidr_block = null
services_ipv4_cidr_block = null
// Specify existing ranges
cluster_secondary_range_name = "public-1"
services_secondary_range_name = "public-2"
}]
}
private_environment_config {
enable_privately_used_public_ips = true
// Other private environment parameters
}
}
}