Configuração do Amazon VPC CNI plugin for Kubernetes a fim de usar perfis do IAM para contas de serviço (IRSA)
O Amazon VPC CNI plugin for Kubernetes
-
Ele exige permissões AWS Identity and Access Management (IAM). Se o cluster usa a família IPv4, as permissões são especificadas na política
AmazonEKS_CNI_Policy
gerenciada pela AWS. Se o seu cluster utiliza a família IPv6, as permissões devem ser adicionadas a um política do IAM que você mesmo cria.É possível anexar a política a Amazon EKS node IAM role ou a uma função do IAM separada. Recomendamos atribuir a uma função separada, conforme detalhado neste tópico. -
Cria e está configurado para usar uma conta de serviço Kubernetes chamada
aws-node
quando ele for implantado. A conta de serviço está vinculada a umclusterrole
do Kubernetes chamadoaws-node
, ao qual são atribuídas as permissões necessárias do Kubernetes.
nota
Os Pods para o Amazon VPC CNI plugin for Kubernetes têm acesso às permissões atribuídas a Amazon EKS node IAM role, a menos que você bloqueie o acesso ao IMDS. Para obter mais informações, consulte Restringir o acesso ao perfil da instância atribuído ao nó de processamento
Pré-requisitos
-
Um cluster existente do Amazon EKS. Para implantar, consulte Conceitos básicos do Amazon EKS.
-
Um provedor OpenID Connect (OIDC) do AWS Identity and Access Management (IAM) existente para o cluster. Para determinar se você tem ou para criar uma, consulte Criação de um provedor OIDC do IAM para seu cluster.
Etapa 1: Criar o perfil do IAM Amazon VPC CNI plugin for Kubernetes
Como criar o perfil do IAM
-
Determine a família de IP do seu cluster.
aws eks describe-cluster --name
my-cluster
| grep ipFamilyVeja um exemplo de saída abaixo.
"ipFamily": "ipv
4
"Em vez disso, a saída pode retornar
ipv6
. -
Crie o perfil do IAM. Você pode usar
eksctl
oukubectl
e a AWS CLI para criar seu perfil do IAM. (Opcional) Configure o tipo de endpoint do AWS Security Token Service utilizado pela sua conta de serviço Kubernetes. Para ter mais informações, consulte Configuração do endpoint do AWS Security Token Service para uma conta de serviço.
Etapa 2: Reimplantar os Pods do Amazon VPC CNI plugin for Kubernetes
-
Exclua e recrie os Pods existentes associados à conta de serviço para aplicar as variáveis de ambiente de credenciais. A anotação não é aplicada a Pods que estejam sendo executados sem a anotação. O comando a seguir exclui os
aws-node
DaemonSet Pods existentes e os implanta com a anotação da conta de serviço.kubectl delete Pods -n kube-system -l k8s-app=aws-node
-
Confirme se todos os Pods foram reiniciados.
kubectl get pods -n kube-system -l k8s-app=aws-node
-
Descreva um dos Pods e verifique se as variáveis de ambiente
AWS_WEB_IDENTITY_TOKEN_FILE
eAWS_ROLE_ARN
existem. Substituacpjw7
pelo nome de um dos Pods retornados no resultado da etapa anterior.kubectl describe pod -n kube-system aws-node-
cpjw7
| grep 'AWS_ROLE_ARN:\|AWS_WEB_IDENTITY_TOKEN_FILE:'Veja um exemplo de saída abaixo.
AWS_ROLE_ARN: arn:aws:iam::
111122223333
:role/AmazonEKSVPCCNIRole
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_ROLE_ARN: arn:aws:iam::111122223333
:role/AmazonEKSVPCCNIRole
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/tokenDois conjuntos de resultados duplicados são retornados porque o Pod contém dois contêineres. Os dois contêineres têm os mesmos valores.
Se o seu Pod estiver utilizando o endpoint da Região da AWS, a linha a seguir também será retornada na saída anterior.
AWS_STS_REGIONAL_ENDPOINTS=regional
Etapa 3: Remover a política CNI do perfil do IAM do nó
Se a função do IAM de nó do Amazon EKS atualmente tem a AmazonEKS_CNI_Policy
política do IAM (IPv4
) ou uma políticaIPv6anexada a ela, e você criou uma função do IAM separada, anexou a política a ela e a atribuiu à conta de serviço aws-node
, então recomendamos que você remova a política da sua função de nó com o comando Kubernetes correspondente à AWS CLI família de IP do seu cluster. Substitua
pelo nome da função do nó.AmazonEKSNodeRole
-
IPv4
aws iam detach-role-policy --role-name
AmazonEKSNodeRole
--policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy -
IPv6
Substitua
pelo ID da conta e111122223333
pelo nome da política deAmazonEKS_CNI_IPv6_Policy
IPv6
.aws iam detach-role-policy --role-name
AmazonEKSNodeRole
--policy-arn arn:aws:iam::111122223333
:policy/AmazonEKS_CNI_IPv6_Policy
Criar uma política do IAM para clusters que usam a família IPv6
Se você tiver criado um cluster que usa a família IPv6
e esse cluster tiver a versão 1.10.1
ou superior do complemento Amazon VPC CNI plugin for Kubernetes configurado, será necessário criar uma política do IAM que você possa atribuir a um perfil do IAM. Se você tiver um cluster que não foi configurado com a família IPv6
no momento da criação, será necessário criar um novo cluster para usar IPv6
. Para obter mais informações sobre como usar o IPv6
com o seu cluster, consulte Endereços IPv6 para clusters, Pods e services.
-
Copie o texto a seguir e salve-o em um arquivo chamado
.vpc-cni-ipv6-policy
.json{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] }
Crie a política do IAM.
aws iam create-policy --policy-name
AmazonEKS_CNI_IPv6_Policy
--policy-document file://vpc-cni-ipv6-policy.json