0Pricing
AWS Solutions Architect · Lección

Redes de EKS: VPC CNI y balanceo de carga

Utilice el complemento Amazon VPC CNI para que los pods obtengan direcciones IP nativas de la VPC y exponga servicios con AWS Load Balancer Controller

Redes de EKS: VPC CNI y balanceo de carga es una lección gratuita de AWS Solutions Architect en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AWS Solutions Architect, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AWS Solutions Architect incluye 4 lecciones en total.

Conceptos básicos de redes de Kubernetes

Kubernetes requiere que cada pod tenga una dirección IP única y enrutable, y que los pods se comuniquen entre sí sin NAT. El plugin Container Network Interface (CNI) se encarga de asignar direcciones IP y configurar las rutas de red en los nodos de trabajo. Las distintas plataformas de Kubernetes utilizan implementaciones de CNI diferentes; AWS utiliza el plugin Amazon VPC CNI para integrar directamente las redes de Kubernetes con la capa de VPC.

Plugin Amazon VPC CNI

El plugin Amazon VPC CNI asigna a cada pod una dirección IP directamente del rango CIDR de la subred de su VPC. Esto convierte a los pods en ciudadanos de primera clase de la VPC: otros recursos de la VPC, sistemas locales mediante VPN/Direct Connect y grupos de seguridad pueden acceder a ellos sin traducción mediante una red superpuesta. Cada nodo de trabajo EC2 mantiene un conjunto de IP privadas secundarias (una por ranura de ENI) que se asignan a los pods cuando se programan.

# Check the VPC CNI version installed in your cluster
kubectl describe daemonset aws-node -n kube-system | grep Image

# View the secondary IPs assigned to a node
aws ec2 describe-network-interfaces \
  --filters 'Name=attachment.instance-id,Values=i-0abcdef1234567890' \
  --query 'NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress'

ENI y conjunto de IP en reserva

El plugin VPC CNI mantiene en cada nodo un conjunto de direcciones IP preasignadas en reserva para permitir una programación rápida de los pods. Cuando se inicia un nodo, el CNI asocia varias ENI y asigna IP secundarias hasta alcanzar los valores de las variables de entorno WARM_IP_TARGET o MINIMUM_IP_TARGET. Por tanto, el número máximo de pods que puede ejecutar un nodo está limitado por el número de ENI de la instancia multiplicado por las IP por ENI, que varía según el tipo de instancia.

# Check maximum pods supported by an instance type
aws ec2 describe-instance-types \
  --instance-types m5.large \
  --query 'InstanceTypes[].NetworkInfo.{MaxENIs:MaximumNetworkInterfaces,IPv4sPerENI:Ipv4AddressesPerInterface}'

# Max pods formula: (MaxENIs x (IPv4sPerENI - 1)) + 2
# m5.large: 3 ENIs x (10-1) + 2 = 29 pods

Security Groups for Pods

De forma predeterminada, todos los pods de un nodo comparten el grupo de seguridad del nodo. Con la función Security Groups for Pods, puede asignar grupos de seguridad individuales a pods específicos mediante el recurso personalizado SecurityGroupPolicy. Esto permite un control detallado del acceso a la red; por ejemplo, solo un pod de base de datos puede recibir tráfico en el puerto 5432 procedente del grupo de seguridad del pod de API. Esta función requiere la versión 1.7.7 o posterior de VPC CNI y una ENI troncal en el nodo.

# Define a SecurityGroupPolicy (custom resource)
apiVersion: vpcresources.k8s.aws/v1beta1
kind: SecurityGroupPolicy
metadata:
  name: db-pod-sg-policy
  namespace: production
spec:
  podSelector:
    matchLabels:
      role: database
  securityGroups:
    groupIds:
    - sg-0db1234567890abcd

Tipos de servicios de Kubernetes en EKS

Los Services de Kubernetes exponen un conjunto de pods mediante un nombre DNS y una IP estables. En EKS, los tres tipos de servicio relevantes son: ClusterIP (solo para la comunicación interna del clúster), NodePort (abre un puerto en cada nodo; rara vez se utiliza en EKS) y LoadBalancer (aprovisiona automáticamente un balanceador de carga de AWS). El tipo LoadBalancer es la forma en que se exponen la mayoría de los servicios de EKS accesibles desde Internet.

# Expose a deployment with a LoadBalancer service
kubectl expose deployment my-api \
  --type=LoadBalancer \
  --name=my-api-svc \
  --port=80 \
  --target-port=8080

# Check the assigned AWS load balancer hostname
kubectl get svc my-api-svc -o wide

AWS Load Balancer Controller

AWS Load Balancer Controller es un controlador de Kubernetes de código abierto que gestiona recursos ALB y NLB en nombre de los clústeres de EKS. Cuando crea un objeto Ingress de Kubernetes, el controlador aprovisiona un Application Load Balancer. Cuando crea un Service de tipo LoadBalancer con las anotaciones correctas, aprovisiona un Network Load Balancer. El controlador sustituye al antiguo proveedor de balanceadores de carga integrado en Kubernetes.

# Install AWS Load Balancer Controller with Helm
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=my-cluster \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller \
  --set region=us-east-1 \
  --set vpcId=vpc-0abc1234def567890

Ingress de Kubernetes con ALB

Un objeto Ingress de Kubernetes define reglas de enrutamiento HTTP/HTTPS, basadas en rutas y en hosts, hacia el clúster. AWS Load Balancer Controller lee los objetos Ingress anotados con kubernetes.io/ingress.class: alb y crea un Application Load Balancer correspondiente con reglas de escucha que coinciden con ellas. Esto elimina la necesidad de crear manualmente ALB y grupos de destino para cada servicio de aplicación.

# Ingress YAML that creates an ALB
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ingress
  namespace: production
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
  - http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-svc
            port:
              number: 80

NLB para cargas de trabajo TCP/UDP

Cuando su carga de trabajo requiere TCP o UDP (no HTTP), como un servidor de juegos, un servicio gRPC o un proxy de base de datos, utilice el NLB en lugar del ALB. Anote el Service de Kubernetes con service.beta.kubernetes.io/aws-load-balancer-type: 'external' y service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: 'ip'. El controlador aprovisiona un NLB con las IP de los pods como destinos directos, evitando el reenvío de puertos a nivel de nodo para reducir la latencia.

# Service YAML that creates an NLB with IP targets
apiVersion: v1
kind: Service
metadata:
  name: grpc-svc
  namespace: production
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: 'external'
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: 'ip'
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
spec:
  type: LoadBalancer
  selector:
    app: grpc-server
  ports:
  - port: 50051
    targetPort: 50051
    protocol: TCP

Resolución de DNS dentro del clúster

EKS ejecuta CoreDNS como proveedor de DNS del clúster. Cada servicio obtiene un nombre DNS con el formato service-name.namespace.svc.cluster.local, que se resuelve en la ClusterIP del servicio. Los pods también se pueden descubrir mediante DNS. CoreDNS se implementa como un Deployment (no como un DaemonSet), y sus réplicas deben escalarse según el tamaño del clúster. EKS gestiona CoreDNS como un complemento, lo que permite realizar actualizaciones de versión automáticas.

# Verify DNS resolution from within a pod
kubectl run dns-test --image=busybox --rm -it --restart=Never -- \
  nslookup kubernetes.default.svc.cluster.local

# Expected output: Name: kubernetes.default.svc.cluster.local
# Address: 10.100.0.1 (ClusterIP of the kubernetes service)

Políticas de red en EKS

Los objetos NetworkPolicy de Kubernetes definen reglas de permiso para el tráfico entre pods y desde los pods hacia el exterior. De forma predeterminada, todos los pods de un clúster pueden comunicarse libremente. Para aplicar una red de confianza cero, puede instalar el controlador de políticas de red de Amazon VPC CNI (disponible desde VPC CNI v1.14). Las políticas de red se evalúan en el nivel del kernel de Linux mediante eBPF, lo que proporciona una aplicación de alto rendimiento sin necesidad de una red superpuesta.

# NetworkPolicy: allow traffic to api pods only from frontend pods
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: api-allow-frontend
  namespace: production
spec:
  podSelector:
    matchLabels:
      role: api
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 8080

Consejos para solucionar problemas de VPC CNI

Entre los problemas habituales de redes de EKS se incluyen el agotamiento de direcciones IP (soluciónelo activando la delegación de prefijos o añadiendo subredes más grandes), los pods atascados en Pending porque el nodo no tiene IP secundarias disponibles y los fallos intermitentes de resolución DNS causados por un número insuficiente de réplicas de CoreDNS. Utilice kubectl describe pod para comprobar los eventos, kubectl describe node para consultar el número de IP asignadas y CloudWatch Container Insights para supervisar las tasas de errores de DNS a escala del clúster.

# Enable prefix delegation to increase pod density per node
kubectl set env daemonset aws-node \
  -n kube-system \
  ENABLE_PREFIX_DELEGATION=true \
  WARM_PREFIX_TARGET=1

# Check current IP usage on a node
kubectl describe node ip-10-0-1-100.ec2.internal | grep -A5 'Allocatable'

Comprobación rápida

Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) tratados en esta lección.

Resumen de la lección

En esta lección ha aprendido lo siguiente: el plugin Amazon VPC CNI asigna IP nativas de la VPC a cada pod para lograr una integración fluida con la VPC, AWS Load Balancer Controller aprovisiona ALB para Ingress HTTP y NLB para Services TCP/UDP, y Security Groups for Pods permite controlar el acceso a la red a nivel de pod. A continuación, exploraremos IRSA para asociar roles de IAM detallados a las cuentas de servicio de Kubernetes.

Preguntas frecuentes

¿La lección «Redes de EKS: VPC CNI y balanceo de carga» es gratis?

Sí — el texto completo de «Redes de EKS: VPC CNI y balanceo de carga» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AWS Solutions Architect, actualiza a CoddyKit PRO. El curso de AWS Solutions Architect incluye 4 lecciones en total.

¿Qué aprenderé en «Redes de EKS: VPC CNI y balanceo de carga»?

Utilice el complemento Amazon VPC CNI para que los pods obtengan direcciones IP nativas de la VPC y exponga servicios con AWS Load Balancer Controller Practicas AWS Solutions Architect con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AWS Solutions Architect?

No se requiere experiencia previa. AWS Solutions Architect en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Redes de EKS: VPC CNI y balanceo de carga»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AWS Solutions Architect?

Sí. Cada lección de AWS Solutions Architect incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Plano de control y nodos de trabajo de EKS
  2. Perfiles de Fargate para pods sin servidor
  3. Redes de EKS: VPC CNI y balanceo de carga
  4. Roles de IAM para cuentas de servicio (IRSA)
← Volver a AWS Solutions Architect