Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Escolha o link Editar esta página no GitHub, disponível no painel direito de cada página. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Configurar o plug-in CNI da Amazon VPC para usar IRSA
O plug-in CNI do Amazon VPC para Kubernetes
-
Requer permissões do AWS Identity and Access Management (IAM). Se o cluster usar a família
IPv4
, as permissões serão especificadas na política gerenciada AmazonEKS_CNI_Policy` da AWS. Se o cluster usar a famíliaIPv6
, as permissões deverão ser adicionadas a uma política do IAM criada por você. Para obter instruções, consulte Criar uma política do IAM para clusters que usam a família IPv6. É possível anexar a política a Amazon EKS node IAM role ou a uma função do IAM separada. Para obter instruções sobre como anexar a política ao perfil do IAM do nó do Amazon EKS, consulte Perfil do IAM em nós do Amazon EKS. 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
-
Um cluster existente do Amazon EKS. Para implantar, consulte Começar a usar o Amazon EKS.
-
Um provedor existente do AWS Identity and Access Management (IAM) OpenID Connect (OIDC) para o cluster. Para determinar se você tem ou para criar uma, consulte Criar um provedor OIDC do IAM para o cluster.
Etapa 1: Criar o perfil do IAM Amazon VPC CNI plugin for Kubernetes
-
Determine a família de IP do seu cluster.
aws eks describe-cluster --name my-cluster | grep ipFamily
Veja um exemplo de saída abaixo.
"ipFamily": "ipv4"
Em vez disso, a saída pode retornar
ipv6
. -
Crie o perfil do IAM. Você pode usar
eksctl
oukubectl
e a CLI AWS para criar seu perfil do IAM.- eksctl
-
-
Crie um perfil do IAM e anexe a política do IAM a esse perfil por meio do comando que corresponde à família de IP do cluster. O comando cria e implementa uma pilha do AWS CloudFormation que cria um perfil do IAM, anexa a política que você especifica a ela e anota a conta de serviço
aws-node
do Kubernetes existente com o ARN do perfil do IAM criado.-
IPv4
Substitua
my-cluster
pelo seu próprio valor.eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKSVPCCNIRole \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --override-existing-serviceaccounts \ --approve
-
IPv6
Substitua
my-cluster
pelo seu próprio valor. Substitua111122223333
pelo ID da sua conta e substituaAmazonEKS_CNI_IPv6_Policy
pelo nome da sua políticaIPv6
. Se não tiver uma políticaIPv6
, consulte Criar uma política do IAM para clusters que usam a família IPv6 para criá-la. Para utilizarIPv6
com seu cluster, este deve atender a vários requisitos. Para ter mais informações, consulte Saiba mais sobre endereços IPv6 para clusters, Pods e serviços.eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKSVPCCNIRole \ --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --override-existing-serviceaccounts \ --approve
-
-
- kubectl e a AWS CLI
-
-
Exiba a URL do provedor OIDC do cluster.
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
Veja um exemplo de saída abaixo.
https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
Se nenhum resultado for retornado, você deverá criar um provedor OIDC do IAM do seu cluster.
-
Copie o conteúdo a seguir em um arquivo chamado
vpc-cni-trust-policy.json
. Substitua111122223333
pelo ID de sua conta eEXAMPLED539D4633E53DE1B71EXAMPLE
pelo resultado retornado na etapa anterior. Substituaregion-code
pela região da AWS em que seu cluster se encontra.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
-
Crie a função. Você pode substituir
AmazonEKSVPCCNIRole
por qualquer nome que desejar.aws iam create-role \ --role-name AmazonEKSVPCCNIRole \ --assume-role-policy-document file://"vpc-cni-trust-policy.json"
-
Anexe a política do IAM necessária à função. Execute o comando que corresponde à família de IP do seu cluster.
-
IPv4
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSVPCCNIRole
-
IPv6
Substitua
111122223333
pelo ID da sua conta eAmazonEKS_CNI_IPv6_Policy
pelo nome da sua políticaIPv6
. Se não tiver uma políticaIPv6
, consulte Criar uma política do IAM para clusters que usam a família IPv6 para criá-la. Para utilizarIPv6
com seu cluster, este deve atender a vários requisitos. Para ter mais informações, consulte Saiba mais sobre endereços IPv6 para clusters, Pods e serviços.aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSVPCCNIRole
-
-
Execute o seguinte comando para anotar a conta de serviço
aws-node
com o ARN do perfil do IAM criado por você anteriormente: Substitua osvalores de exemplo
por seus próprios valores.kubectl annotate serviceaccount \ -n kube-system aws-node \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
-
-
(Opcional) Configure o tipo de endpoint do AWS Security Token Service usado por sua conta de serviço Kubernetes. Para ter mais informações, consulte Configure o endpoint do AWS Security Token Service para uma conta de serviço.
Etapa 2: Reimplantar os do Amazon VPC CNI plugin for KubernetesPods
-
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/token
Dois 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 usando o endpoint AWS Regional, a seguinte linha 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 o perfil do IAM do nó do Amazon EKS tiver atualmente a política AmazonEKS_CNI_Policy
do IAM (IPv4
) ou uma política IPv6 anexada e você tiver criado um perfil do IAM separado, anexado a política a ele e atribuído a conta de serviço aws-node
do Kubernetes, recomendamos remover a política do perfil de nó com o comando da AWS CLI que corresponde à família de IPs do cluster. Substitua AmazonEKSNodeRole
pelo nome da sua função de nó.
-
IPv4
aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
-
IPv6
Substitua
111122223333
pelo ID da sua conta eAmazonEKS_CNI_IPv6_Policy
pelo nome da sua políticaIPv6
.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 Saiba mais sobre endereços IPv6 para clusters, Pods e serviços.
-
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