Risolvere i problemi relativi alla creazione o all'aggiornamento del cluster

Questa pagina mostra come risolvere i problemi relativi all'installazione o all'upgrade di GKE su AWS.

Se hai bisogno di ulteriore aiuto, contatta l'assistenza clienti Google Cloud.

Errori di creazione del cluster

Quando effettui una richiesta per creare un cluster, GKE su AWS esegue prima una serie di test pre-flight per verificare la richiesta. Se la creazione del cluster non va a buon fine, il motivo potrebbe essere che uno di questi test pre-flight non è riuscito o che un passaggio dello stesso processo di creazione del cluster non è stato completato.

Se un test pre-flight non va a buon fine, il cluster non crea alcuna risorsa e restituisce direttamente le informazioni sull'errore. Ad esempio, se provi a creare un cluster con il nome invalid%%%name, il test pre-flight per un nome di cluster valido non va a buon fine e la richiesta restituisce il seguente errore:

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 creazione del cluster può anche non riuscire dopo il superamento dei test pre-flight. Questo può verificarsi diversi minuti dopo l'inizio della creazione del cluster, dopo che GKE su AWS ha creato risorse in Google Cloud e AWS. In questo caso, nel progetto Google Cloud esisterà una risorsa AWS con lo stato impostato su ERROR.

Per visualizzare i dettagli dell'errore, esegui questo comando:

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

Sostituisci quanto segue:

  • CLUSTER_NAME con il nome del cluster di cui stai eseguendo la query
  • GOOGLE_CLOUD_LOCATION con il nome della regione Google Cloud che gestisce questo cluster AWS

In alternativa, puoi ottenere i dettagli dell'errore di creazione descrivendo la risorsa Operation associata alla chiamata API di creazione del cluster.

gcloud container aws operations describe OPERATION_ID

Sostituisci OPERATION_ID con l'ID dell'operazione che ha creato il cluster. Se non hai l'ID operazione della richiesta di creazione del cluster, puoi recuperarlo con il seguente comando:

gcloud container aws operations list \
    --location GOOGLE_CLOUD_LOCATION

Utilizza il timestamp o le informazioni correlate per identificare l'operazione di creazione del cluster che ti interessa.

Ad esempio, se la creazione del cluster non è riuscita a causa di un ruolo AWS IAM sufficientemente autorizzato, questo comando e i suoi risultati sono simili all'esempio seguente:

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

L'output è simile al seguente:

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

L'operazione o la creazione del cluster hanno esito negativo a causa di un errore di autorizzazione

Un errore che mostra un errore di autorizzazione di solito indica che uno dei due ruoli AWS IAM che hai specificato durante il comando di creazione del cluster è stato creato in modo errato. Ad esempio, se il ruolo API non includeva l'autorizzazione elasticloadbalancing:ModifyTargetGroupAttributes, la creazione del cluster non riuscirà e verrà visualizzato un messaggio di errore simile al seguente:

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

Anche se un cluster sembra essere stato creato correttamente, un ruolo IAM specificato in modo errato potrebbe causare errori in un secondo momento durante il funzionamento del cluster, ad esempio quando vengono utilizzati comandi come kubectl logs.

Per risolvere questi errori di autorizzazione, verifica che i criteri associati ai due ruoli IAM specificati durante la creazione del cluster siano corretti. In particolare, assicurati che corrispondano alle descrizioni riportate in Creare ruoli AWS IAM, quindi elimina e ricrea il cluster. Le singole descrizioni dei ruoli sono disponibili in Ruolo API e Ruolo del piano di controllo.

L'operazione o la creazione del cluster hanno esito negativo in fase di controllo di integrità

A volte la creazione del cluster non riesce durante il controllo di integrità con uno stato di operazione simile al seguente:

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

Questo errore potrebbe essere dovuto a ruoli IAM mancanti o a ruoli IAM specificati in modo errato. Puoi utilizzare AWS CloudTrail per esporre i problemi IAM.

Ad esempio:

  • Se il ruolo API non includeva l'autorizzazione kms:GenerateDataKeyWithoutPlaintext per la chiave KMS del volume principale del piano di controllo, vedrai i seguenti eventi:

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

    and

    "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",
    
  • Se il ruolo del piano di controllo non includeva l'autorizzazione kms:CreateGrant per la chiave KMS del volume principale del piano di controllo, vedrai i seguenti eventi:

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

    and

    "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",
    
  • Se non hai concesso il ruolo collegato al servizio denominato AWSServiceRoleForAutoScaling con le autorizzazioni kms:CreateGrant per utilizzare la chiave KMS del volume radice del piano di controllo, vedrai i seguenti eventi:

    "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",
    
  • Se non hai concesso il ruolo collegato al servizio denominato AWSServiceRoleForAutoScaling con le autorizzazioni kms:GenerateDataKeyWithoutPlaintext per utilizzare la chiave KMS del volume radice del piano di controllo, vedrai i seguenti eventi:

    "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",
    

In attesa che i nodi si uniscano al cluster

Se ricevi il seguente errore durante la creazione di un pool di nodi, verifica che il tuo VPC non includa un blocco CIDR secondario associato a IPv4.

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

Per risolvere il problema, crea un gruppo di sicurezza che includa tutti i blocchi CIDR e aggiungilo al cluster. Per maggiori informazioni, consulta Pool di nodi nei blocchi CIDR secondari VPC.

recupera il log di sistema di un'istanza

Se un'istanza di un piano di controllo o di un pool di nodi non si avvia, puoi ispezionare il relativo log di sistema. Per esaminare il log di sistema:

  1. Apri la console dell'istanza AWS EC2.
  2. Fai clic su Istanze.
  3. Trova l'istanza in base al nome. GKE su AWS in genere crea istanze denominate CLUSTER_NAME-cp per i nodi del piano di controllo o CLUSTER_NAME-np per i nodi del pool di nodi.
  4. Scegli Azioni -> Monitora e risolvi i problemi -> Ottieni log di sistema. Viene visualizzato il log di sistema dell'istanza.

Errori di aggiornamento del cluster

Quando aggiorni un cluster, proprio come quando ne crei uno nuovo, GKE su AWS esegue prima una serie di test pre-flight per verificare la richiesta. Se l'aggiornamento del cluster non va a buon fine, il motivo potrebbe essere che uno di questi test pre-flight non è riuscito o che un passaggio nello stesso processo di aggiornamento del cluster non è stato completato.

Se un test pre-flight non va a buon fine, il cluster non aggiorna nessuna risorsa e restituisce direttamente le informazioni sull'errore. Ad esempio, se provi ad aggiornare un cluster per utilizzare una coppia di chiavi SSH denominata test_ec2_keypair, il test preliminare tenta di recuperare la coppia di chiavi EC2 e ha esito negativo e la richiesta restituisce il seguente errore:

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

Gli aggiornamenti del cluster possono anche non riuscire dopo il superamento dei test pre-flight. Ciò può verificarsi diversi minuti dopo l'inizio dell'aggiornamento del cluster e lo stato della risorsa AWS nel progetto Google Cloud è impostato su DEGRADED.

Per ottenere i dettagli dell'errore e dell'operazione correlata, segui i passaggi descritti in Errori di creazione del cluster.

L'aggiornamento del cluster non riesce durante l'aggiornamento dei tag del piano di controllo

L'API di aggiornamento AWS supporta l'aggiornamento dei tag del piano di controllo. Per aggiornare i tag, devi avere un cluster con Kubernetes 1.24 o versioni successive. Devi inoltre assicurarti che il tuo ruolo AWS IAM disponga delle autorizzazioni appropriate elencate nella pagina Aggiorna cluster per l'aggiornamento dei tag del piano di controllo.

Un errore che mostra un errore di autenticazione di solito indica che non hai aggiunto alcuna autorizzazione IAM. Ad esempio, se il ruolo API non includeva l'autorizzazione ec2:DeleteTags, l'aggiornamento del cluster per i tag potrebbe non riuscire con un messaggio di errore simile al seguente (<encoded_auth_failure_message> viene oscurato per brevità):

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>

Per eseguire il debug del precedente messaggio di errore codificato, puoi inviare una richiesta all'API decode-Authorization-message di AWS STS come mostrato nel seguente comando:

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

L'output è simile al seguente:

...
"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 risposta precedente indica che non è stato possibile eseguire l'azione ec2:DeleteTags sulla risorsa della regola del gruppo di sicurezza EC2 del cluster AWS. Aggiorna il ruolo API di conseguenza e invia nuovamente la richiesta API di aggiornamento per aggiornare i tag del piano di controllo.

Passaggi successivi