Trabajar con el complemento Amazon VPC CNI plugin for Kubernetes de Amazon EKS
El complemento Amazon VPC CNI plugin for Kubernetes se implementa en cada nodo de Amazon EC2 del clúster de Amazon EKS. El complemento crea interfaces de red elástica y las adjunta a los nodos de Amazon EC2. El complemento también asigna una dirección IPv4
o IPv6
privada de la VPC a cada Pod y servicio.
Se implementa una versión del complemento con cada nodo de Fargate del clúster, pero no se actualiza en los nodos de Fargate. Hay otros complementos de CNI compatibles disponibles para su uso en los clústeres de Amazon EKS, pero este es el único complemento de CNI compatible con Amazon EKS.
En la siguiente tabla se muestra la versión más reciente disponible del tipo de complemento de Amazon EKS para cada versión de Kubernetes.
Versión de Kubernetes | 1.29 |
1.28 |
1.27 |
1.26 |
1.25 |
1.24 |
1.23 |
---|---|---|---|---|---|---|---|
Tipo de versión CNI de VPC de Amazon EKS | v1.17.1-eksbuild.1 |
v1.17.1-eksbuild.1 |
v1.17.1-eksbuild.1 |
v1.17.1-eksbuild.1 |
v1.17.1-eksbuild.1 |
v1.17.1-eksbuild.1 |
v1.17.1-eksbuild.1 |
importante
Si administra este complemento, es posible que las versiones de la tabla no sean las mismas que las versiones autoadministradas disponibles. Para obtener más información acerca de la actualización de complementos autoadministrados, consulte Actualizar el complemento autoadministrado.
Requisitos previos
-
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 el 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.
-
Un rol de IAM con la política de IAM AmazonEKS_CNI_Policy (si el clúster utiliza la familia
IPv4
) o una política de IPv6 (si el clúster utiliza la familiaIPv6
) adjuntas. Para obtener más información, consulte Configuración de Amazon VPC CNI plugin for Kubernetes para utilizar los roles de IAM en las cuentas de servicio (IRSA). -
Si utiliza la versión
1.7.0
o posterior del Amazon VPC CNI plugin for Kubernetes y utiliza políticas de seguridad del Pod personalizadas, consulte Eliminar la política de seguridad predeterminada del Pod de Amazon EKSPolítica de seguridad del pod. -
importante
Las versiones
v1.16.0
av1.16.1
de Amazon VPC CNI plugin for Kubernetes eliminaron la compatibilidad con versiones1.23
y anteriores de Kubernetes. La versiónv1.16.2
de VPC CNI restaura la compatibilidad con las versiones1.23
y anteriores de Kubernetes y las especificacionesv0.4.0
de CNI.Las versiones
v1.16.0
av1.16.1
de Amazon VPC CNI plugin for Kubernetes implementan la versiónv1.0.0
de la especificación CNI. La especificaciónv1.0.0
de CNI es compatibles con los clústeres de EKS que ejecutan las versionesv1.24
o posteriores de Kubernetes. Las versionesv1.16.0
av1.16.1
de VPC CNI y la especificaciónv1.0.0
de CNI no son compatibles en las versionesv1.23
o anteriores de Kubernetes. Para obtener más información sobre la especificaciónv1.0.0
de CNI, consulte Especificación de Container Network Interface (CNI)en
Consideraciones
-
Las versiones se especifican como
major-version.minor-version.patch-version-eksbuild.build-number
. -
Comprobar la compatibilidad de versiones para cada característica
Algunas características de cada versión de Amazon VPC CNI plugin for Kubernetes requieren determinadas versiones de Kubernetes. Cuando se utilizan distintas funciones de Amazon EKS, si se requiere una versión específica del complemento, se indica en la documentación de características. A menos que tenga un motivo específico para ejecutar una versión anterior, le recomendamos elegir la versión más reciente.
Creación del complemento de Amazon EKS
Cree el tipo de Amazon EKS del complemento.
-
Consulte qué versión del complemento está instalada en el clúster.
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Un ejemplo de salida sería el siguiente.
v1.12.6-eksbuild.2
-
Consulte qué tipo del complemento está instalado en el clúster. Según la herramienta con la que haya creado el clúster, es posible que actualmente no tenga instalado el tipo de complemento Amazon EKS en el clúster. Reemplace
my-cluster
por el nombre de su clúster.$
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output textSi se devuelve el número de versión, tiene el tipo de complemento de Amazon EKS instalado en el clúster y no es necesario que complete los pasos restantes del procedimiento. Si se devuelve un error, no tiene el tipo de complemento de Amazon EKS instalado en el clúster. Complete los pasos restantes de este procedimiento para instalarlo.
-
Guarde la configuración del complemento instalado actualmente.
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
Cree el complemento mediante el AWS CLI. Si desea utilizar AWS Management Console o
eksctl
para crear el complemento, consulteCreación de un complemento y especifiquevpc-cni
para el nombre del complemento. Copie el comando que sigue en su dispositivo. Realice las siguientes modificaciones en el comando según sea necesario y, a continuación, ejecute el comando modificado.-
Reemplace
por el nombre del clúster.my-cluster
-
Reemplace
por la versión más reciente que aparece en la tabla de versiones más recientes de la versión de su clúster.v1.17.1-eksbuild.1
-
Reemplace
111122223333
por el ID de su cuenta yAmazonEKSVPCCNIRole
por el nombre del rol de IAM existente que creó. Para especificar un rol, es necesario disponer de un proveedor de IAM OpenID Connect (OIDC) para el clúster. Para determinar si ya tiene uno para su clúster o si debe crearlo, consulte Creación de un proveedor de OIDC de IAM para su clúster.
aws eks create-addon --cluster-name
my-cluster
--addon-name vpc-cni --addon-version
\ --service-account-role-arn arn:aws:iam::v1.17.1-eksbuild.1
111122223333
:role/AmazonEKSVPCCNIRole
Si ha aplicado una configuración personalizada al complemento actual que entra en conflicto con la configuración predeterminada del complemento de Amazon EKS, es posible que se produzca un error en la creación. Si se produce un error en la creación, recibe un error que puede serle de utilidad para resolver el problema. Como alternativa, puede añadir
--resolve-conflicts OVERWRITE
al comando anterior. Esto permite que el complemento sobrescriba cualquier configuración personalizada existente. Una vez que haya creado el complemento, puede actualizarlo con la configuración personalizada. -
-
Confirme que la versión más reciente del complemento de la Kubernetes versión de su clúster se haya agregado al clúster. Reemplace
por el nombre del clúster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output textEs posible que la creación del complemento tarde varios segundos en completarse.
Un ejemplo de salida sería el siguiente.
v1.17.1-eksbuild.1
-
Si ha realizado ajustes personalizados en el complemento original, antes de crear el complemento de Amazon EKS, utilice la configuración que guardó en el paso anterior para actualizar el complemento de Amazon EKS con su configuración personalizada.
(Opcional) Instale el
cni-metrics-helper
en su clúster. Extrae información de la interfaz de red elástica y la dirección IP, agrega métricas en todo el clúster y publica las métricas en Amazon CloudWatch. Para obtener más información, consulte cni-metrics-helperen GitHub.
Actualizar el complemento de Amazon EKS
Actualice el tipo de Amazon EKS del complemento. Si no ha agregado el tipo Amazon EKS del complemento al clúster, agréguelo o consulte Actualizar el complemento autoadministrado, en lugar de completar este procedimiento.
-
Consulte qué versión del complemento está instalada en el clúster. Reemplace
por el nombre del clúster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query "addon.addonVersion" --output textUn ejemplo de salida sería el siguiente.
v1.12.6-eksbuild.2
Si la versión devuelta es la misma que la versión Kubernetes del clúster en la tabla de versiones más recientes, significa que ya tiene la última versión instalada en el clúster y no necesita completar el resto de este procedimiento. Si recibe un error, en lugar de un número de versión en la salida, significa que no tiene el tipo de versión de Amazon EKS en el clúster. Debe crear el complemento antes de poder actualizarlo mediante este procedimiento.
-
Guarde la configuración del complemento instalado actualmente.
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
Actualice el complemento con la AWS CLI. Si desea utilizar AWS Management Console o
eksctl
para actualizar el complemento, consulte Actualización de un complemento. Copie el comando que sigue en su dispositivo. Realice las siguientes modificaciones en el comando según sea necesario y, a continuación, ejecute el comando modificado.-
Reemplace
por el nombre del clúster.my-cluster
-
Reemplace
por la versión más reciente que aparece en la tabla de versiones más recientes de la versión de su clúster.v1.17.1-eksbuild.1
-
Reemplace
111122223333
por el ID de su cuenta yAmazonEKSVPCCNIRole
por el nombre del rol de IAM existente que creó. Para especificar un rol, es necesario disponer de un proveedor de IAM OpenID Connect (OIDC) para el clúster. Para determinar si ya tiene uno para su clúster o si debe crearlo, consulte Creación de un proveedor de OIDC de IAM para su clúster. -
La opción
CONSERVAR
de--resolve-conflicts
conserva los valores de configuración existentes del complemento. Si ha establecido valores personalizados para la configuración del complemento y no utiliza esta opción, Amazon EKS sobrescribe los valores con los valores predeterminados. Si utiliza esta opción, le recomendamos que pruebe cualquier cambio de campo y valor en un clúster que no sea de producción antes de actualizar el complemento del clúster de producción. Si cambia este valor aOVERWRITE
, todas las configuraciones cambiarán a los valores predeterminados de Amazon EKS. Si ha establecido valores personalizados para cualquier configuración, es posible que se sobrescriban con los valores predeterminados de Amazon EKS. Si cambia este valor anone
, Amazon EKS no cambia el valor de ninguna configuración, pero la actualización podría fallar. Si se produce un error en la actualización, recibe un mensaje de error que lo ayuda a resolver el conflicto. -
Si no va a actualizar un ajuste de configuración, elimine
--configuration-values '{
del comando. Si va a actualizar una configuración, sustituya"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
}'“env”: {“AWS_VPC_K8S_CNI_EXTERNALSNAT”:“true”}
por la configuración que desee establecer. En este ejemplo, la variable de entornoAWS_VPC_K8S_CNI_EXTERNALSNAT
se establece entrue
. El valor que especifique debe ser válido para el esquema de configuración. Si no conoce el esquema de configuración, ejecuteaws eks describe-addon-configuration --addon-name vpc-cni --addon-version
y reemplacev1.17.1-eksbuild.1
v1.17.1-eksbuild.1
con el número de versión del complemento cuya configuración desea ver. El esquema se devuelve en la salida. Si ya tiene alguna configuración personalizada, quiere eliminarla toda y volver a establecer los valores de todos los ajustes en los valores predeterminados de Amazon EKS, elimine
del comando para que quede vacío“env”:{“AWS_VPC_K8S_CNI_EXTERNALSNAT”:“true”}
. Para obtener una explicación de cada configuración, consulte las Variables de configuración de CNI{}
en GitHub. aws eks update-addon --cluster-name
my-cluster
--addon-name vpc-cni --addon-versionv1.17.1-eksbuild.1
\ --service-account-role-arn arn:aws:iam::111122223333
:role/AmazonEKSVPCCNIRole
\ --resolve-conflictsPRESERVE
--configuration-values '{"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
}'La actualización puede tardar varios segundos en completarse.
-
-
Confirme que la versión del complemento se ha actualizado. Reemplace
por el nombre del clúster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cniLa actualización puede tardar varios segundos en completarse.
Un ejemplo de salida sería el siguiente.
{ "addon": { "addonName": "vpc-cni", "clusterName": "
my-cluster
", "status": "ACTIVE", "addonVersion": "v1.17.1-eksbuild.1
", "health": { "issues": [] }, "addonArn": "arn:aws:eks:region
:111122223333
:addon/my-cluster
/vpc-cni/74c33d2f-b4dc-8718-56e7-9fdfa65d14a9
", "createdAt": "2023-04-12T18:25:19.319000+00:00", "modifiedAt": "2023-04-12T18:40:28.683000+00:00", "serviceAccountRoleArn": "arn:aws:iam::111122223333
:role/AmazonEKSVPCCNIRole
", "tags": {}, "configurationValues": "{\"env\":{\"AWS_VPC_K8S_CNI_EXTERNALSNAT\":\"true\"}
}" } }
Actualizar el complemento autoadministrado
importante
Recomendamos agregar el tipo de complemento de Amazon EKS al clúster en lugar de utilizar el tipo de complemento autoadministrado. Si no está familiarizado con la diferencia entre los tipos, consulte Complementos de Amazon EKS. Para obtener más información acerca de cómo agregar un complemento de Amazon EKS al clúster, consulte Creación de un complemento. Si no puede usar el complemento de Amazon EKS, le recomendamos que envíe una pregunta sobre los motivos por los que no puede hacerlo al repositorio de GitHub de la hoja de ruta de contenedores
-
Confirme que no tiene instalado en el clúster el tipo Amazon EKS del complemento autoadministrado. Reemplace
my-cluster
por el nombre de su clúster.aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output textSi se devuelve un error, no tiene el tipo de complemento de Amazon EKS instalado en el clúster. Para autoadministrar el complemento, complete los pasos restantes de este procedimiento para actualizar el complemento. Si se devuelve el número de versión, tiene el tipo de complemento de Amazon EKS instalado en el clúster. Para actualizarlo, siga el procedimiento que aparece en Actualización de un complemento, en lugar de este procedimiento. Si no está familiarizado con las diferencias entre los tipos de complementos, consulte Complementos de Amazon EKS.
-
Consulte qué versión de la imagen del contenedor está instalada actualmente en el clúster.
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Un ejemplo de salida sería el siguiente.
v1.12.6-eksbuild.2
Es posible que su resultado no incluya el número de compilación.
-
Haga una copia de seguridad de la configuración actual para poder aplicar la misma configuración una vez que haya actualizado la versión.
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
Consulte
releases
en GitHub para revisar las versiones disponibles y familiarizarse con los cambios efectuados en la versión a la que desea actualizar. Tenga en cuenta que le recomendamos que actualice a la misma versiónmajor
.minor
.patch
que aparece en la tabla de versiones más recientes disponibles, incluso si hay versiones posteriores disponibles en GitHub. Las versiones de compilación que aparecen en la tabla no se especifican en las versiones autoadministradas que aparecen en GitHub. Actualice su versión al completar las tareas de una de las siguientes opciones:-
Si no tiene ninguna configuración personalizada para el complemento, ejecute el comando que aparece debajo del encabezado
To apply this release:
en GitHub para la versióna la que desea actualizar. -
Si tiene una configuración personalizada, descargue el archivo de manifiesto con el siguiente comando. Cambie
https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.17.1/config/master/aws-k8s-cni.yaml
por la URL de la versión de GitHub a la que está actualizando.curl -O
https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.17.1/config/master/aws-k8s-cni.yaml
Si es necesario, modifique el archivo de manifiesto con la configuración personalizada de la copia de seguridad que hizo en un paso anterior y, a continuación, aplique el archivo modificado al clúster. Si los nodos no tienen acceso a los repositorios privados de Amazon ECR de Amazon EKS de donde se extraen las imágenes (consulte las líneas que comienzan con
image:
en el manifiesto), tendrá que descargar las imágenes, copiarlas en su propio repositorio y modificar el manifiesto para que extraiga las imágenes de su repositorio. Para obtener más información, consulte Copiar una imagen de contenedor de un repositorio en otro repositorio.kubectl apply -f aws-k8s-cni.yaml
-
-
Confirme que la nueva versión ya esté instalada en el clúster.
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Un ejemplo de salida sería el siguiente.
v1.17.1
(Opcional) Instale el
cni-metrics-helper
en su clúster. Extrae información de la interfaz de red elástica y la dirección IP, agrega métricas en todo el clúster y publica las métricas en Amazon CloudWatch. Para obtener más información, consulte cni-metrics-helperen GitHub.