Saltar al contenido

¿Cómo elijo subredes de direcciones IP específicas para los pods de mi clúster de Amazon EKS?

6 minutos de lectura
0

Quiero usar subredes o intervalos de direcciones IP personalizados para mis pods en Amazon Elastic Kubernetes Service (Amazon EKS).

Resolución

Para asignar direcciones IP de pod desde subredes distintas a las de los nodos de trabajo, utiliza redes personalizadas.

Activación de redes personalizadas

Antes de configurar las redes personalizadas, revisa los siguientes comportamientos predeterminados:

  • Los nodos y los pods usan direcciones IP de los mismos intervalos de CIDR en tu clúster de Amazon Virtual Private Cloud (VPC). Para agregar más intervalos de CIDR de direcciones IP a tu Amazon VPC, consulta ¿Cómo uso varios intervalos de CIDR con Amazon EKS?
  • Amazon EKS asigna las direcciones IP de los pods desde la subred del nodo de trabajo.
  • No puedes controlar qué subred asigna direcciones IP a los pods.
  • Cuando no hay direcciones IP disponibles en la subred de un nodo, los nuevos pods no se inician, incluso cuando otras subredes tienen direcciones disponibles.
  • Todo el tráfico de los pods a las direcciones IP fuera del bloque de CIDR del clúster de Amazon EKS de Amazon VPC utiliza la interfaz principal y la dirección IP del nodo. El tráfico utiliza grupos de seguridad y una subred de la interfaz de red elástica principal del nodo. No usa la subred ni los grupos de seguridad que definiste en los objetos ENIConfig.
  • Si usas grupos de seguridad para los pods, los pods usarán el grupo de seguridad que especificaste en tu SecurityGroupPolicy. Los pods no usan el grupo de seguridad que especificaste en los objetos ENIConfig.
    Nota: Para obtener más información sobre el enrutamiento del tráfico de los pods, consulta Habilitación del acceso a Internet saliente para pods.

Activa las redes personalizadas en el complemento Container Network Interface de Amazon VPC (CNI de Amazon VPC) para Kubernetes. Utiliza la versión del complemento CNI de Amazon VPC que coincida con tu versión de Kubernetes. Para acceder al complemento, consulta amazon-vpc-cni-k8s en el sitio web de GitHub.

Ejecuta el siguiente comando para verificar la versión en tu clúster de Amazon VPC para el clúster de Amazon EKS:

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

Si no tienes la versión correcta del complemento, actualiza la CNI de Amazon VPC.

Ejecuta el siguiente comando para activar las redes personalizadas:

kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true

CNI de VPC v1.18 y las versiones posteriores admiten la detección automática de subredes y la asignación dinámica de direcciones en función del uso de las direcciones IP en las subredes disponibles. Para obtener más información, consulta Amazon VPC CNI introduces enhanced subnet discovery (CNI de Amazon VPC presenta una detección de subredes mejorada).

También puedes usar el complemento CNI de Amazon VPC para hacer lo siguiente:

  • Especificar las subredes de Amazon VPC que quieres usar en tus pods.
  • Definir grupos de seguridad independientes para tus pods.

Creación de objetos ENIConfig

Antes de crear los objetos ENIConfig, revisa los siguientes comportamientos predeterminados:

  • Cada objeto ENIConfig define una subred y una lista de grupos de seguridad.
  • Solo puedes asignar un objeto ENIConfig a cada nodo. Sin embargo, puedes asignar el mismo objeto ENIConfig a varios nodos.
  • Cuando asignas un objeto ENIConfig a un nodo, los pods programados para el nodo utilizan la subred y los grupos de seguridad del objeto ENIConfig.
  • El nombre de tu objeto ENIConfig debe ser el nombre de tu zona de disponibilidad.

Ejecuta el siguiente comando para crear los objetos ENIConfig:

cat EOF | kubectl apply -f -  
apiVersion: crd.k8s.amazonaws.com/v1alpha1  
kind: ENIConfig  
metadata:  
  name: example-availability-zone  
spec:  
  securityGroups:   
    - example-security-group-id  
  subnet: example-subnet-id  
EOF

Nota: Sustituye example-availability-zone por tu zona de disponibilidad. Sustituye example-security-group-id por el ID de tu grupo de seguridad. Sustituye example-subnet-id por el ID de tu subred.

Asignación de objetos ENIConfig

Para asignar un objeto ENIConfig a una zona de disponibilidad, asigna automáticamente objetos ENIConfig a tus nodos. Para asociar varios objetos ENIConfig a la misma zona de disponibilidad, asigna manualmente objetos ENIConfig a tus nodos.

Asignación automática de objetos ENIConfig

Ejecuta el siguiente comando:

kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone

Asociación manual de objetos ENIConfig

Importante: Asegúrate de que el nodo y la subred del objeto ENIConfig asociado estén en la misma zona de disponibilidad.

Ejecuta el siguiente comando:

kubectl annotate node example-node-name k8s.amazonaws.com/eniConfig=example-availability-zone

Nota: Sustituye example-node-name por el identificador completo de tu nodo. Sustituye example-availability-zone por el nombre de la zona de disponibilidad que usaste al crear el objeto ENIConfig.

Inicio de nodos nuevos

Para asignar interfaces de red secundarias y direcciones IP desde las subredes ENIConfig, debes iniciar nuevos nodos. Los nodos existentes seguirán utilizando su configuración de red original hasta que los sustituyas.

Sigue estos pasos:

  1. Comprueba si utilizas un ID de imagen de máquina de Amazon (AMI) personalizado con tu grupo de nodos autoadministrado.
  2. Si usas un ID de AMI personalizado, determina el número máximo de pods para cada valor de nodo. Asegúrate de agregar el parámetro --cni-custom-networking-enabled al ejecutar el script max-pods-calculator.sh.
    Nota: Si no utilizas una plantilla de inicio ni un ID de AMI, Amazon EKS establece automáticamente el número máximo de pods.
  3. Actualiza el script de datos de usuario en tus nuevos nodos para usar la cantidad máxima de pods según tu sistema operativo (SO):
    Amazon Linux 2, Bottlerocket, Ubuntu 20.04 y versiones posteriores, Windows Server 2019 y versiones posteriores
    #!/bin/bash  
    /etc/eks/bootstrap.sh example-cluster-name --use-max-pods false --kubelet-extra-args '--max-pods=example-max-pods'
    --user-data '#!/bin/bash /etc/eks/nodeadm init \ --container-runtime containerd \ --cluster-name example-cluster-name \ --max-pods example-max-pods'
    Nota: En los comandos anteriores, sustituye example-cluster-name por el nombre de tu clúster de EKS. Sustituye example-max-pods por tu valor máximo de pods por nodo.
    Para más información sobre bootstrap, consulta awslabs/amazon-eks-ami en el sitio web de GitHub. Para obtener información sobre nodeadm, consulta Actualización de Amazon Linux 2 a Amazon Linux 2023.
    Amazon Linux 2023 (AL2023)
  4. Recrea tus pods para usar tu nueva configuración de red personalizada.
OFICIAL DE AWSActualizada hace 4 meses