配置以非公开方式使用的公共 IP 范围

Cloud Composer 1 | Cloud Composer 2

本页面介绍了如何在专用 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、Web 服务器和 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 请求。在环境资源中,为具有 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
    }

  }
}

后续步骤