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 podsSecurity 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-0db1234567890abcdTipos 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 wideAWS 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-0abc1234def567890Ingress 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: 80NLB 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: TCPResolució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: 8080Consejos 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
- Plano de control y nodos de trabajo de EKS
- Perfiles de Fargate para pods sin servidor
- Redes de EKS: VPC CNI y balanceo de carga
- Roles de IAM para cuentas de servicio (IRSA)