Ayude a mejorar esta página
Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.
Configuración del complemento de CNI de Amazon VPC para utilizar IRSA
El complemento CNI de Amazon VPC para Kubernetes
nota
El complemento CNI de Amazon VPC también es compatible con Amazon EKS Pod Identities. Para obtener más información, consulte Asignación de un rol de IAM a una cuenta de servicio de Kubernetes.
El complemento:
-
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 de AWSAmazonEKS_CNI_Policy. Si el clúster utiliza la familiaIPv6, se deben agregar los permisos a una política de IAM que crea. 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-nodecuando se implementa. La cuenta de servicio está vinculada a unclusterrolede Kubernetes denominadoaws-node, al que se le asignan los permisos de Kubernetes necesarios.
nota
Los pods correspondientes al complemento CNI de Amazon VPC para Kubernetes tienen acceso a los permisos asignados al rol 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
-
Requiere un clúster existente de Amazon EKS. Para implementar uno, consulte Introducción a Amazon EKS.
-
Requiere un proveedor existente de OpenID Connect (OIDC) de AWS Identity and Access Management (IAM) para su clúster. Para determinar si ya tiene un proveedor o para crear uno, consulte Crear un proveedor de OIDC de IAM para su clúster.
Paso 1: creación del rol de IAM del complemento CNI de Amazon VPC para Kubernetes
-
Determine la familia de IP del clúster.
aws eks describe-cluster --name my-cluster | grep ipFamilyUn ejemplo de salida sería el siguiente.
"ipFamily": "ipv4"La salida puede devolver
ipv6en cambio. -
Creación del rol de IAM. Puede utilizar
eksctlokubectly 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 Kubernetes de
aws-nodeexistente con el ARN del rol de IAM que se crea.-
IPv4Reemplace
my-clustercon 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 -
IPv6Reemplace
my-clustercon su propio valor. Reemplace111122223333con su ID de cuenta y reemplaceAmazoneks_CNI_IPv6_Policycon 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 utilizarIPv6con su clúster, debe cumplir varios requisitos. Para obtener más información, consulte 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
-
-
Visualización de la URL del proveedor de OIDC de su clúster.
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output textUn ejemplo de salida sería el siguiente.
https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLESi no se devuelve ninguna salida, debe crear 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. Reemplace111122223333con su ID de cuenta yEXAMPLED539D4633E53DE1B71EXAMPLEcon el resultado que obtuvo en el paso anterior. Reemplaceregion-codepor 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" } } } ] } -
Creación del rol. Puede reemplazar
AmazonEKSVPCCNIRolepor 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.
-
IPv4aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSVPCCNIRole -
IPv6Reemplace
111122223333con su ID de cuenta yAmazoneks_CNI_IPv6_Policycon 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 utilizarIPv6con su clúster, debe cumplir varios requisitos. Para obtener más información, consulte 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-nodecon el ARN del rol de IAM que creó anteriormente. Sustituya losvalores de ejemplopor 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 pods del complemento CNI de Amazon VPC para Kubernetes
-
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 los pods que se están ejecutando actualmente sin la anotación. El siguiente comando elimina los pods de DaemonSet de
aws-nodeexistentes 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 existan las variables de entorno
AWS_WEB_IDENTITY_TOKEN_FILEyAWS_ROLE_ARN. Reemplacecpjw7por 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/tokenSe 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, 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 el rol de IAM del nodo de Amazon EKS tiene asociada la política de AmazonEKS_CNI_Policy IAM (IPv4) o una política IPv6, y ha creado un rol de IAM independiente, le ha asociado la política y lo ha asignado a la cuenta de servicio de Kubernetes de aws-node, se recomienda eliminar la política del rol del nodo con el comando de la AWS CLI que coincida con la familia de IP del clúster. Reemplace AmazonEKSNodeRole con el nombre del rol de nodo.
-
IPv4aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy -
IPv6Reemplace
111122223333con su ID de cuenta yAmazoneks_CNI_IPv6_Policycon 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 CNI de Amazon VPC para 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 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