Cómo crear clústeres de VPC nativa con direcciones IP de alias

En esta página, se explica cómo crear clústeres de VPC nativa en Google Kubernetes Engine mediante direcciones IP de alias. Para obtener información general sobre las herramientas de redes de GKE, ve a la Descripción general de la red.

Descripción general

Con direcciones IP de alias, los clústeres de GKE pueden asignar direcciones IP desde un bloque CIDR conocido para Google Cloud Platform (GCP). Esto hace que tu clúster sea más escalable, y te permite interactuar mejor con otros productos y entidades de GCP.

Beneficios

Emplear direcciones IP de alias tiene varios beneficios:

  • Las direcciones IP de un pod se pueden enrutar de forma nativa dentro de la red de GCP (incluso mediante un intercambio de tráfico de la red de VPC), y ya no utilizan una cuota de ruta.
  • Las direcciones IP de un pod se reservan dentro de la red con anticipación, lo cual evita un conflicto con otros recursos de procesamiento.
  • La capa de herramientas de redes puede realizar verificaciones contra la falsificación de identidad a fin de asegurar que el tráfico de salida no se envíe con direcciones IP de origen arbitrarias.
  • Cloud Router puede anunciar las direcciones IP de alias mediante BGP.
  • Las direcciones IP de alias permiten que los pods accedan directamente a servicios alojados sin usar una puerta de enlace NAT.

Restricciones

  • Actualmente, no puedes migrar un clúster de VPC nativa a otro que usa rutas avanzadas.
  • Actualmente, no puedes migrar un clúster existente que usa rutas para enrutamiento de un pod a un clúster que emplea direcciones IP de alias.
  • No puedes usar redes heredadas con clústeres de VPC nativa.
  • Las direcciones IP de un clúster para servicios internos solo permanecen disponibles desde dentro del clúster. Si deseas acceder a un servicio Kubernetes desde dentro de VPC, pero desde fuera del clúster (por ejemplo, desde una instancia de Compute Engine), usa un balanceador de cargas interno.

Antes de comenzar

Como preparación para esta tarea, realiza los siguientes pasos:

  • Asegúrate de habilitar la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de instalar el SDK de Cloud.
  • Configura el ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres por zona, configura tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres por región, configura tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

Rangos secundarios

Los clústeres creados con direcciones IP de alias usan dos rangos secundarios para asignar direcciones IP en tu VPC:

  • Un rango que asigna direcciones IP de alias para direcciones IP de pod
  • Un rango que reserva espacio para servicios de ClusterIP a fin de evitar volver a usar direcciones IP de servicio dentro de tu VPC

El esquema de asignación de direcciones IP de alias es diferente del esquema utilizado con rutas avanzadas. Con rutas avanzadas, un rango CIDR se asigna para todo el clúster, y el rango se divide entre pods y servicios (el último /20 del rango). Con direcciones IP de alias, el rango de servicio es un rango CIDR fuera del rango de clúster.

Administración del rango secundario

Hay dos formas de asociar rangos secundarios a tu clúster:

Administrado por GKE

Puedes hacer que el plano de control administre los rangos secundarios. Este es el modo predeterminado empleado cuando creas un clúster con direcciones IP de alias y cuando usas los marcadores de rangos o máscara de red CIDR (--cluster-ipv4-cidr y --services-ipv4-cidr).

Puedes personalizar el tamaño y la posición de rango secundario si nombras un rango CIDR de forma explícita (por ejemplo, 10.0.0.0/16) o si defines un tamaño de máscara de red (como /16). Cuando creas o borras un clúster de esta forma, GKE automáticamente crea o borra los rangos secundarios en tu VPC.

Administrado por el usuario

Puedes crear manualmente los rangos secundarios y luego crear un clúster con esos rangos. Si creas rangos secundarios de forma manual, debes administrarlos tú mismo.

Debes crear rangos secundarios de forma manual para clústeres en redes de VPC compartida. Con VPC compartida, los usuarios que crean clústeres de GKE no pueden crear rangos secundarios con sus credenciales de instancia. El propietario del proyecto host crea rangos secundarios y los pasa a la instancia para que se usen con los clústeres.

Consideraciones para el tamaño de clústeres

La cantidad máxima de nodos y servicios para un clúster de GKE otorgado se determina mediante el tamaño de los rangos secundarios del clúster. No puedes cambiar los tamaños de rangos secundarios una vez que creas un clúster. Cuando creas un clúster, asegúrate de elegir rangos secundarios lo suficientemente grandes como para admitir el crecimiento anticipado del clúster.

En la tabla a continuación, se describen los tres rangos que debes considerar: nodos, pods y servicios:

Rango Orientación
Nodos

Las direcciones IP de nodos se obtienen del rango primario de la subred relacionada con el clúster. La subred de tu clúster debe ser lo suficientemente grande como para admitir la cantidad total de nodos en tu clúster.

Por ejemplo, si planeas crear un clúster de 900 nodos, la subred utilizada con el clúster debe ser de al menos /22 en tamaño. Una subred de tamaño /22 contiene 2(32-22) = 210 = 1,024 - 4 direcciones IP reservadas = 1,020 direcciones IP, suficiente en el caso de las direcciones IP de 900 nodos necesarias para el clúster.

Pods

Cada nodo actualmente asigna un bloque de direcciones IP de un pod de /24 (2(32-24) = 28 = 256). Estas direcciones IP de un pod se toman del rango secundario relacionado para los pods. El rango de un pod, como lo determinan los marcadores --cluster-ipv4-cidr o --cluster-secondary-range-name debe ser al menos lo suficientemente grande como para admitir direcciones IP (cantidad total de nodos × 256).

Por ejemplo, para un clúster de 900 nodos, necesitas 900 × 256 = 230,400 direcciones IP. Las direcciones IP deben ser de bloques de tamaño /24, dado que ese es el nivel de detalle asignado a un nodo. Necesitas un rango secundario de tamaño /14 o superior. Un rango /14 de direcciones IP da como resultado 2(32-14) = 218 ≈ 262,000 direcciones IP.

Servicios

Cada clúster necesita reservar un rango de direcciones IP para las direcciones IP del clúster de servicio de Kubernetes. Las direcciones IP del servicio son asignadas desde el rango secundario relacionado para los servicios. Debes asegurarte de que el bloque de direcciones IP sea suficiente para la cantidad total de servicios que anticipas ejecutar en el clúster. Defines los rangos definidos mediante los marcadores --services-ipv4-cidr o --services-secondary-range-name.

Por ejemplo, en el caso de un clúster que ejecuta 3,000 servicios como máximo, necesitas 3,000 direcciones IP para usar con las direcciones IP del clúster. Necesitas un rango secundario de tamaño /20 o superior. Un rango /20 de direcciones IP da como resultado 2(32-20) = 212 ≈ 4,000 direcciones IP.

La creación de nodos se limita a las direcciones disponibles para asignar desde el rango de dirección del pod. La creación de nodos falla cuando no hay más direcciones IP disponibles en el rango de direcciones del pod (al menos 256 para una creación de nodo adicional) con el error Instance [instance name] creation failed: IP space of [cluster subnet] is exhausted.

Si utilizas rangos secundarios administrados por el usuario, consulta la tabla a continuación para asegurarte de que puedes alcanzar la cantidad máxima de nodos de un tamaño de subred de clúster determinado.

Tamaño de subred para nodos Cant. máx. de nodos Cant. máx. de dir. IP de un pod necesarias Rango de dirección de un pod recomendado
/29 4 1,024 /21
/28 12 3,072 /20
/27 28 7,168 /19
/26 60 15,360 /18
/25 124 31,744 /17
/24 252 64,512 /16
/23 508 130,048 /15
/22 1,020 261,120 /14
/21 2,044 523,264 /13
/20 4,092 1,047,552 /12
/19 8,188 2,096,128 /11 (rango de direcciones máximo del pod)

Valores predeterminados y límites de tamaños de rangos

Rango Tamaño predeterminado Tamaño mínimo Tamaño máximo
Nodos (subred del clúster)

/20 = 212 = 4,096 - 4 direcciones IP reservadas = 4,092 direcciones IP para nodos

/29 = 23 = 8 - 4 direcciones IP reservadas = 4 direcciones IP para nodos

/7 = 225 = aproximadamente 33 millones de direcciones IP para nodos

Pods (rango secundario)

/14 = 218 = 262,114 direcciones IP asignadas para pods

/24 = 28 = 256 direcciones IP asignadas para pods


/21 = 211 = 2,048 direcciones IP asignadas para pods (rangos administrados por GKE)

/11 = 221 = aproximadamente 2 millones de direcciones IP

Servicios (rango secundario)

/20 = 212 = 4,096 direcciones IP asignadas para servicios

/27 = 25 = 32 direcciones IP asignadas para servicios

/16 = 216 = 65,536 direcciones IP asignadas para servicios

Cómo crear un clúster con direcciones IP de alias

Puedes crear un clúster de VPC nativa con direcciones IP de alias mediante Google Cloud Platform Console.

Puedes optimizar el uso de espacio de la dirección IP de tu clúster si configuras la cantidad máxima de pods que se pueden asignar a un nodo,

la herramienta de línea de comandos de gcloud o la API de GKE.

gcloud

Para crear el clúster con direcciones IP de alias, ejecuta el siguiente comando, en el cual [CLUSTER_NAME] corresponde al nombre que eliges para el clúster:

gcloud container clusters create [CLUSTER_NAME] --enable-ip-alias

Console

Para crear un clúster con direcciones IP de alias, realiza los siguientes pasos:

  1. Ve al menú de Google Kubernetes Engine en GCP Console.

    Ir al menú de Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. Configura tu clúster como desees. Luego, haz clic en Opciones avanzadas.

  4. En la sección VPC nativas, selecciona Habilitar VPC nativas (con alias de IP).

  5. Haz clic en Crear.

API

Para crear un clúster con direcciones IP de alias, define un objeto IPAllocationPolicy en el recurso de tu clúster:

{
  "name": [CLUSTER_NAME],
  "description": [DESCRIPTION],
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "clusterIpv4CidrBlock"      : string,
    "servicesIpv4CidrBlock"     : string,
    "clusterSecondaryRangeName" : string,
    "servicesSecondaryRangeName": string,

  },
  ...
}

en el que:

  • "useIpAliases": true crea el clúster con direcciones IP de alias.
  • "clusterIpv4CidrBlock" es el tamaño o la ubicación del rango CIDR para pods. Determina el tamaño del rango secundario para pods; puede ser IP/tamaño en la notación CIDR (como 10.0.0.0/14) o /tamaño (como /14). Se elige un espacio en blanco con un tamaño determinado desde el espacio disponible en tu VPC. Si se deja en blanco, se encuentra y crea un rango válido con un tamaño predeterminado.
  • "servicesIpv4CidrBlock" corresponde al tamaño o la ubicación del rango CIDR para servicios. Consulta la descripción de "clusterIpv4CidrBlock".
  • "clusterSecondaryRangeName" es el nombre del rango secundario para pods. El rango secundario ya debe existir y corresponder a la subred relacionada con el clúster (como la subred especificada con el marcador --subnetwork).
  • "serviceSecondaryRangeName" es el nombre del rango secundario para servicios. El segundo rango ya debe existir y corresponder a la subred relacionada con el clúster (como la subred especificada con el marcador --subnetwork).

Para obtener más ejemplos de clúster, consulta Ejemplos.

Verificación de los rangos secundarios del clúster

Una vez que creas un clúster con direcciones IP de alias, deberías verificar los rangos del clúster.

gcloud

Para verificar el clúster, ejecuta el siguiente comando:

gcloud container clusters describe [CLUSTER_NAME]

En el resultado del comando, observa debajo del campo ipAllocationPolicy:

  • clusterIpv4Cidr es el rango secundario para pods.
  • servicesIpv4Cidr es el rango secundario para servicios.

Console

Para verificar el clúster, realiza los siguientes pasos:

  1. Ve al menú de Google Kubernetes Engine en GCP Console.

    Ir al menú de Google Kubernetes Engine

  2. Selecciona el clúster que desees.

Los rangos secundarios se muestran en la sección Clúster en la pestaña Detalles:

  • Rango de direcciones de contenedor es el rango secundario para pods
  • Rango de direcciones de servicio es el rango secundario para servicios

Ejemplos

En las siguientes secciones, se proporcionan ejemplos para usar con direcciones IP de alias.

Cómo crear un clúster con rangos de direcciones IP específicos

gcloud

Este comando crea my-cluster con rangos de pod y servicio determinados. Los rangos secundarios se crean automáticamente, se adjuntan a la subred predeterminada y GKE los administra:

gcloud container clusters create my-cluster \
  --enable-ip-alias --cluster-ipv4-cidr=10.0.0.0/14 \
  --services-ipv4-cidr=10.4.0.0/19

Console

Esto crea my-cluster con rangos dados de pod y servicio determinados. Los rangos secundarios se crean automáticamente, se adjuntan a la subred predeterminada y GKE los administra:

  1. Ve al menú de Google Kubernetes Engine en GCP Console.

    Ir al menú de Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. Configura tu clúster como desees. Luego, haz clic en Opciones avanzadas.

  4. En la sección VPC nativas, selecciona Habilitar VPC nativas (con alias de IP).

  5. Completa el campo Rango de direcciones del pod con el rango de pod (ejemplo: 10.0.0.0/14)

  6. Completa el campo Rango de direcciones de servicio con el rango de servicio (ejemplo: 10.4.0.0/19)

Cómo crear un clúster con tamaños específicos en una subred diferente

Este comando crea my-cluster con tamaños de rango de pod y servicio determinados. La ubicación del rango CIDR se determina desde el espacio libre en VPC. Los rangos secundarios se crean adjuntos a la subred my-subnet. GKE administra los rangos secundarios:

gcloud container clusters create my-cluster \
  --subnetwork my-subnet \
  --enable-ip-alias --cluster-ipv4-cidr=/16 \
  --services-ipv4-cidr=/22

Cómo crear un clúster con rangos secundarios existentes

A fin de obtener detalles sobre cómo crear rangos secundarios para direcciones IP de alias, consulta Descripción general de rangos de direcciones IP de alias.

Debes crear dos rangos secundarios en la subred, uno llamado my-pods para pods y otro llamado my-services para servicios:

gcloud compute networks subnets update my-subnet \
    --add-secondary-ranges my-pods=10.0.0.0/16,my-services=10.1.0.0/16 \
    --region us-central1

Luego, para crear tu clúster:

gcloud

Ejecuta el siguiente comando:

gcloud container clusters create my-cluster \
--enable-ip-alias \
--cluster-secondary-range-name=my-pods \
--services-secondary-range-name=my-services

Console

Realiza los siguientes pasos:

  1. Ve al menú de Google Kubernetes Engine en GCP Console.

    Ir al menú de Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. Configura tu clúster como desees. Luego, haz clic en Opciones avanzadas.

  4. Desde la sección VPC nativas, selecciona Habilitar VPC nativas (con alias de IP).

  5. Establece Crear rangos secundarios automáticamente en falso.

  6. Selecciona la red y subred de nodo que deseas usar con tu clúster.

  7. Selecciona el rango secundario del pod y el rango secundario de servicios para usar con tu clúster.

Cómo crear una subred automáticamente

Los siguientes procedimientos crean un nuevo clúster de direcciones IP de alias con una subred generada automáticamente.

gcloud

Para crear un nuevo clúster que usa direcciones IP de alias, ejecuta el siguiente comando:

gcloud container clusters create --enable-ip-alias --create-subnetwork name=my-cluster-subnet

En este comando, el nuevo clúster se configura automáticamente con rangos de direcciones IP y una subred. Puedes proporcionar un nombre para la subred (en este ejemplo, name=my-cluster-subnet) o una string vacía ("") a fin de que un nombre se genere automáticamente.

Para configurar el clúster tú mismo, ejecuta el siguiente comando:

gcloud container clusters create [CLUSTER_NAME] --enable-ip-alias \
--create-subnetwork="" [--cluster-ipv4-cidr [RANGE] --services-ipv4-cidr [RANGE] ]

En este comando:

  • [CLUSTER_NAME] es el nombre que eliges para el clúster.
  • El marcador --enable-ip-alias indica que el clúster usa direcciones IP de alias.
  • El marcador --create-subnetwork hace que una subred para el clúster se cree automáticamente.
  • El marcador --cluster-ipv4-cidr opcional indica el tamaño y la ubicación del rango CIDR del clúster. [RANGE] puede presentarse en forma de [IP address]/[SIZE], como 10.0.0.0/18, o simplemente /[SIZE], lo que hace que la dirección IP se asigne automáticamente. Si se omite este marcador, un rango CIDR se asigna automáticamente con tamaños predeterminados.
  • El marcador --services-ipv4-cidr opcional indica el tamaño y la ubicación del rango CIDR del servicio. Las especificaciones de [RANGE] son idénticas a --cluster-ipv4-cidr. El rango no puede superponerse con --cluster-ip4-cidr y viceversa. Si se omite este marcador, un rango CIDR se asigna automáticamente con tamaños predeterminados.

API

Para crear un clúster con direcciones IP de alias, define un objeto IPAllocationPolicy en el recurso de tu clúster:

{
  "name": [CLUSTER_NAME],
  "description": [DESCRIPTION],
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "createSubnetwork": true,
    "subnetworkName": [SUBNET_NAME]
  },
  ...
}

"useIpAliases": true crea el clúster con direcciones IP de alias. createSubnetwork automáticamente crea y aprovisiona una subred para el clúster. subnetworkName es opcional; si se deja vacío, se elige un nombre de forma automática en el caso de la subred.

Solución de problemas

En esta sección, se proporciona ayuda para resolver problemas relacionados con direcciones IP de alias.

No hay espacio suficiente de dirección IP para pod

Problemas: * El clúster se detuvo en un estado de aprovisionamiento por un período extendido. * La creación de un clúster muestra un error de grupo de instancias administrado (MIG). * No pueden agregarse nuevos nodos a un clúster existente.

Posibles causas

El espacio no asignado en el rango secundario del pod no es lo suficientemente grande para los nodos solicitados en el clúster. Por ejemplo, si un usuario especifica un rango secundario /23 para pods y solicita más de dos nodos, entonces el clúster puede detenerse en el estado de aprovisionamiento. Consulta Consideraciones para el tamaño del clúster a fin de obtener ayuda acerca de cómo crear tamaños de rangos de direcciones IP correctamente.

Si este problema ocurre durante la creación de un clúster, borra el clúster detenido en el estado de aprovisionamiento y crea otro con un rango secundario que tenga espacio suficiente para el clúster.

Ten en cuenta que una subred puede tener un máximo de cinco rangos secundarios; y cada clúster de VPC nativa requiere al menos dos rangos secundarios: uno para pods y otro para servicios.

Si este problema ocurre durante la determinación de tamaño del grupo de nodos, debes quitar los nodos existentes a fin de hacer lugar para los nuevos nodos.

Qué sigue

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...