Configurar intervalos de IP públicos usados de maneira privada

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Nesta página, explicamos como usar intervalos de IP público de uso particular no ambiente de IP particular. Para informações gerais sobre como criar ambientes de IP particular, consulte Configurar um ambiente de IP particular.

Sobre intervalos de IP públicos usados de maneira particular no Cloud Composer

O Google Kubernetes Engine requer muitos endereços IP para os recursos: cada nó, pod e serviço precisa ter um endereço IP exclusivo. Isso pode levar a uma situação em que os intervalos de IP particulares existentes não acomodam endereços IP suficientes.

Os ambientes do Cloud Composer podem usar alguns intervalos de IP do espaço de endereço não RFC 1918 sem configuração extra.

Se você quiser usar mais endereços IP, seu ambiente poderá usar de maneira particular determinados intervalos de endereços IP públicos como intervalos de endereços IP de sub-rede internos para pods e serviços. Esses intervalos são chamados de intervalos de IP público de uso particular (PUPI).

É possível usar qualquer endereço IP público de maneira particular, exceto determinados intervalos restritos.

Antes de começar

  • Só é possível especificar intervalos de IP públicos ao criar um novo ambiente. Não é possível alterar intervalos de IP de um ambiente existente.

  • Seu ambiente precisa ser um ambiente de IP particular.

  • Só é possível criar ambientes com intervalos de PUPI usando gcloud, Terraform e a API REST.

  • Somente pods e serviços do GKE podem usar intervalos de IP públicos. Outros componentes de ambiente, como o Cloud SQL, o servidor da Web e o plano de controle do GKE, não podem usar intervalos de IP públicos em um ambiente de IP particular.

  • O cluster do GKE é criado com o SNAT padrão desativado.

Ativar intervalos de PUPI ao criar um ambiente

gcloud

Para criar um ambiente com intervalos de PUPI, use o argumento --enable-privately-used-public-ips ao criar um ambiente de IP particular. Em seguida, especifique intervalos de IP públicos para pods e serviços.

Intervalos de sub-rede gerenciados pelo GKE

Para criar intervalos de sub-redes gerenciados pelo 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

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • POD_IP_RANGE por um intervalo de endereços IP na notação CIDR. Esse intervalo é adicionado como um intervalo de endereços IP secundário à sub-rede do ambiente e é usado como o intervalo de endereços IP dos pods.
  • SERVICES_IP_RANGE por um intervalo de endereços IP na notação CIDR. Esse intervalo é o intervalo de endereços IP secundário dos serviços na sub-rede do ambiente.

Exemplo:

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

Intervalos de sub-rede gerenciadas pelo usuário

Para criar intervalos gerenciados pelo usuário:

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

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • POD_IP_RANGE_NAME pelo nome de um intervalo atual de endereços IP secundários na sub-rede especificada. Esse intervalo é usado por pods.
  • SERVICES_IP_RANGE_NAME pelo nome de um intervalo atual de endereços IP secundários na sub-rede especificada. Esse intervalo é usado pelos serviços.

Exemplo:

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

Crie uma solicitação de API environments.create. No recurso Ambiente, especifique os parâmetros de configuração para um ambiente com intervalos PUPI.

Intervalos de sub-rede gerenciados pelo GKE

Para criar intervalos de sub-redes gerenciados pelo 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
    }
  }
}

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente;
  • POD_IP_RANGE por um intervalo de endereços IP na notação CIDR. Esse intervalo é adicionado como um intervalo de endereços IP secundário à sub-rede do ambiente e é usado como o intervalo de endereços IP dos pods.
  • SERVICES_IP_RANGE por um intervalo de endereços IP na notação CIDR. Esse intervalo é o intervalo secundário de endereços IP dos serviços na sub-rede do ambiente.

Exemplo:

// 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
    }
  }
}

Intervalos de sub-rede gerenciadas pelo usuário

Para criar intervalos gerenciados pelo usuário:

// 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
    }
  }
}

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente;
  • POD_IP_RANGE_NAME pelo nome de um intervalo atual de endereços IP secundários na sub-rede especificada. Esse intervalo é usado por pods.
  • SERVICES_IP_RANGE_NAME pelo nome de um intervalo atual de endereços IP secundários na sub-rede especificada. Esse intervalo é usado pelos serviços.

Exemplo:

// 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

Quando você cria um ambiente, o campo enable_privately_used_public_ips no bloco private_environment_config ativa o uso de intervalos PUPI. Você também precisa especificar intervalos PUPI para pods e serviços.

Intervalos de sub-rede gerenciados pelo GKE

Para criar intervalos de sub-redes gerenciados pelo 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
    }

  }
}

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • POD_IP_RANGE por um intervalo de endereços IP na notação CIDR. Esse intervalo é adicionado como um intervalo de endereços IP secundário à sub-rede do ambiente e é usado como o intervalo de endereços IP dos pods.
  • SERVICES_IP_RANGE por um intervalo de endereços IP na notação CIDR. Esse intervalo é o intervalo de endereços IP secundário dos serviços na sub-rede do ambiente.

Exemplo:

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
    }

  }
}

Intervalos de sub-rede gerenciadas pelo usuário

Para criar intervalos gerenciados pelo usuário:

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
    }

  }

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • POD_IP_RANGE_NAME pelo nome de um intervalo atual de endereços IP secundários na sub-rede especificada. Esse intervalo é usado por pods.
  • SERVICES_IP_RANGE_NAME pelo nome de um intervalo atual de endereços IP secundários na sub-rede especificada. Esse intervalo é usado pelos serviços.

Exemplo:

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
    }

  }
}

A seguir