Configuración del complemento de CNI de Amazon VPC para utilizar IRSA
El Complemento CNI de Amazon VPC para Kubernetes
-
Requiere los permisos de AWS Identity and Access Management (IAM). Si el clúster utiliza la familia
IPv4
, los permisos se especifican en la política administrada AmazonEKS_CNI_Policy de AWS. Si el clúster utiliza la familiaIPv6
, los permisos se deben añadir a la política de IAM que cree; para obtener instrucciones, consulte Cree una política de IAM para clústeres que utilizan la familia IPv6. Puede asociar la política al rol de IAM del nodo de Amazon EKS o a un rol de IAM independiente. Para obtener instrucciones sobre cómo asociar la política al rol de IAM del nodo de Amazon EKS, consulte Rol de IAM de nodo de Amazon EKS. Le recomendamos que lo adjunte a un rol independiente, tal y como se detalla en este tema. -
Crea y está configurado para utilizar una cuenta de servicio de Kubernetes con el nombre
aws-node
cuando se implementa. La cuenta de servicio está vinculada a un Kubernetesclusterrole
denominadoaws-node
, al que se le asignan los permisos de Kubernetes necesarios.
nota
Los Pods correspondientes al Amazon VPC CNI plugin for Kubernetes tienen acceso a los permisos asignados al Rol de IAM de nodo de Amazon EKSrol de IAM del nodo de Amazon EKS, a menos que se bloquee el acceso a IMDS. Para obtener más información, consulte Restringir el acceso al perfil de instancias asignado al nodo de trabajo
-
Un clúster existente de Amazon EKS. Para implementar uno, consulte Introducción a Amazon EKS.
-
Un proveedor de AWS Identity and Access Management (IAM) OpenID Connect (OIDC) existente para su clúster. Para determinar si ya tiene un proveedor o para crear uno, consulte Creación de un proveedor de OIDC de IAM para su clúster.
Paso 1: Crear el rol de IAM Amazon VPC CNI plugin for Kubernetes
-
Determine la familia de IP del clúster.
aws eks describe-cluster --name my-cluster | grep ipFamily
Un ejemplo de salida sería el siguiente.
"ipFamily": "ipv4"
La salida puede devolver
ipv6
en cambio. -
Cree el rol de IAM. Puede utilizar
eksctl
okubectl
y la AWS CLI para crear el rol de IAM.- eksctl
-
-
Cree un rol de IAM y adjunte la política de IAM al rol con el comando que coincida con la familia IP del clúster. Este comando crea e implementa una pila de AWS CloudFormation que crea un rol de IAM, adjunta la política que especifica para el rol y anota la cuenta de servicio de
aws-node[.noloc]`Kubernetes
existente con el ARN del rol de IAM que se crea.-
IPv4
Reemplace
my-cluster
con su propio 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
Reemplace
my-cluster
con su propio valor. Reemplace111122223333
con su ID de cuenta y reemplaceAmazoneks_CNI_IPv6_Policy
con el nombre de su políticaIPv6
. Si no dispone de una políticaIPv6
, consulte Cree una política de IAM para clústeres que utilizan la familia IPv6 para crear uno. Para utilizarIPv6
con su clúster, debe cumplir varios requisitos. Para obtener más información, consulte Obtenga información sobre la asignación de direcciones IPv6 a clústeres, pods y servicios.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 y la AWS CLI
-
-
Vea la URL del proveedor de OIDC de su clúster.
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
Un ejemplo de salida sería el siguiente.
https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
Si no se devuelve ninguna salida, debe Creación de un proveedor de OIDC de IAM para su clústercrear un proveedor de OIDC de IAM para el clúster.
-
Copie el siguiente contenido en un archivo con el nombre
vpc-cni-trust-policy.json
. Reemplace111122223333
con su ID de cuenta yEXAMPLED539D4633E53DE1B71EXAMPLE
con el resultado que obtuvo en el paso anterior. Reemplaceregion-code
por la región de AWS en la que se encuentra el clúster.{ "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" } } } ] }
-
Cree el rol. Puede reemplazar
AmazonEKSVPCCNIRole
por el nombre que elija.aws iam create-role \ --role-name AmazonEKSVPCCNIRole \ --assume-role-policy-document file://"vpc-cni-trust-policy.json"
-
Adjunte la política de IAM necesaria al rol de IAM Ejecute el comando que coincida con la familia IP del clúster.
-
IPv4
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSVPCCNIRole
-
IPv6
Reemplace
111122223333
con su ID de cuenta yAmazoneks_CNI_IPv6_Policy
con el nombre de su políticaIPv6
. Si no dispone de una políticaIPv6
, consulte Cree una política de IAM para clústeres que utilizan la familia IPv6 para crear uno. Para utilizarIPv6
con su clúster, debe cumplir varios requisitos. Para obtener más información, consulte Obtenga información sobre la asignación de direcciones IPv6 a clústeres, pods y servicios.aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSVPCCNIRole
-
-
Ejecute el siguiente comando para anotar la cuenta de servicio del
aws-node
con el ARN del rol de IAM que creó anteriormente. Sustituya losvalores de ejemplo
por sus propios valores.kubectl annotate serviceaccount \ -n kube-system aws-node \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
-
-
(Opcional) Configure el tipo de punto de conexión de AWS Security Token Service que utiliza su cuenta de servicio de Kubernetes. Para obtener más información, consulte Configure el punto de conexión AWS Security Token Service de una cuenta de servicio.
Paso 2: Nueva implementación de Amazon VPC CNI plugin for KubernetesPods
-
Elimine y vuelva a crear todos los Pods existentes asociados a la cuenta de servicio para aplicar las variables de entorno de credenciales. La anotación no se aplica a Pods que se están ejecutando actualmente sin la anotación. El siguiente comando elimina los
aws-node[.noloc]`DaemonSet
[.noloc]Pods
existentes y los implementa con la anotación de cuenta de servicio.kubectl delete Pods -n kube-system -l k8s-app=aws-node
-
Confirme que todos los Pods se reiniciaron.
kubectl get pods -n kube-system -l k8s-app=aws-node
-
Describa uno de los Pods y verifique que existen las variables de entorno
AWS_WEB_IDENTITY_TOKEN_FILE
yAWS_ROLE_ARN
. Reemplacecpjw7
por el nombre de uno de los Pods que obtuvo en la salida del paso anterior.kubectl describe pod -n kube-system aws-node-cpjw7 | grep 'AWS_ROLE_ARN:\|AWS_WEB_IDENTITY_TOKEN_FILE:'
Un ejemplo de salida sería el siguiente.
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
Se devuelven dos conjuntos de resultados duplicados porque el Pod contiene dos contenedores. Ambos contenedores tienen los mismos valores.
Si su Pod está utilizando el punto de conexión regional de AWS, entonces la siguiente línea también se devuelve en la salida anterior.
AWS_STS_REGIONAL_ENDPOINTS=regional
Paso 3: Eliminar la política de CNI del rol de IAM del nodo
Si actualmente su Rol de IAM de nodo de Amazon EKSrol de IAM del nodo de Amazon EKS tiene adjunta la política AmazonEKS_CNI_Policy
de IAM (IPv4
) o una política Cree una política de IAM para clústeres que utilizan la familia IPv6IPv6, y ha creado un rol de IAM independiente, le ha adjuntado la política y lo ha asignado a la cuenta de servicio de aws-node[.noloc]`Kubernetes
, se recomienda eliminar la política del rol del nodo con el comando de la AWS CLI que coincida con la familia de IP de su clúster. Reemplace AmazonEKSNodeRole
con el nombre del rol de nodo.
-
IPv4
aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
-
IPv6
Reemplace
111122223333
con su ID de cuenta yAmazoneks_CNI_IPv6_Policy
con el nombre de su políticaIPv6
.aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy
Cree una política de IAM para clústeres que utilizan la familia IPv6
Si creó un clúster que utiliza la familia IPv6
y el clúster tiene configurada la versión 1.10.1
o posterior del complemento Amazon VPC CNI plugin for Kubernetes, debe crear una política de IAM que pueda asignar a un rol de IAM en un paso posterior. Si tiene un clúster existente que no configuró con la familia IPv6
cuando lo creó, deberá crear un clúster nuevo para poder utilizar IPv6
. Para obtener más información acerca del uso de IPv6
con su clúster, consulte Obtenga información sobre la asignación de direcciones IPv6 a clústeres, pods y servicios.
-
Copie el siguiente texto y guárdelo en un archivo llamado
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/*" ] } ] }
-
Cree la política de IAM.
aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json