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 assistenza, contatta l'assistenza clienti Google Cloud.

Errori di creazione del cluster

Quando invii una richiesta di creazione di un cluster, GKE su AWS esegue innanzitutto una serie di test pre-volo per verificare la richiesta. Se la creazione del cluster non va a buon fine, il motivo può essere il mancato superamento di uno di questi test pre-volo o il mancato completamento di un passaggio nella procedura di creazione del cluster.

Se un test pre-volo non va a buon fine, il cluster non crea risorse e ti restituisce direttamente le informazioni sull'errore. Ad esempio, se provi a creare un cluster con il nome invalid%%%name, il test pre-volo per un nome di cluster valido non riesce 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ò non riuscire anche dopo il superamento dei test preflight. Ciò può accadere 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 tuo progetto Google Cloud esisterà una risorsa AWS con lo stato impostato su ERROR.

Per ottenere 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 una query sullo stato
  • GOOGLE_CLOUD_LOCATION con il nome della regione Google Cloud che gestisce questo cluster AWS

In alternativa, puoi ottenere dettagli sull'errore di creazione descrivendo la risorsa Operation associata alla chiamata API create 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 di tuo interesse.

Ad esempio, se la creazione del cluster non è riuscita a causa di un ruolo IAM AWS con autorizzazioni insufficienti, questo comando e i relativi 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

La creazione o l'operazione del cluster non riesce a causa di un errore di autorizzazione

Un errore che mostra un errore di autorizzazione di solito indica che uno dei due ruoli IAM AWS specificati durante il comando di creazione del cluster è stato creato in modo errato. Ad esempio, se il ruolo API non include 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 l'operazione del cluster, ad esempio quando utilizzi 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. Nello specifico, assicurati che corrispondano alle descrizioni in Creazione di ruoli IAM AWS, poi elimina e ricrea il cluster. Le descrizioni dei singoli ruoli sono disponibili in Ruolo API e Ruolo del control plane.

La creazione o l'operazione del cluster non riesce nella fase di controllo di integrità

A volte la creazione del cluster non riesce durante il controllo di integrità con uno stato dell'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 specificati in modo errato. Puoi utilizzare AWS CloudTrail per esporre i problemi di IAM.

Ad esempio:

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

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

    e

    "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 control plane non includeva l'autorizzazione kms:CreateGrant per la chiave KMS del volume principale del control plane, 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.",
    

    e

    "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 assegnato il ruolo collegato al servizio denominato AWSServiceRoleForAutoScaling con le autorizzazioni kms:CreateGrant per utilizzare la chiave KMS del volume root del control plane, 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 assegnato 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 la tua VPC non includa un blocco CIDR IPv4 secondario associato.

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 aggiungi questo gruppo al cluster. Per maggiori informazioni, consulta Node pool nei blocchi CIDR secondari VPC.

Recuperare il log di sistema di un'istanza

Se un'istanza del piano di controllo o del pool di nodi non viene avviata, puoi esaminare il relativo log di sistema. Per controllare il log di sistema:

  1. Apri la console dell'istanza AWS EC2.
  2. Fai clic su Istanze.
  3. Trova l'istanza per nome. GKE su AWS in genere crea istanze denominate CLUSTER_NAME-cp per i nodi del control plane 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-volo per verificare la richiesta. Se l'aggiornamento del cluster non va a buon fine, il motivo può essere il mancato superamento di uno di questi test pre-volo o il mancato completamento di un passaggio della procedura di aggiornamento del cluster.

Se un test pre-volo non va a buon fine, il cluster non aggiorna alcuna risorsa e ti restituisce direttamente le informazioni sull'errore. Ad esempio, se provi ad aggiornare un cluster in modo che utilizzi una coppia di chiavi SSH con il nome test_ec2_keypair, il test preliminare tenta di recuperare la coppia di chiavi EC2, ma non riesce 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 non riuscire anche dopo il superamento dei test preflight. Ciò può verificarsi diversi minuti dopo l'inizio dell'aggiornamento del cluster e la risorsa AWS nel tuo progetto Google Cloud ha lo stato impostato su DEGRADED.

Per visualizzare 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 control plane

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

Un errore che mostra un errore di autenticazione di solito indica che non hai aggiunto alcune autorizzazioni 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> è 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 messaggio di errore codificato precedente, puoi inviare una richiesta all'API AWS STS decode-authorization-message 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 tuo ruolo API di conseguenza e invia di nuovo la richiesta API di aggiornamento per aggiornare i tag del control plane.

Passaggi successivi