Solucionar problemas de creación o actualización de clústeres

En esta página se explica cómo solucionar problemas relacionados con la instalación o la actualización de GKE en AWS.

Si necesitas más ayuda, ponte en contacto con el servicio de atención al cliente de Cloud.

Fallos en la creación de clústeres

Cuando haces una solicitud para crear un clúster, GKE en AWS primero ejecuta un conjunto de pruebas previas al vuelo para verificar la solicitud. Si falla la creación del clúster, puede deberse a que no se haya superado una de estas pruebas previas o a que no se haya completado un paso del proceso de creación del clúster.

Si una prueba previa al vuelo falla, el clúster no crea ningún recurso y te devuelve información sobre el error directamente. Por ejemplo, si intentas crear un clúster con el nombre invalid%%%name, la prueba previa para comprobar si el nombre del clúster es válido falla y la solicitud devuelve el siguiente error:

ERROR: (gcloud.container.aws.clusters.create) INVALID_ARGUMENT: must be
between 1-63 characters, valid characters are /[a-z][0-9]-/, should start with a
letter, and end with a letter or a number: "invalid%%%name",
field: aws_cluster_id

La creación de clústeres también puede fallar después de que se hayan superado las pruebas previas. Esto puede ocurrir varios minutos después de que se haya iniciado la creación del clúster, una vez que GKE en AWS haya creado recursos en Google Cloud y AWS. En este caso, habrá un recurso de AWS en tu proyecto Google Cloud con el estado ERROR.

Para obtener información sobre el error, ejecuta el siguiente comando:

gcloud container aws clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --format "value(state, errors)"

Haz los cambios siguientes:

  • CLUSTER_NAME con el nombre del clúster cuyo estado quieres consultar
  • GOOGLE_CLOUD_LOCATION con el nombre de la Google Cloud región que gestiona este clúster de AWS

También puedes obtener información sobre el error de creación describiendo el recurso Operation asociado a la llamada a la API de creación de clústeres.

gcloud container aws operations describe OPERATION_ID

Sustituye OPERATION_ID por el ID de la operación que ha creado el clúster. Si no tienes el ID de operación de tu solicitud de creación de clúster, puedes obtenerlo con el siguiente comando:

gcloud container aws operations list \
    --location GOOGLE_CLOUD_LOCATION

Usa la marca de tiempo o la información relacionada para identificar la operación de creación del clúster que te interese.

Por ejemplo, si la creación de tu clúster ha fallado porque un rol de gestión de identidades y accesos de AWS no tiene los permisos suficientes, este comando y sus resultados serán similares al siguiente ejemplo:

gcloud container aws operations describe b6a3d042-8c30-4524-9a99-6ffcdc24b370 \
  --location GOOGLE_CLOUD_LOCATION

La salida es similar a la siguiente:

done: true
error:
  code: 9
  message: 'could not set deregistration_delay timeout for the target group: AccessDenied
    User: arn:aws:sts::0123456789:assumed-role/foo-1p-dev-oneplatform/multicloud-service-agent
    is not authorized to perform: elasticloadbalancing:ModifyTargetGroupAttributes
    on resource: arn:aws:elasticloadbalancing:us-west-2:0123456789:targetgroup/gke-4nrk57tlyjva-cp-tcp443/74b57728e7a3d5b9
    because no identity-based policy allows the elasticloadbalancing:ModifyTargetGroupAttributes
    action'
metadata:
  '@type': type.googleapis.com/google.cloud.gkemulticloud.v1.OperationMetadata
  createTime: '2021-12-02T17:47:31.516995Z'
  endTime: '2021-12-02T18:03:12.590148Z'
  statusDetail: Cluster is being deployed
  target: projects/123456789/locations/us-west1/awsClusters/aws-prod1
name: projects/123456789/locations/us-west1/operations/b6a3d042-8c30-4524-9a99-6ffcdc24b370

La creación o la operación de un clúster falla con un error de autorización

Un error que muestra un fallo de autorización suele indicar que uno de los dos roles de gestión de identidades y accesos de AWS que especificaste durante el comando de creación del clúster se creó incorrectamente. Por ejemplo, si el rol de la API no incluyera el permiso elasticloadbalancing:ModifyTargetGroupAttributes, la creación del clúster fallaría y se mostraría un mensaje de error similar al siguiente:

ERROR: (gcloud.container.aws.clusters.create) could not set
deregistration_delay timeout for the target group: AccessDenied User:
arn:aws:sts::0123456789:assumed-role/cloudshell-user-dev-api-role/multicloud-
service-agent is not authorized to perform:
elasticloadbalancing:ModifyTargetGroupAttributes on resource:
arn:aws:elasticloadbalancing:us-east-1:0123456789:targetgroup/gke-u6au6c65e4iq-
cp-tcp443/be4c0f8d872bb60e because no identity-based policy allows the
elasticloadbalancing:ModifyTargetGroupAttributes action

Aunque parezca que un clúster se ha creado correctamente, un rol de gestión de identidades y accesos especificado de forma incorrecta puede provocar errores más adelante durante el funcionamiento del clúster, por ejemplo, al usar comandos como kubectl logs.

Para resolver estos errores de autorización, comprueba que las políticas asociadas a los dos roles de gestión de identidades y accesos que has especificado durante la creación del clúster sean correctas. En concreto, asegúrate de que coincidan con las descripciones de Crear roles de gestión de identidades y accesos de AWS, elimina el clúster y vuelve a crearlo. Las descripciones de los roles individuales están disponibles en Rol de API y Rol de plano de control.

La creación o el funcionamiento del clúster falla en la fase de comprobación del estado

A veces, la creación del clúster falla durante la comprobación del estado y el estado de la operación es similar al siguiente:

done: true
error:
  code: 4
  message: Operation failed
metadata:
  '@type': type.googleapis.com/google.cloud.gkemulticloud.v1.OperationMetadata
  createTime: '2022-06-29T18:26:39.739574Z'
  endTime: '2022-06-29T18:54:45.632136Z'
  errorDetail: Operation failed
  statusDetail: Health-checking cluster
  target: projects/123456789/locations/us-west1/awsClusters/aws-prod1
name: projects/123456789/locations/us-west1/operations/8a7a3b7f-242d-4fff-b518-f361d41c6597

Este error puede deberse a que faltan roles de IAM o a que se han especificado incorrectamente. Puede usar AWS CloudTrail para detectar problemas de IAM.

Por ejemplo:

  • Si el rol de la API no incluye el permiso kms:GenerateDataKeyWithoutPlaintext para la clave KMS del volumen principal del plano de control, verás los siguientes eventos:

    "eventName": "AttachVolume",
    "errorCode": "Client.InvalidVolume.NotFound",
    "errorMessage": "The volume 'vol-0ff75940ce333aebb' does not exist.",
    

    y

    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::0123456789:assumed-role/foo-1p-dev-oneplatform/multicloud-service-agent is not authorized to perform: kms:GenerateDataKeyWithoutPlaintext on resource: arn:aws:kms:us-west1:0123456789:key/57a61a45-d9c1-4038-9021-8eb08ba339ba because no identity-based policy allows the kms:GenerateDataKeyWithoutPlaintext action",
    
  • Si el rol del plano de control no incluye el permiso kms:CreateGrant para la clave de KMS del volumen principal del plano de control, verás los siguientes eventos:

    "eventName": "AttachVolume",
    "errorCode": "Client.CustomerKeyHasBeenRevoked",
    "errorMessage": "Volume vol-0d022beb769c8e33b cannot be attached. The encrypted volume was unable to access the KMS key.",
    

    y

    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::0123456789:assumed-role/foo-controlplane/i-0a11fae03eb0b08c1 is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:us-west1:0123456789:key/57a61a45-d9c1-4038-9021-8eb08ba339ba because no identity-based policy allows the kms:CreateGrant action",
    
  • Si no has asignado el rol vinculado al servicio llamado AWSServiceRoleForAutoScaling con permisos de kms:CreateGrant para usar la clave de KMS del volumen raíz del plano de control, verás los siguientes eventos:

    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::0123456789:assumed-role/AWSServiceRoleForAutoScaling/AutoScaling is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:us-west1:0123456789:key/c77a3a26-bc91-4434-bac0-0aa963cb0c31 because no identity-based policy allows the kms:CreateGrant action",
    
  • Si no has asignado el rol vinculado al servicio llamado AWSServiceRoleForAutoScaling con permisos de kms:GenerateDataKeyWithoutPlaintext para usar la clave de KMS del volumen raíz del plano de control, verás los siguientes eventos:

    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::0123456789:assumed-role/AWSServiceRoleForAutoScaling/AutoScaling is not authorized to perform: kms:GenerateDataKeyWithoutPlaintext on resource: arn:aws:kms:us-west1:0123456789:key/c77a3a26-bc91-4434-bac0-0aa963cb0c31 because no identity-based policy allows the kms:CreateGrant action",
    

Esperando a que los nodos se unan al clúster

Si recibes el siguiente error al crear un grupo de nodos, comprueba que tu VPC no incluya un bloque CIDR IPv4 secundario asociado.

errorDetail: Operation failed
statusDetail: Waiting for nodes to join the cluster (0 out of 1 are ready)

Para solucionar este problema, cree un grupo de seguridad que incluya todos los bloques CIDR y añada ese grupo a su clúster. Para obtener más información, consulta Grupos de nodos en bloques CIDR secundarios de VPC.

Obtener el registro del sistema de una instancia

Si no se inicia una instancia de plano de control o de grupo de nodos, puedes inspeccionar su registro del sistema. Para inspeccionar el registro del sistema, haz lo siguiente:

  1. Abre la consola de instancias de AWS EC2.
  2. Haz clic en Instancias.
  3. Busca la instancia por su nombre. GKE en AWS suele crear instancias llamadas CLUSTER_NAME-cp para los nodos del plano de control o CLUSTER_NAME-np para los nodos del grupo de nodos.
  4. Elige Acciones -> Monitorizar y solucionar problemas -> Obtener registro del sistema. Aparecerá el registro del sistema de la instancia.

Errores de actualización del clúster

Cuando actualizas un clúster, al igual que cuando creas uno nuevo, GKE on AWS primero ejecuta un conjunto de pruebas previas para verificar la solicitud. Si se produce un error en la actualización del clúster, puede deberse a que no se haya superado una de estas pruebas previas o a que no se haya completado un paso del proceso de actualización del clúster.

Si falla una prueba previa, el clúster no actualiza ningún recurso y te devuelve información sobre el error directamente. Por ejemplo, si intentas actualizar un clúster para que use un par de claves SSH con el nombre test_ec2_keypair, la prueba previa al vuelo intentará obtener el par de claves de EC2, pero no podrá hacerlo y la solicitud devolverá el siguiente error:

ERROR: (gcloud.container.aws.clusters.update) INVALID_ARGUMENT: key pair
"test_ec2_keypair" not found,
field: aws_cluster.control_plane.ssh_config.ec2_key_pair

Las actualizaciones de clústeres también pueden fallar después de que se hayan superado las pruebas previas. Esto puede ocurrir varios minutos después de que se haya iniciado la actualización del clúster y el recurso de AWS de tu proyecto tenga el estado DEGRADED. Google Cloud

Para obtener información sobre el error y la operación relacionada, sigue los pasos que se describen en Errores de creación de clústeres.

La actualización del clúster falla al actualizar las etiquetas del plano de control

La API de actualización de AWS admite la actualización de etiquetas del plano de control. Para actualizar las etiquetas, necesitas un clúster con la versión 1.24 de Kubernetes o una posterior. También debes asegurarte de que tu rol de gestión de identidades y accesos de AWS tenga los permisos adecuados, tal como se indica en la página actualizar clúster, para actualizar las etiquetas del plano de control.

Un error que muestra un fallo de autenticación suele indicar que no has añadido algún permiso de gestión de identidades y accesos. Por ejemplo, si el rol de la API no incluye el permiso ec2:DeleteTags, es posible que la actualización de etiquetas del clúster falle y se muestre un mensaje de error similar al siguiente (se ha ocultado <encoded_auth_failure_message> para que sea más breve):

ERROR: (gcloud.container.aws.clusters.update) could not delete tags:
UnauthorizedOperation You are not authorized to perform this operation.
Encoded authorization failure message: <encoded_auth_failure_message>

Para depurar el mensaje de error codificado anterior, puede enviar una solicitud a la API decode-authorization-message de AWS STS, como se muestra en el siguiente comando:

aws sts decode-authorization-message --encoded-message
<encoded_auth_failure_message> --query DecodedMessage --output
text | jq '.' | less

El resultado debería ser similar al siguiente:

...
"principal": {
  "id": "AROAXMEL2SCNPG6RCJ72B:iam-session",
  "arn": "arn:aws:sts::1234567890:assumed-role/iam_role/iam-session"
},
"action": "ec2:DeleteTags",
"resource": "arn:aws:ec2:us-west-2:1234567890:security-group-rule/sgr-00bdbaef24a92df62",
...

La respuesta anterior indica que no has podido realizar la acción ec2:DeleteTags en el recurso de regla de grupo de seguridad de EC2 del clúster de AWS. Actualiza tu rol de API según corresponda y vuelve a enviar la solicitud de API de actualización para actualizar las etiquetas del plano de control.

Siguientes pasos