AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
Como solucionar problemas ao criar dinamicamente um objeto de volume persistente do Kubernetes usando o controlador CSI do Amazon EFS?
Estou recebendo erros ao criar um pod do Amazon Elastic Kubernetes Service (Amazon EKS) que usa a declaração de volume persistente. O volume persistente é criado dinamicamente e está no estado Pendente.
Resolução
O driver CSI do Amazon Elastic File System (Amazon EFS) usa o perfil do AWS IAM (Identity and Access Management) para o recurso de conta de serviço (IRSA). Esse recurso exige que vários componentes, incluindo o provedor OpenID Connect (OIDC), o perfil do IAM e as permissões de acesso, estejam configurados corretamente. Esses componentes são configurados usando a política de perfil do IAM e a conta de serviço do Kubernetes. Siga as etapas de solução de problemas indicadas a seguir de acordo com a mensagem de erro recebida.
Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.
storageclass.storage.k8s.io "<STORAGE_CLASS_NAME>" não encontrado
Esse erro indica que a classe de armazenamento referenciada pelo parâmetro storageClassName na definição do objeto PersistentVolumeClaim não existe e deve ser criada.
Para resolver esse erro, faça o seguinte:
1. Crie um objeto de classe de armazenamento Kubernetes.
2. Baixe um manifesto de classe de armazenamento para o Amazon EFS:
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
3. Edite o arquivo baixado. Encontre a instrução a seguir e substitua o valor de fileSystemId pelo ID do seu sistema de arquivos.
fileSystemId: fs-582a03f344f0fc633 # Replace the filesystem id
4. Implante a classe de armazenamento:
kubectl apply -f storageclass.yaml
failed to provision volume with StorageClass "<STORAGE_CLASS_NAME>": rpc error: code = InvalidArgument desc = File System does not exist: Resource was not found
Esse erro indica que o fileSystemId referenciado pelo objeto da classe de armazenamento não existe na região ou está incorreto.
Para solucionar esse erro, verifique se o sistema de arquivos do Amazon EFS referenciado na classe de armazenamento está correto e existe na região:
kubectl get storageclass `kubectl get pvc ${PVC_NAME} -o jsonpath='{.spec.storageClassName}'` -o jsonpath='{.parameters.fileSystemId}'
Observação: certifique-se de substituir PVC_NAME pelo nome do seu PersistentVolumeClaim.
Se o sistema de arquivos EFS (fileSystemId) retornado não existir na região, exclua o objeto da classe de armazenamento Kubernetes. Em seguida, crie-o novamente incluindo o ID correto do sistema de arquivos para o campo fileSystemId.
failed to provision volume with StorageClass "<STORAGE_CLASS_NAME>": rpc error: code = Internal desc = Failed to fetch File System info: Describe File System failed: WebIdentityErr: failed to retrieve credentials caused by: InvalidIdentityToken: No OpenIDConnect provider found in your account for https://oidc.eks.<REGION-CODE>.amazonaws.com/id/<OIDC ID> status code: 400, request id: <REQUEST ID>
Esse erro indica que a identidade OIDC do IAM fornecida não foi criada no IAM para o cluster do Amazon EKS.
1. Recupere o ID do provedor OIDC do seu cluster e armazene-o em uma variável:
oidc_id=$(aws eks describe-cluster --name ${CLUSTER_NAME} --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5); echo $oidc_id
Observação: certifique-se de substituir CLUSTER_NAME pelo nome do seu cluster.
2. Crie um provedor de identidade OIDC do IAM para seu cluster:
eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} –-approve
Observação: se você não puder usar o utilitário eksctl para criar o provedor OIDC do IAM, use o Console de Gerenciamento da AWS.
failed to provision volume with StorageClass "<STORAGE_CLASS_NAME>": rpc error: code = Unauthenticated desc = Access Denied. Please ensure you have the right AWS permissions: Access denied
Esse erro indica que o IRSA não tem as permissões de acesso necessárias (exemplo: elasticfilesystem:CreateAccessPoint).
1. Recupere a conta de serviço usada pela implantação do controlador EFS CSI:
kubectl get deploy -n kube-system efs-csi-controller -o=jsonpath={'.spec.template.spec.serviceAccount'}
2. Encontre o perfil do IAM usado pela conta de serviço:
kubectl get sa -n kube-system ${SERVICE_ACCOUNT} -oyaml -o=jsonpath={'.metadata.annotations.eks\.amazonaws\.com/role-arn'}
3. Baixe o documento de política do IAM no GitHub:
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
4. Crie a política do IAM se ela não existir:
aws iam create-policy --policy-name AmazonEKS_EFS_CSI_Driver_Policy --policy-document file://iam-policy-example.json
5. Anexe essa política do IAM à função do IAM que você recuperou anteriormente, anotada com a conta de serviço usada pela implantação do controlador EFS CSI.
aws iam attach-role-policy --policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/AmazonEKS_EFS_CSI_Driver_Policy --role-name ${IAM_ROLE_NAME}
Observação:
Você pode recuperar o ID da conta executando o seguinte comando:
aws sts get-caller-identity --query "Account" --output text
Você pode recuperar o perfil do IAM executando o seguinte comando:
echo $IAM_ROLE_ARN | cut -d "/" -f2
Failed to fetch File System info: Describe File System failed: WebIdentityErr: failed to retrieve credentials caused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity
Você recebe esse erro por um dos seguintes motivos:
- A permissão do IAM sts:AssumeRoleWithWebIdentity não é fornecida.
- O provedor de identidade OIDC do IAM listado no documento de relacionamento de confiança anexado ao perfil do IAM não está correto.
- A conta de serviço do Kubernetes (exemplo: system:serviceaccount:kube-system:efs-csi-controller-sa) mencionada não corresponde à usada pela implantação do controlador EFS CSI.
Para solucionar esse erro, siga estas etapas:
1. Recupere o ID do provedor OIDC do seu cluster e armazene-o em uma variável.
oidc_id=$(aws eks describe-cluster --name ${CLUSTER_NAME} --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5); echo ${oidc_id}
Certifique-se de substituir CLUSTER_NAME pelo nome do seu cluster.
2. Verifique se o ID do provedor OIDC do IAM existe na conta da AWS:
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
3. Analise o documento de relação de confiança que está anexado ao perfil do IAM:
aws iam get-role --role-name ${IAM_ROLE_NAME} --output json --query "Role.AssumeRolePolicyDocument"
Verifique se a ação sts:AssumeRoleWithWebIdentity é permitida. Além disso, confirme se o ID OIDC do IAM corresponde ao ID OIDC retornado pelo comando anterior.
Observação:
Você pode recuperar o perfil do IAM executando o seguinte comando:
echo $IAM_ROLE_ARN | cut -d "/" -f2
Informações relacionadas
- Tópicos
- Containers
- Idioma
- Português

Conteúdo relevante
- feita há 3 meses
- feita há 5 meses
- feita há 9 meses