Crea un clúster

En esta página, se describe cómo crear un clúster de GKE on AWS. También puedes crear una VPC y un clúster con Terraform.

Antes de comenzar

Antes de crear un clúster, debes completar los requisitos. En particular, debes proporcionar los siguientes recursos:

  • Una VPC de AWS en la que se ejecutará el clúster
  • Hasta tres subredes de AWS para las tres réplicas del plano de control. Cada una debe estar en una zona de disponibilidad de AWS diferente
  • La función de IAM de AWS que GKE on AWS asume cuando administras tu clúster. Esto requiere un conjunto específico de permisos de IAM.
  • Claves CMK simétricas de KMS para la encriptación en reposo de los datos del clúster (etcd) y la configuración
  • El perfil de la instancia de IAM de AWS para cada réplica del plano de control. Esto requiere un conjunto específico de permisos de IAM
  • Un par de claves SSH de EC2 (opcional) si necesitas acceso de SSH a las instancias de EC2 que ejecutan cada réplica del plano de control

Es tu responsabilidad crear y administrar estos recursos, que pueden compartirse entre todos tus clústeres de GKE. GKE on AWS administra todos los demás recursos subyacentes de AWS con permiso de clúster.

Selecciona rangos CIDR para el clúster

Cuando creas un clúster en GKE on AWS, debes proporcionar rangos de direcciones IPv4 para usar con pods y servicios.

Estos rangos de IP se especifican mediante la notación de enrutamiento entre dominios sin clases (CIDR), por ejemplo, 100.64.0.0/16.

Recomendamos los siguientes rangos CIDR para Services y Pods:

  • Servicios: 100.64.0.0/16
  • Pods: 100.96.0.0/11

Estos rangos son lo suficientemente grandes como para que expandas tu clúster sin problemas.

En las siguientes secciones, se proporcionan más detalles.

Detalles sobre la selección de rangos

GKE on AWS usa una red de superposición para los Pods y los servicios, por lo que no es necesario que los rangos de IP de estas redes se puedan enrutar dentro de la VPC. Todos los rangos de IP que usas deben estar disponibles. Para obtener más información, consulta Dataplane V2.

  • Los rangos de IP del Pod y del Service pueden superponerse con la red de VPC, siempre que no incluya los rangos de IP de la subred del grupo de nodos ni el plano de control.

  • El rango de IP del Pod y del Service debe estar dentro de uno de los siguientes rangos de IP privados:

    • 10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16: Direcciones IP privadas de RFC 1918
    • 100.64.0.0/10: Espacio de direcciones compartidas de RFC 6598
    • 192.0.0.0/24: Asignaciones de protocolo IETF de RFC 6890
    • 192.0.2.0/24, 198.51.100.0/24 y 203.0.113.0/24: Documentación de RFC 5737
    • 192.88.99.0/24: Retransmisión de IPv6 a IPv4 (obsoleta) de RFC 7526
    • 198.18.0.0/15: Pruebas comparativas de RFC 2544

Recomendamos rangos de IP dentro de 100.64.0.0/10 (RFC 6598). Este rango se reserva para la NAT de nivel de proveedor, que es probable que no se use en tu VPC.

Por ejemplo, la siguiente es una configuración válida, ya que las redes de Pods, Services y nodos no se superponen (la VPC usa direcciones IP privadas RFC 1918, mientras que las redes de Pods y Services se superponen con las IP privadas RFC 6598).

  • Red de VPC: 10.0.0.0/16, 172.16.1.0/24, 172.16.2.0/24
  • Red del Pod: 100.65.0.0/16
  • Red del Service: 100.66.0.0/16

La siguiente es una configuración válida a pesar de que las redes de pods y servicios se superponen con la red de VPC, ya que no hay superposición con las réplicas del plano de control.

  • Red de VPC: 10.0.0.0/16
  • Red del Pod: 10.0.1.0/24
  • Red del Service: 10.0.2.0/24
  • Subredes de réplica del plano de control: 10.0.3.0/24, 10.0.4.0/2410.0.5.0/24

La siguiente configuración no es válida, ya que el rango de IP del Pod se superpone con la red del plano de control. Esta superposición puede evitar que las cargas de trabajo se comuniquen con la réplica del plano de control en la red de VPC:

  • Red de VPC: 10.0.0.0/16
  • Red del Pod: 10.0.1.0/24
  • Red del Service: 10.1.0.0/24
  • Subredes de réplica del plano de control: 10.0.1.0/24, 10.0.2.0/2410.0.3.0/24

Detalles sobre el rango de direcciones de Pods

Kubernetes asigna direcciones a los objetos del pod desde el rango de direcciones del pod. El rango de Pods de un clúster se divide en rangos más pequeños para cada nodo. Cuando se programa un Pod en un nodo en particular, Kubernetes asigna una dirección IP de Pod desde el rango del nodo.

Para calcular el tamaño del rango de direcciones de Pods, debes estimar la cantidad de nodos que deseas ejecutar en tu clúster y la cantidad de Pods que deseas ejecutar en cada nodo.

En la siguiente tabla, se proporcionan recomendaciones de tamaño para los rangos de CIDR de Pod según la cantidad de nodos y Pods que quieres ejecutar.

Tabla de rangos de direcciones de Pods

Rango de direcciones de Pods Cantidad máx. de direcciones IP del pod Cant. máx. de nodos Cantidad máx. de pods
/24
El menor rango de direcciones de Pods posible
256 direcciones 1 nodo 110 pods
/23 512 direcciones 2 nodos 220 pods
/22 1,024 direcciones 4 nodos 440 pods
/21 2,048 direcciones 8 nodos 880 pods
/20 4,096 direcciones 16 nodos 1,760 pods
/19 8,192 direcciones 32 nodos 3,520 pods
/18 16,384 direcciones 64 nodos 7,040 pods
/17 32,768 direcciones 128 nodos 14,080 pods
/16 65,536 direcciones 256 nodos 28,160 pods
/15 131,072 direcciones 512 nodos 56,320 pods
/14 262,144 direcciones 1,024 nodos 112,640 pods

Detalles sobre el rango de direcciones del servicio

Kubernetes asigna direcciones IP virtuales a los objetos de servicio, por ejemplo, los balanceadores de cargas de este rango de direcciones.

Para calcular el tamaño del rango de direcciones de servicio, debes estimar la cantidad de servicios que deseas en el clúster.

En la siguiente tabla, se proporcionan recomendaciones de tamaño para los rangos de CIDR de servicio según la cantidad de servicios que quieras ejecutar.

Tabla de rangos de direcciones del servicio

Rango de direcciones de servicio Cantidad máxima de servicios
/27
El menor rango de direcciones del servicio posible
32 servicios
/26 64 servicios
/25 128 servicios
/24 256 servicios
/23 512 servicios
/22 1,024 servicios
/21 2,048 servicios
/20 4,096 servicios
/19 8,192 servicios
/18 16,384 servicios
/17 32,768 servicios
/16
El mayor rango de direcciones del servicio posible
65,536 servicios

Selecciona el proyecto host de la flota

Las flotas son un concepto de Google Cloud para organizar clústeres en grupos más grandes. Con las flotas, puedes administrar varios clústeres en varias nubes y aplicar políticas coherentes en ellos. La API de múltiples nubes de GKE registra automáticamente tus clústeres en una flota cuando se crean.

Cuando creas un clúster, especificas un proyecto host de flota desde el que se administrará el clúster. Debido a que GKE en AWS usa el nombre del clúster como el nombre de la membresía de la flota, debes asegurarte de que los nombres de los clústeres sean únicos en toda la flota.

Registro entre proyectos

Si deseas usar un proyecto host de flota distinto del proyecto de Google Cloud en el que se encuentra el clúster, debes aplicar una vinculación de política de IAM adicional a la cuenta de servicio del agente de servicio de múltiples nubes. Esto permite que la cuenta de servicio administre las flotas con el proyecto host de la flota.

  1. Para agregar el agente de servicio a tu proyecto, ejecuta este comando:

    gcloud beta services identity create --service=gkemulticloud.googleapis.com \
      --project=CLUSTER_PROJECT_NUMBER
    

    Reemplaza CLUSTER_PROJECT_NUMBER por el número de proyecto de Google Cloud.

  2. Asigna esta vinculación con el siguiente comando:

    gcloud projects add-iam-policy-binding FLEET_PROJECT_ID \
      --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com" \
      --role="roles/gkemulticloud.serviceAgent"
    

    Reemplaza lo siguiente:

    • FLEET_PROJECT_ID: El proyecto de Google Cloud de tu proyecto host de Fleet
    • CLUSTER_PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud.

El nombre de la cuenta del agente de servicios de múltiples nubes tiene el siguiente formato: service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com.

Puedes encontrar tus cuentas de servicio en la página Cuenta de servicio de la consola de Google Cloud. Si quieres obtener más información para encontrar el número de proyecto, consulta Identifica proyectos.

Cree su clúster

Usa el siguiente comando para crear tu clúster en GKE on AWS. Para obtener más información sobre este comando, incluidos sus parámetros opcionales, consulta la página de referencia de gcloud container aws.

gcloud container aws clusters create CLUSTER_NAME \
  --aws-region AWS_REGION \
  --location GOOGLE_CLOUD_LOCATION \
  --cluster-version CLUSTER_VERSION \
  --fleet-project FLEET_PROJECT \
  --vpc-id VPC_ID \
  --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
  --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
  --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
  --role-arn API_ROLE_ARN \
  --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
  --admin-users ADMIN_USERS_LIST \
  --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
  --iam-instance-profile CONTROL_PLANE_PROFILE \
  --tags "Name=CLUSTER_NAME-cp"

Reemplaza lo siguiente:

  • CLUSTER_NAME: el nombre del clúster que elegiste
  • AWS_REGION: la región de AWS en la que se creará el clúster
  • GOOGLE_CLOUD_LOCATION: el nombre de la ubicación de Google Cloud desde la que se administrará este clúster, como se define en las regiones de administración de Google Cloud.
  • CLUSTER_VERSION: la versión de Kubernetes que se instalará en tu clúster
  • FLEET_PROJECT: el proyecto host de la flota en el que se registrará el clúster. Si deseas administrar este clúster desde otro proyecto de Google Cloud, consulta Registro entre proyectos.
  • VPC_ID: el ID de la VPC de AWS para este clúster
  • CONTROL_PLANE_SUBNET_1, CONTROL_PLANE_SUBNET_2, CONTROL_PLANE_SUBNET_3: los ID de subred para las tres instancias del plano de control de tu clúster
  • POD_ADDRESS_CIDR_BLOCKS: el rango de direcciones de CIDR para los pods del clúster
  • SERVICE_ADDRESS_CIDR_BLOCKS: el rango de direcciones CIDR para los servicios del clúster.
  • API_ROLE_ARN: El ARN de la función de la API de múltiples nubes de GKE
  • CONTROL_PLANE_PROFILE: Es el perfil de la instancia de IAM asociada con el clúster. Para obtener detalles sobre cómo actualizar un perfil de instancia de IAM, consulta Actualiza el perfil de instancia de IAM de AWS.
  • DB_KMS_KEY_ARN: el nombre del recurso de Amazon (ARN) de la clave de KMS de AWS que encriptará los Secrets del clúster
  • CONFIG_KMS_KEY_ARN el nombre del recurso de Amazon (ARN) de la clave de KMS de AWS para encriptar los datos del usuario
  • ADMIN_USERS_LIST (opcional): Es una lista separada por comas de direcciones de correo electrónico de los usuarios a los que se les otorgan privilegios administrativos, por ejemplo, "kai@example.com,hao@example.com,kalani@example.com". La configuración predeterminada es el usuario que crea el clúster.

Si está presente, el parámetro --tags aplica la etiqueta de AWS determinada a todos los recursos de AWS subyacentes que administra GKE on AWS. En este ejemplo, se etiquetan los nodos del plano de control con el nombre del clúster al que pertenecen.

No podrás establecer una conexión SSH a estos nodos del plano de control, a menos que especifiques un par de llaves SSH con la marca --ssh-ec2-key-pair.

Para ver todas las versiones compatibles de Kubernetes en una ubicación de Google Cloud determinada, ejecuta el siguiente comando.

gcloud container aws get-server-config --location GCP_LOCATION

Autoriza Cloud Logging/Cloud Monitoring

Para que GKE on AWS cree y suba registros y métricas del sistema a Google Cloud, se debe autorizar.

Para autorizar la identidad de carga de trabajo de Kubernetes gke-system/gke-telemetry-agent a fin de escribir registros en Google Cloud Logging y métricas en Google Cloud Monitoring, ejecuta este comando:

gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
  --member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
  --role=roles/gkemulticloud.telemetryWriter

Reemplaza GOOGLE_PROJECT_ID por el ID del proyecto de Google Cloud del clúster.

Esta vinculación de IAM otorga acceso a todos los clústeres del proyecto de Google Cloud para subir registros y métricas. Solo necesitas ejecutarlo después de crear tu primer clúster para el proyecto.

La adición de esta vinculación de IAM fallará, a menos que se cree al menos un clúster en tu proyecto de Google Cloud. Esto se debe a que el grupo de identidades para cargas de trabajo al que se refiere (GOOGLE_PROJECT_ID.svc.id.goog) no se aprovisiona hasta que se crea el clúster.

¿Qué sigue?