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

7 minutos de lectura
0

Quiero utilizar subredes o rangos de IP personalizados para mis pods en Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción breve

A veces, los pods no utilizan todas las subredes disponibles en su clúster de Amazon EKS. Esto ocurre cuando algunas subredes de nodos no tienen direcciones IP disponibles, pero otras subredes de Amazon Virtual Private Cloud (Amazon VPC) siguen infrautilizadas.

Los nodos y los pods de Amazon EKS utilizan direcciones IP del mismo espacio de direcciones: los rangos CIDR de IP asociados a la VPC del clúster. En concreto, Amazon EKS asigna IP a los pods de la misma subred del nodo de trabajo donde están programados los pods.

Por ejemplo, supongamos que el nodo-1 se lanza en la subred-1. Es decir, la interfaz de red elástica principal del nodo se encuentra en la subred-1. Más adelante, el pod-A puede implementarse y programarse en el nodo-1. De forma predeterminada, el complemento CNI de Amazon VPC asigna interfaces de red elásticas e IP secundarias en la subred-1 para asignar una dirección IP al pod-A.

Como resultado, los usuarios no tienen control directo sobre la asignación personalizada de pods a subredes IP porque los pods y los nodos utilizan la misma subred. Si los nodos tienen suficiente capacidad de procesamiento para ejecutar muchos pods, entonces los pods pueden utilizar todas las direcciones IP disponibles en la subred del nodo. Los nuevos pods no se pueden ejecutar debido a que las direcciones IP se han agotado en la subred del nodo. Esto ocurre incluso cuando otras subredes de Amazon VPC pueden tener direcciones IP disponibles.

Resolución

Puede solucionar este problema mediante el componente de red personalizado de Amazon VPC CNI. Esta característica le permite definir subredes específicas en el clúster de Amazon VPC para que las utilicen los pods. Diferencia sus subredes de las utilizadas por los nodos de trabajo. Como beneficio adicional, puede definir grupos de seguridad para sus pods. Consulte Tutorial: Redes personalizadas para obtener más información sobre los casos de uso de redes personalizadas.

Requisitos previos

Antes de comenzar, tenga en cuenta lo siguiente:

Como práctica recomendada, asegúrese de tener la versión más reciente del complemento CNI de Amazon VPC ejecutándose en su clúster. Ejecute el siguiente comando para verificar la versión de su clúster de Amazon VPC:

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

Nota: Para obtener más información sobre la mejor versión que se puede utilizar, consulte Updating the Amazon VPC CNI plugin for self-managed add-on (Actualización del complemento CNI de Amazon VPC para el complemento autoadministrado).

Configurar sus rangos de IP y subredes personalizados

Siga estos pasos para utilizar la función de red personalizada CNI de Amazon VPC:

1.    Active la función de red personalizada CNI de Amazon VPC:

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

2.    Cree objetos ENIConfig para definir subredes y grupos de seguridad para que los utilicen los pods.

Un objeto ENIConfig define una subred y una lista de grupos de seguridad. Cuando un nodo se anota o etiqueta con un solo objeto ENIConfig, todos los pods programados para ese nodo utilizan la subred y los grupos de seguridad definidos en ese objeto ENIConfig.

Puede asociar de manera automática o manual un objeto ENIConfig a un nodo.

Asociar de manera automática objetos ENIConfig con nodos

Esta opción solo permite un objeto ENIConfig (una subred) por zona de disponibilidad (AZ). El nombre de ENIConfig debe ser el nombre de la AZ.

1.    Cree objetos ENIConfig con el nombre de la AZ:

cat <<EOF  | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-XXXXXXXX
EOF


cat <<EOF | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: us-east-2b
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-YYYYYYYYY
EOF

2.    Permita que Amazon VPC-CNI etiquete de manera automático los nodos con el objeto ENIConfig que coincida con el nodo de la AZ.

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

Asociar de manera manual objetos ENIConfig con nodos

Esta opción permite varios objetos ENIConfig por zona de disponibilidad. Tenga en cuenta que puede utilizar un nombre personalizado para cada objeto ENIConfig. Asegúrese de que el nodo y el objeto ENIConfig asociado estén en la misma zona de disponibilidad.

Nota: Solo puede anotar un nodo con un objeto ENIConfig, pero puede anotar varios nodos con el mismo objeto ENIConfig.

1.    Cree objetos ENIConfig con nombres personalizados, de la siguiente manera:

cat <<EOF  | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: my-conf-1-us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-XXXXXXXX
EOF


cat <<EOF | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: my-conf-2-us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-ZZZZZZZZZZ
EOF

2.    Anote manualmente los nodos con objetos ENIConfig. Asegúrese de que el nodo y la subred del objeto ENIConfig asociado estén en la misma zona de disponibilidad.

kubectl annotate node ip-192-168-0-126.us-east-2.compute.internal k8s.amazonaws.com/eniConfig=my-conf-1-us-east-2a

Esta anotación manual tiene prioridad sobre la etiqueta que Amazon VPC CNI agrega de forma automática.

Lanzar nuevos nodos para reemplazar el nodo de trabajo actual

Los nodos de trabajo existentes pueden tener interfaces de red elásticas secundarias e IP de la subred del nodo antes de activar la función de red personalizada en Amazon VPC CNI. Por este motivo, debe lanzar nuevos nodos para que puedan asignar interfaces de red elásticas e IP secundarias desde las subredes definidas en el objeto ENIConfig asociado al nodo.

1.    Compruebe si utiliza alguna de estas opciones de grupos de nodos:

  • grupo de nodos autoadministrados
  • grupo de nodos administrados con ID de AMI personalizada

Nota: Si va a crear nodos en estos tipos de grupos de nodos, continúe al paso 2 para definir de forma manual el número máximo de pods para los nodos. Si lanza nodos del grupo de nodos administrados sin especificar una AMI personalizada, Amazon EKS actualizará de manera automática la cantidad máxima de pods para los nodos. Para obtener más información, consulte Grupos de nodos administrados.

2.    Determinar el número máximo de pods por nodo. Cuando se utilizan redes personalizadas, la interfaz de red principal del nodo no se utiliza para las IP de los pods. Para determinar el valor máximo de pods mediante el script de la calculadora de pods máximos, consulte Número máximo de pods recomendado por Amazon EKS para cada tipo de instancia de Amazon EC2.

Nota: Utilice la opción cni-custom-networking-enabled con el script anterior para lanzar pods en una subred que no sea su propia instancia.

3.    Actualice el script de datos de usuario en sus nuevos nodos para incluir los indicadores necesarios. Por ejemplo:

#!/bin/bash
/etc/eks/bootstrap.sh my_cluster_name --use-max-pods false --kubelet-extra-args '--max-pods=20'

Nota: Sustituya my_cluster_name por el nombre de su clúster de EKS. Para obtener más información sobre la funcionalidad de Bootstrap, consulte awslabs/amazon-eks-ami en el sitio web de GitHub.

4.    Vuelva a crear los pods para utilizar la nueva configuración de red personalizada del pod.

Consideraciones adicionales

  • De forma predeterminada, el tráfico de los pods a las direcciones IP externas al CIDR de VPC del clúster utiliza la interfaz principal y la dirección IP del nodo. Por lo tanto, este tráfico no utiliza la subred y los grupos de seguridad definidos en ENIConfig. En su lugar, el tráfico utiliza los grupos de seguridad y la subred de la interfaz de red principal del nodo. Consulte SNAT para pods para obtener más información.
  • Si también utiliza grupos de seguridad para los pods, se utiliza el grupo de seguridad que se especifica en una SecurityGroupPolicy en lugar del grupo de seguridad que se especifica en los objetos ENIConfig**.**
  • Consulte Simplify CNI custom networking (Simplificar las redes personalizadas de CNI) para obtener las actualizaciones más recientes en el sitio web de GitHub.
  • Para agregar más rangos de CIDR IP a su VPC, siga los pasos que se indican en How do I use multiple CIDR ranges in Amazon EKS? (¿Cómo utilizo varios rangos de CIDR en Amazon EKS?)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año