En esta página, se describe cómo crear un clúster de GKE en 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.
- El rol de IAM de AWS que adopta GKE en AWS 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 se pueden compartir entre todos los clústeres. GKE en AWS administra el resto de los recursos subyacentes de AWS con permiso de clúster.
Selecciona rangos CIDR para el clúster
Cuando creas un clúster en GKE en AWS, debes proporcionar rangos de direcciones IPv4 para usar con Pods y Services.
Estos rangos de IP se especifican mediante la notación de enrutamiento entre dominios sin clases (CIDR), por ejemplo, 100.64.0.0/16
.
Rangos recomendados
Recomendamos los siguientes rangos de CIDR para servicios y Pods:
- Services: 100.64.0.0/16
- Pods: 100.96.0.0/11
Estos rangos son lo suficientemente grandes como para que puedas expandir tu clúster sin problemas.
En las siguientes secciones, se proporcionan más detalles.
Detalles sobre cómo seleccionar rangos
GKE en AWS usa una red de superposición para Pods y Services, por lo que los rangos de IP de estas redes no necesitan enrutarse 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 se pueden superponer con la red de VPC, siempre que no incluya los rangos de IP de la subred del plano de control o el grupo de nodos.
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
y192.168.0.0/16
: Direcciones IP privadas de RFC 1918100.64.0.0/10
: Espacio de direcciones compartidas de RFC 6598192.0.0.0/24
: Asignaciones de protocolo IETF de RFC 6890192.0.2.0/24
,198.51.100.0/24
y203.0.113.0/24
: Documentación de RFC 5737192.88.99.0/24
: Retransmisión de IPv6 a IPv4 (obsoleta) de RFC 7526198.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/24
,10.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/24
,10.0.3.0/24
Detalles sobre el rango de direcciones del Pod
Kubernetes asigna direcciones a los objetos Pod del rango de direcciones del Pod. El rango del Pod 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 Service
Kubernetes asigna direcciones IP virtuales a los objetos de Service, 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 GKE Multi-Cloud 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 tus clústeres sean únicos en tu 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.
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.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 FleetCLUSTER_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. Para obtener más información sobre cómo encontrar el número de tu proyecto, consulta Identifica proyectos.
Crea tu clúster
Usa el siguiente comando para crear tu clúster en GKE en 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 elegisteAWS_REGION
: la región de AWS en la que se creará el clústerGOOGLE_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ústerFLEET_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ústerCONTROL_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ústerPOD_ADDRESS_CIDR_BLOCKS
: el rango de direcciones de CIDR para los pods del clústerSERVICE_ADDRESS_CIDR_BLOCKS
: el rango de direcciones CIDR para los servicios del clústerAPI_ROLE_ARN
: el ARN del rol de la API de GKE Multi-CloudCONTROL_PLANE_PROFILE
: 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 para encriptar los Secrets del clústerCONFIG_KMS_KEY_ARN
el nombre del recurso de Amazon (ARN) de la clave de KMS de AWS para encriptar los datos del usuarioADMIN_USERS_LIST
(opcional): una lista separada por comas de direcciones de correo electrónico de los usuarios a los que se les otorgan privilegios de administrador, 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 subyacentes de AWS administrados por GKE en 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 en AWS cree y suba registros y métricas del sistema a Google Cloud, debe tener autorización.
Para autorizar la identidad de carga de trabajo de Kubernetes gke-system/gke-telemetry-agent
con el objetivo 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.
Agregar esta vinculación de IAM fallará, salvo 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 hace referencia (GOOGLE_PROJECT_ID.svc.id.goog
) no se aprovisiona hasta que se crea el clúster.
¿Qué sigue?
- Crea un grupo de nodos.
- Debes configura el acceso de kubectl al clúster.
- Prueba la Guía de inicio rápido para iniciar tu primera carga de trabajo.
- Lee la documentación de referencia de
gcloud container clusters create
. - ¿Tuviste problemas para crear un clúster? Consulta Solución de problemas para obtener más información.