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

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

本页面介绍了如何在 专用 IP 环境中使用以非公开方式使用的公共 IP 范围。如需了解有关创建专用 IP 环境的一般信息,请参阅 配置专用 IP 环境

关于在 Managed Airflow 中使用以非公开方式使用的公共 IP 范围

Google Kubernetes Engine 的资源需要使用大量 IP 地址:每个节点、pod 和服务都必须具有唯一的 IP 地址。这可能会导致现有的专用 IP 范围无法提供足够的 IP 地址。

Managed Airflow 环境可以使用 非 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-2.17.6-airflow-2.11.1 \
    --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-2.17.6-airflow-2.11.1 \
    --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-2.17.6-airflow-2.11.1 \
    --enable-private-environment \
    --enable-privately-used-public-ips \
    --cluster-secondary-range-name POD_IP_RANGE_NAME \
    --services-secondary-range-name SERVICES_IP_RANGE_NAME

替换以下内容:

例如:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.17.6-airflow-2.11.1 \
    --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": {
        "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": {
        "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": {
        "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": {
        "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 = [{
        
        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 = [{
        
        // 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 = [{
        
        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
    }

  }

替换以下内容:

例如:

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 = [{
        
        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
    }

  }
}

后续步骤