Configurar rangos de IP públicas que se usan de forma privada

Cloud Composer 1 | Cloud Composer 2

En esta página, se explica cómo usar rangos de IP públicas de uso privado en tu entorno de IP privada. Para obtener información general sobre la creación de entornos de IP privada, consulta Configura un entorno de IP privada.

Información sobre los rangos de IP públicas de uso privado en Cloud Composer

Google Kubernetes Engine requiere muchas direcciones IP para sus recursos: cada nodo, Pod y servicio debe tener una dirección IP única. Esto puede generar una situación en la que los rangos de IP privados existentes no pueden admitir suficientes direcciones IP.

Los entornos de Cloud Composer pueden usar algunos rangos de IP del espacio de direcciones que no es RFC 1918 sin configuración adicional.

Si deseas usar más direcciones IP, tu entorno puede usar de forma privada ciertos rangos de direcciones IP públicas como rangos de direcciones IP de subred internos para Pods y servicios. Estos rangos se denominan rangos de IP públicas de uso privado (PUPI).

Puedes utilizar cualquier dirección IP pública de forma privada, excepto ciertos rangos restringidos.

Antes de comenzar

  • Solo puedes especificar rangos de IP públicas cuando creas un entorno nuevo. No es posible cambiar los rangos de IP de un entorno existente.

  • Tu entorno debe ser un entorno de IP privada.

  • Puedes crear entornos con rangos de PUPI solo mediante gcloud, Terraform y la API de REST.

  • Solo los pods y los servicios de GKE pueden usar rangos de IP públicas. Otros componentes del entorno, como Cloud SQL, el servidor web y el plano de control de GKE, no pueden usar rangos de IP públicas en un entorno de IP privadas.

  • El clúster de GKE se crea con la SNAT predeterminada inhabilitada.

Habilita rangos de PUPI cuando creas un entorno

gcloud

A fin de crear un entorno con rangos de PUPI, usa el argumento --enable-privately-used-public-ips cuando crees un entorno de IP privada. Luego, especifica los rangos de IP públicas para los pods y los servicios.

Rangos de la subred administrados por GKE

Para crear rangos de la subred administrados por GKE, haz lo siguiente:

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

Reemplaza lo siguiente:

  • ENVIRONMENT_NAME por el nombre del entorno.
  • LOCATION por la región en la que se encuentra el entorno
  • POD_IP_RANGE por un rango de direcciones IP en la notación CIDR. Este rango se agrega como un rango de direcciones IP secundario a la subred de tu entorno y se usa como el rango de direcciones IP para los pods.
  • SERVICES_IP_RANGE por un rango de direcciones IP en la notación CIDR. Este rango es el rango de direcciones IP secundario para los servicios en la subred de tu entorno.

Ejemplo:

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

Rangos de la subred administrados por el usuario

Para crear rangos administrados por el usuario, haz lo siguiente:

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

Reemplaza lo siguiente:

  • ENVIRONMENT_NAME por el nombre del entorno.
  • LOCATION por la región en la que se encuentra el entorno
  • POD_IP_RANGE_NAME por el nombre de un rango de direcciones IP secundario existente en la subred especificada. Los pods usan este rango.
  • SERVICES_IP_RANGE_NAME por el nombre de un rango de direcciones IP secundario existente en la subred especificada. Los servicios usan este rango.

Ejemplo:

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

Realiza una solicitud a la API de environments.create. En el recurso Entorno, especifica los parámetros de configuración para un entorno con rangos de PUPI.

Rangos de la subred administrados por GKE

Para crear rangos de la subred administrados por GKE, haz lo siguiente:

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

Reemplaza lo siguiente:

  • ENVIRONMENT_NAME por el nombre del entorno.
  • POD_IP_RANGE por un rango de direcciones IP en la notación CIDR. Este rango se agrega como un rango de direcciones IP secundario a la subred de tu entorno y se usa como el rango de direcciones IP para los pods.
  • SERVICES_IP_RANGE por un rango de direcciones IP en la notación CIDR. Este rango es el rango de direcciones IP secundario para los servicios en la subred de tu entorno.

Ejemplo:

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

Rangos de la subred administrados por el usuario

Para crear rangos administrados por el usuario, haz lo siguiente:

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

Reemplaza lo siguiente:

  • ENVIRONMENT_NAME por el nombre del entorno.
  • POD_IP_RANGE_NAME por el nombre de un rango de direcciones IP secundario existente en la subred especificada. Los pods usan este rango.
  • SERVICES_IP_RANGE_NAME por el nombre de un rango de direcciones IP secundario existente en la subred especificada. Los servicios usan este rango.

Ejemplo:

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

Cuando creas un entorno, el campo enable_privately_used_public_ips en el bloque private_environment_config habilita el uso de rangos de PUPI. También debes especificar rangos de PUPI para pods y servicios.

Rangos de la subred administrados por GKE

Para crear rangos de la subred administrados por GKE, haz lo siguiente:

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
    }

  }
}

Reemplaza lo siguiente:

  • ENVIRONMENT_NAME por el nombre del entorno.
  • LOCATION por la región en la que se encuentra el entorno
  • POD_IP_RANGE por un rango de direcciones IP en la notación CIDR. Este rango se agrega como un rango de direcciones IP secundario a la subred de tu entorno y se usa como el rango de direcciones IP para los pods.
  • SERVICES_IP_RANGE por un rango de direcciones IP en la notación CIDR. Este rango es el rango de direcciones IP secundario para los servicios en la subred de tu entorno.

Ejemplo:

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
    }

  }
}

Rangos de la subred administrados por el usuario

Para crear rangos administrados por el usuario, haz lo siguiente:

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
    }

  }

Reemplaza lo siguiente:

  • ENVIRONMENT_NAME por el nombre del entorno.
  • LOCATION por la región en la que se encuentra el entorno
  • POD_IP_RANGE_NAME por el nombre de un rango de direcciones IP secundario existente en la subred especificada. Los pods usan este rango.
  • SERVICES_IP_RANGE_NAME por el nombre de un rango de direcciones IP secundario existente en la subred especificada. Los servicios usan este rango.

Ejemplo:

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
    }

  }
}

¿Qué sigue?