Para configurar Pods para usar uma conta de serviço do Kubernetes
Se o Pod precisar acessar os serviços da AWS, você deverá configurá-lo para usar uma conta de serviço Kubernetes. A conta de serviço deve estar associada a um perfil do AWS Identity and Access Management (IAM) que tenha permissões para acessar os serviços da AWS.
-
Um cluster existente. Se não tiver um, você poderá criá-lo usando um dos guias em Começar a usar o Amazon EKS.
-
Um provedor de OpenID Connect (OIDC) do IAM existente para o cluster. Para saber se você já tem um ou como criar um, consulte Criar um provedor OIDC do IAM para o cluster.
-
Um serviço Kubernetes existente que é associado a um perfil do IAM. A conta de serviço deve ser anotada com o nome do recurso da Amazon (ARN) do perfil do IAM. O perfil deve ter uma política do IAM associada que contenha as permissões que você deseja que o Pods tenha para usar os serviços do AWS. Para obter mais informações sobre como criar a conta de serviço e como configurá-la, consulte Atribuir perfis do IAM às contas de serviço do Kubernetes.
-
Versão
2.12.3
ou posterior ou versão1.27.160
ou posterior da AWS Command Line Interface (AWS CLI) instalada e configurada no seu dispositivo ou no AWS CloudShell. Para verificar sua versão atual, useaws --version | cut -d / -f2 | cut -d ' ' -f1
. Os gerenciadores de pacotes, comoyum
,apt-get
ou Homebrew para macOS, geralmente estão várias versões atrás da versão mais recente da AWS CLI. Para instalar a versão mais recente, consulte Instalar e Configuração rápida com aws configure, no Guia do usuário da AWS Command Line Interface. A versão da AWS CLI instalada no AWS CloudShell também pode estar várias versões atrás da versão mais recente. Para atualizá-lo, consulte Instalar a AWS CLI no seu diretório pessoal, no Guia do usuário do AWS CloudShell. -
A ferramenta da linha de comando
kubectl
está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser idêntica ou até uma versão secundária anterior ou posterior à versão Kubernetes do seu cluster. Por exemplo, se a versão do cluster for a1.29
, você poderá usar okubectl
versão1.28
,1.29
ou1.30
com ele. Para instalar ou atualizar okubectl
, consulte Configuração do kubectl e eksctl. -
Um arquivo
kubectl
config
existente que contém a configuração do seu cluster. Para criar um arquivokubectl
config
, consulte Conecte o kubectl a um cluster EKS criando um arquivo kubeconfig.-
Use o comando a seguir para criar um manifesto de implantação com o qual é possível implantar um Pod para confirmar a configuração. Substitua os
valores de exemplo
por seus próprios valores.cat >my-deployment.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: serviceAccountName: my-service-account containers: - name: my-app image: public.ecr.aws/nginx/nginx:X.XX EOF
-
Implante o manifesto no seu cluster.
kubectl apply -f my-deployment.yaml
-
Confirme se as variáveis de ambiente necessárias existem para seu Pod.
-
Visualize os Pods que foram implantados na implantação da etapa anterior.
kubectl get pods | grep my-app
Veja um exemplo de saída abaixo.
my-app-6f4dfff6cb-76cv9 1/1 Running 0 3m28s
-
Visualize o ARN do perfil do IAM que o Pod está usando.
kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_ROLE_ARN:
Veja um exemplo de saída abaixo.
AWS_ROLE_ARN: arn:aws:iam::111122223333:role/my-role
O ARN do perfil deve corresponder ao ARN do perfil com o qual você anotou a conta de serviço existente. Para saber mais sobre como fazer anotações na conta de serviço, consulte Atribuir perfis do IAM às contas de serviço do Kubernetes.
-
Confirme que o Pod tenha um arquivo de token de identidade da Web montado.
kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_WEB_IDENTITY_TOKEN_FILE:
Veja um exemplo de saída abaixo.
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
O
kubelet
solicita e armazena o token em nome do Pod. Por padrão, okubelet
atualiza o token se ele for mais antigo do que 80% do seu tempo de vida total, ou se o token tiver mais de 24 horas. É possível modificar a duração da expiração de qualquer conta, exceto a conta de serviço padrão, usando as configurações na especificação do Pod. Para obter mais informações, consulte Service Account Token Volume Projection(Projeção do volume de tokens da conta de serviço) na documentação do Kubernetes. O Webhook de identidade do pod do Amazon EKS
no cluster observa os Pods que usam uma conta de serviço com a seguinte anotação: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-role
O webhook aplica as variáveis de ambiente anteriores a esses Pods. Seu cluster não precisa usar o webhook para configurar as variáveis de ambiente e montagens de arquivos do token. É possível configurar manualmente o Pods para ter essas variáveis de ambiente. As Usar o IRSA com o AWS SDKversões compatíveis do SDK da AWS procuram essas variáveis de ambiente primeiro no fornecedor da cadeia de credenciais. As credenciais da função são usadas para os Pods que atendam a esses critérios.
-
-
Confirme se o seu Pods pode interagir com os serviços da AWS usando as permissões que você atribuiu na política do IAM anexada à seu perfil.
nota
Quando um Pod usa as credenciais do AWS de um perfil do IAM associado a uma conta de serviço, a AWS CLI ou outros SDKs nos contêineres desse Pod usam as credenciais fornecidas por esse perfil. Se você não restringir o acesso às credenciais fornecidas à Perfil do IAM em nós do Amazon EKSperfil do IAM do nó do Amazon EKS, o Pod ainda terá acesso a essas credenciais. Para obter mais informações, consulte Restringir o acesso ao perfil da instância atribuído ao nó de processamento
. Se os seus Pods não conseguirem interagir com os serviços conforme o esperado, conclua as etapas a seguir para confirmar se tudo está configurado corretamente.
-
Confirme que seus Pods usam uma versão do SDK AWS da que ofereça suporte a assumir um perfil do IAM por meio de um arquivo de token de identidade da Web OpenID Connect. Para ter mais informações, consulte Usar o IRSA com o AWS SDK.
-
Confirme se a implantação está usando a conta de serviço.
kubectl describe deployment my-app | grep "Service Account"
Veja um exemplo de saída abaixo.
Service Account: my-service-account
-
Se o seu Pods ainda não conseguir acessar os serviços, revise as etapas do Etapa 3: confirmar a configuraçãodescritas em Atribuir perfis do IAM às contas de serviço do KubernetesAssign IAM roles to Kubernetes service accounts para confirmar que seu perfil e conta de serviço estão configuradas corretamente.
-
-