Solucionar problemas de criação ou atualização de cluster

Esta página mostra como resolver problemas relacionados à instalação ou atualização do GKE na AWS.

Se precisar de assistência adicional, entre em contato com o Atendimento ao Cliente da Cloud .

Falhas na criação de cluster

Ao fazer uma solicitação para criar um cluster, o GKE na AWS primeiro executa um conjunto de testes de pré-lançamento para verificar a solicitação. Se a criação do cluster falhar, pode ser porque um desses testes de pré-lançamento falhou ou porque uma etapa do processo de criação do cluster não foi concluída.

Se um teste de pré-voo falhar, o cluster não criará nenhum recurso e retornará informações sobre o erro diretamente para você. Por exemplo, se você tentar criar um cluster com o nome invalid%%%name , o teste de pré-voo para um nome de cluster válido falhará e a solicitação retornará o seguinte erro:

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

A criação do cluster também pode falhar após a conclusão dos testes de pré-voo. Isso pode ocorrer vários minutos após o início da criação do cluster, após o GKE na AWS ter criado recursos em Google Cloud e AWS. Neste caso, um recurso AWS existirá em seu Google Cloud projeto com seu estado definido como ERROR .

Para obter detalhes sobre a falha, execute o seguinte comando:

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

Substitua o seguinte:

  • CLUSTER_NAME com o nome do cluster cujo estado você está consultando
  • GOOGLE_CLOUD_LOCATION com o nome do Google Cloud região que gerencia este cluster AWS

Como alternativa, você pode obter detalhes sobre a falha de criação descrevendo o recurso Operation associado à chamada de API de criação de cluster.

gcloud container aws operations describe OPERATION_ID

Substitua OPERATION_ID pelo ID da operação que criou o cluster. Se você não tiver o ID da operação da sua solicitação de criação de cluster, poderá obtê-lo com o seguinte comando:

gcloud container aws operations list \
    --location GOOGLE_CLOUD_LOCATION

Use o registro de data e hora ou informações relacionadas para identificar a operação de criação de cluster de interesse.

Por exemplo, se a criação do seu cluster falhou devido a uma função do AWS IAM com permissão insuficiente, este comando e seus resultados se assemelham ao exemplo a seguir:

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

A saída é semelhante à seguinte:

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

A criação ou operação do cluster falha com um erro de autorização

Um erro que mostra uma falha de autorização geralmente indica que uma das duas funções do AWS IAM especificadas durante o comando de criação do cluster foi criada incorretamente. Por exemplo, se a função da API não incluísse a permissão elasticloadbalancing:ModifyTargetGroupAttributes , a criação do cluster falharia com uma mensagem de erro semelhante à seguinte:

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

Mesmo que um cluster pareça ter sido criado com sucesso, uma função do IAM especificada incorretamente pode causar falhas posteriormente durante a operação do cluster, como ao usar comandos como kubectl logs .

Para resolver esses erros de autorização, confirme se as políticas associadas às duas funções do IAM especificadas durante a criação do cluster estão corretas. Especificamente, certifique-se de que elas correspondam às descrições em "Criar funções do IAM da AWS" e, em seguida, exclua e recrie o cluster. As descrições de funções individuais estão disponíveis em "Função de API" e "Função do plano de controle" .

A criação ou operação do cluster falha no estágio de verificação de integridade

Às vezes, a criação do cluster falha durante a verificação de integridade com um status de operação semelhante ao seguinte:

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

Essa falha pode ocorrer devido à ausência de funções do IAM ou a funções do IAM especificadas incorretamente. Você pode usar o AWS CloudTrail para expor problemas do IAM.

Por exemplo:

  • Se a função da API não incluiu a permissão kms:GenerateDataKeyWithoutPlaintext para a chave KMS do volume principal do plano de controle, você verá os seguintes eventos:

    "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 a função do plano de controle não incluiu a permissão kms:CreateGrant para a chave KMS do volume principal do plano de controle, você verá os seguintes eventos:

    "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 você não concedeu à função vinculada ao serviço chamada AWSServiceRoleForAutoScaling permissões kms:CreateGrant para usar a chave KMS do volume raiz do plano de controle, você verá os seguintes 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",
    
  • Se você não concedeu à função vinculada ao serviço chamada AWSServiceRoleForAutoScaling permissões kms:GenerateDataKeyWithoutPlaintext para usar a chave KMS do volume raiz do plano de controle, você verá os seguintes 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",
    

Aguardando que os nós se juntem ao cluster

Se você receber o seguinte erro ao criar um pool de nós, verifique se sua VPC não inclui um bloco CIDR IPv4 secundário associado .

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

Para corrigir esse problema, crie um grupo de segurança que inclua todos os blocos CIDR e adicione esse grupo ao seu cluster. Para obter mais informações, consulte Pools de nós em blocos CIDR secundários da VPC .

Obter o log do sistema de uma instância

Se uma instância do plano de controle ou do pool de nós não iniciar, você poderá inspecionar o log do sistema. Para inspecionar o log do sistema, faça o seguinte:

  1. Abra o console da instância do AWS EC2 .
  2. Clique em Instâncias .
  3. Encontre a instância pelo nome. O GKE na AWS normalmente cria instâncias denominadas CLUSTER_NAME -cp para nós do plano de controle ou CLUSTER_NAME -np para nós do pool de nós.
  4. Selecione Ações -> Monitorar e Solucionar Problemas -> Obter Log do Sistema . O log do sistema da instância será exibido.

Falhas de atualização de cluster

Ao atualizar um cluster, assim como ao criar um novo cluster, o GKE na AWS primeiro executa um conjunto de testes de pré-lançamento para verificar a solicitação. Se a atualização do cluster falhar, pode ser porque um desses testes de pré-lançamento falhou ou porque uma etapa do processo de atualização do cluster não foi concluída.

Se um teste de pré-voo falhar, o cluster não atualizará nenhum recurso e retornará informações sobre o erro diretamente para você. Por exemplo, se você tentar atualizar um cluster para usar um par de chaves SSH chamado test_ec2_keypair , o teste de pré-voo tentará buscar o par de chaves EC2, mas falhará, e a solicitação retornará o seguinte erro:

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

As atualizações do cluster também podem falhar após a conclusão dos testes de pré-voo. Isso pode ocorrer vários minutos após o início da atualização do cluster, e seu recurso da AWS em seu Google Cloud o projeto tem seu estado definido como DEGRADED .

Para obter detalhes sobre a falha e a operação relacionada, siga as etapas descritas em Falhas na criação do cluster .

A atualização do cluster falha ao atualizar as tags do plano de controle

A API de atualização da AWS oferece suporte à atualização de tags do plano de controle. Para atualizar tags, você precisa de um cluster com o Kubernetes versão 1.24 ou superior. Você também precisa garantir que sua função do AWS IAM tenha as permissões apropriadas, conforme listado na página de atualização do cluster para atualizar tags do plano de controle.

Um erro que mostra uma falha de autenticação geralmente indica que você esqueceu de adicionar alguma permissão do IAM. Por exemplo, se a função da API não incluísse a permissão ec2:DeleteTags , a atualização do cluster para tags poderia falhar, exibindo uma mensagem de erro semelhante à seguinte (a <encoded_auth_failure_message> foi removida para fins de brevidade):

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 a mensagem de falha codificada anterior, você pode enviar uma solicitação à API decode-authorization-message do AWS STS, conforme mostrado no comando a seguir:

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

A saída é semelhante à seguinte:

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

A resposta anterior indica que você não conseguiu executar a ação ec2:DeleteTags no recurso de regra do grupo de segurança EC2 do cluster AWS. Atualize sua função de API conforme necessário e reenvie a solicitação de atualização da API para atualizar as tags do plano de controle.

O que vem a seguir