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 範圍。在私人 IP 環境中,其他環境元件 (例如 Cloud SQL、網頁伺服器和 GKE 控制層) 無法使用公開 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
}
}
}