プライベートで使用されるパブリック IP 範囲を構成する

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

このページでは、プライベート IP 環境でプライベートで使用されるパブリック IP 範囲を使用する方法について説明します。 プライベート IP 環境の作成に関する一般的な情報については、プライベート IP 環境を構成するをご覧ください。

Cloud Composer でプライベートで使用されるパブリック IP 範囲について

Google Kubernetes Engine のリソースには多くの IP アドレスが必要です。各 Node、Pod、Service には固有の IP アドレスが必要です。このため、既存のプライベート IP 範囲では、十分な数の IP アドレスを確保できない場合があります。

Cloud Composer 環境では、追加の構成を行わずに、RFC 1918 以外のアドレス空間の IP 範囲を使用できます。

より多くの IP アドレスを使用する場合、環境では、Pod と Service の内部サブネット IP アドレス範囲として、特定のパブリック IP アドレス範囲をプライベートで使用できます。このような範囲は、プライベートで使用されるパブリック IP(PUPI)範囲と呼ばれます。

パブリック IP アドレスは、特定の制限付き範囲を除いてすべてプライベートに使用できます。

始める前に

  • パブリック IP 範囲を指定できるのは、新しい環境を作成するときのみです。既存の環境の IP 範囲を変更することはできません。

  • 環境は、プライベート IP 環境である必要があります。

  • PUPI 範囲がある環境は、gcloud、Terraform、REST API でのみ作成できます。

  • パブリック IP 範囲は、GKE Pod と Service だけが使用できます。Cloud SQL、ウェブサーバー、GKE コントロール プレーンなどの他の環境コンポーネントでは、パブリック IP 範囲をプライベート IP 環境で使用できません。

  • GKE クラスタは、デフォルトの SNAT を無効にして作成されます。

環境の作成時に PUPI 範囲を有効にする

gcloud

PUPI 範囲がある環境を作成するには、プライベート IP 環境を作成するときに --enable-privately-used-public-ips 引数を使用します。次に、Pod と Service にパブリック IP 範囲を指定します。

GKE により管理されるサブネットの範囲

GKE により管理されるサブネット範囲を作成するには、次のようにします。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.9.7-airflow-2.9.3 \
    --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.9.7-airflow-2.9.3 \
    --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.9.7-airflow-2.9.3 \
    --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-2.9.7-airflow-2.9.3 \
    --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
    }

  }

以下のように置き換えます。

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

  }
}

次のステップ