Despliegue de Kubernetes con Kubeadm y Cilium para Redes Avanzadas
Introducción al Despliegue de Kubernetes con Kubeadm y Cilium
En el ecosistema de contenedores, la orquestación se ha convertido en el pilar central de la infraestructura moderna. Kubernetes, como estándar de facto, ofrece una plataforma robusta para gestionar aplicaciones distribuidas. Sin embargo, el verdadero desafío no es solo desplegar un clúster, sino hacerlo con una red eficiente, segura y preparada para el futuro. Aquí es donde la combinación de Kubeadm y Cilium se posiciona como la opción más potente y flexible para 2026.
Kubeadm proporciona una forma estandarizada y certificada de arrancar clústeres de Kubernetes, minimizando la complejidad de la configuración manual. Por otro lado, Cilium, basado en eBPF (Extended Berkeley Packet Filter) , revoluciona las redes avanzadas al ofrecer visibilidad, seguridad y rendimiento a nivel de kernel, sin necesidad de proxies o iptables tradicionales. Este artículo te guiará paso a paso en el despliegue de un clúster de Kubernetes con Kubeadm y Cilium, explorando las configuraciones avanzadas que todo SysAdmin debe dominar en 2026.
¿Por qué Kubeadm y Cilium para Redes Avanzadas?
Antes de sumergirnos en los comandos, es crucial entender por qué esta combinación es tan relevante. Kubernetes, por defecto, utiliza kube-proxy con iptables para el enrutamiento de servicios. Aunque funcional, este enfoque tiene limitaciones en escalabilidad, latencia y visibilidad. Cilium reemplaza completamente a kube-proxy, usando eBPF para inyectar programas seguros en el kernel de Linux.
Beneficios Clave de Cilium sobre Redes Tradicionales
- Rendimiento superior: eBPF elimina la necesidad de cambios de contexto entre el espacio de usuario y el kernel, reduciendo la latencia hasta un 50% en comparación con iptables.
- Visibilidad profunda: Cilium ofrece Hubble, una plataforma de observabilidad que permite ver flujos de red, métricas de rendimiento y eventos de seguridad en tiempo real.
- Seguridad basada en identidad: En lugar de direcciones IP, Cilium aplica políticas de red usando etiquetas de Kubernetes (labels), lo que simplifica el modelo de seguridad.
- Soporte nativo para mallas de servicio: Cilium se integra directamente con Envoy para ofrecer funcionalidades de service mesh sin sobrecarga adicional.
[INFO] A partir de Kubernetes 1.28, el uso de eBPF para redes se ha convertido en una práctica recomendada. Para 2026, se espera que la mayoría de los clústeres en producción migren a soluciones basadas en eBPF como Cilium.
Requisitos Previos para el Despliegue
Antes de ejecutar cualquier comando, asegúrate de tener un entorno preparado. Este tutorial asume que tienes al menos dos nodos (un master y un worker) con Ubuntu 22.04 LTS (o superior) y acceso root.
Lista de Verificación de Requisitos
- Sistema Operativo: Linux Kernel 5.10 o superior (necesario para eBPF). Verifica con
uname -r. - Recursos Mínimos: 2 CPU, 2 GB RAM por nodo (recomendado 4 GB para producción).
- Conectividad: Los nodos deben poder comunicarse entre sí en los puertos 6443 (API Server), 2379-2380 (etcd) y 10250 (kubelet).
- Contenedores: Instala un runtime como containerd (versión 1.6+).
- Herramientas:
kubeadm,kubeletykubectl(versiones 1.28+).
[WARNING] No uses Docker como runtime directamente. Kubernetes ha deprecado Docker como runtime. Usa containerd o CRI-O.
Instalación de Dependencias Comunes
Ejecuta en todos los nodos (master y workers):
# Actualizar sistema e instalar paquetes base
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
# Instalar containerd
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
# Deshabilitar swap (requisito de Kubernetes)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# Cargar módulos del kernel para redes
sudo modprobe overlay
sudo modprobe br_netfilter
# Configurar sysctl para redes
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
Paso 1: Inicializar el Clúster con Kubeadm
Una vez que los nodos están listos, procedemos a inicializar el plano de control (master). La clave aquí es especificar el CIDR de pods que Cilium usará. Cilium recomienda usar 10.0.0.0/8 o 10.244.0.0/16 para evitar conflictos.
Comando de Inicialización
# En el nodo master
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket /run/containerd/containerd.sock
Después de la inicialización, Kubeadm mostrará un mensaje con el comando para unir workers. Guárdalo, lo necesitarás más adelante.
Configurar kubectl para el Usuario
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Verifica que el clúster esté operativo:
kubectl get nodes
# Deberías ver el nodo master en estado "NotReady" (porque falta el plugin de red)
Paso 2: Instalar Cilium como Plugin de Red
Ahora viene la parte crucial: instalar Cilium. La forma más sencilla es usando Helm, pero también puedes usar el CLI de Cilium. Recomendamos Helm para un control más granular.
Instalación con Helm
# Agregar el repositorio de Cilium
helm repo add cilium https://helm.cilium.io/
helm repo update
# Instalar Cilium en el namespace kube-system
helm install cilium cilium/cilium --namespace kube-system \
--set kubeProxyReplacement=true \
--set k8sServiceHost=<IP_DEL_MASTER> \
--set k8sServicePort=6443 \
--set cni.exclusive=false
Parámetros importantes explicados:
kubeProxyReplacement=true: Desactiva kube-proxy y usa eBPP directamente. Esto es fundamental para redes avanzadas.k8sServiceHost: La IP del nodo master (o el endpoint del API server).cni.exclusive=false: Permite que Cilium coexista con otros plugins CNI si es necesario.
[TIP] Si tu clúster tiene múltiples interfaces de red, puedes especificar --set devices=eth0 para que Cilium use solo esa interfaz.
Verificar la Instalación
kubectl -n kube-system get pods -l k8s-app=cilium
# Espera a que todos los pods estén en estado "Running"
# También puedes usar el CLI de Cilium
cilium status
Una vez que Cilium esté activo, los nodos deberían pasar a estado Ready:
kubectl get nodes
Paso 3: Configurar Redes Avanzadas con Cilium
La verdadera potencia de Cilium se despliega cuando configuramos políticas de red avanzadas y observabilidad. Aquí es donde un SysAdmin 2026 debe enfocarse.
3.1 Habilitar Hubble para Observabilidad
Hubble es el componente de observabilidad de Cilium. Proporciona dashboards y flujos de red en tiempo real.
# Habilitar Hubble durante la instalación de Helm
helm upgrade cilium cilium/cilium --namespace kube-system \
--set hubble.enabled=true \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true
Después de actualizar, despliega la UI de Hubble:
kubectl port-forward -n kube-system deployment/hubble-ui 12000:80
# Abre http://localhost:12000 en tu navegador
3.2 Políticas de Red Basadas en Identidad
Cilium permite aplicar políticas usando etiquetas de Kubernetes, no direcciones IP. Esto es mucho más dinámico y seguro.
Ejemplo: Permitir tráfico solo desde pods con label app: frontend hacia app: backend.
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
endpointSelector:
matchLabels:
app: backend
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
ports:
- port: "80"
protocol: TCP
Aplica la política:
kubectl apply -f policy.yaml
[WARNING] Las políticas de Cilium son aditivas. Si no defines una política de denegación explícita, el tráfico no coincidente será denegado por defecto (modelo de seguridad cero confianza).
3.3 Reemplazo Completo de kube-proxy
Para entornos avanzados, puedes eliminar completamente kube-proxy. Esto reduce la complejidad y mejora el rendimiento.
# Eliminar kube-proxy del clúster
kubectl -n kube-system delete daemonset kube-proxy
Luego, asegúrate de que Cilium esté configurado con kubeProxyReplacement=true (ya lo hicimos en la instalación). Verifica:
cilium status | grep KubeProxyReplacement
# Debería mostrar "KubeProxyReplacement: True"
Paso 4: Unir Nodos Workers al Clúster
Con el plano de control listo y Cilium funcionando, es momento de agregar los nodos workers. Usa el token generado por kubeadm init.
# En cada nodo worker
sudo kubeadm join <IP_MASTER>:6443 --token <TOKEN> \
--discovery-token-ca-cert-hash sha256:<HASH>
Si el token ha expirado, genera uno nuevo en el master:
kubeadm token create --print-join-command
Después de unir los workers, Cilium se desplegará automáticamente en ellos. Verifica:
kubectl get nodes
kubectl -n kube-system get pods -o wide | grep cilium
Paso 5: Pruebas de Rendimiento y Validación
Para asegurarte de que la red avanzada funciona, realiza pruebas de conectividad y rendimiento.
Prueba de Conectividad Básica
Despliega un pod de prueba y verifica la resolución DNS y el acceso a servicios.
kubectl run test-pod --image=busybox -- sleep 3600
kubectl exec -it test-pod -- nslookup kubernetes.default.svc.cluster.local
Prueba de Rendimiento con iperf
Instala iperf3 en dos pods y mide el throughput entre nodos.
# Pod servidor
kubectl run iperf-server --image=networkstatic/iperf3 -it --rm -- -s
# Pod cliente (en otro nodo)
kubectl run iperf-client --image=networkstatic/iperf3 -it --rm -- -c <IP_SERVER>
Compara los resultados con un clúster que use kube-proxy. Notarás una mejora significativa en latencia y rendimiento.
Solución de Problemas Comunes
Incluso con una configuración cuidadosa, pueden surgir problemas. Aquí algunas soluciones rápidas.
Los Nodos no Pasan a "Ready"
- Causa: Cilium no se ha instalado correctamente o el kernel no soporta eBPF.
- Solución: Verifica los logs de Cilium con
kubectl -n kube-system logs -l k8s-app=cilium. Asegúrate de que el kernel sea 5.10+.
Problemas de Conectividad entre Pods
- Causa: Políticas de red bloqueando el tráfico.
- Solución: Revisa las políticas aplicadas con
kubectl get cnp -A. Temporalmente, puedes deshabilitar la política conkubectl delete cnp --all.
Cilium no Reemplaza kube-proxy
- Causa: El parámetro
kubeProxyReplacementno se aplicó correctamente. - Solución: Verifica con
kubectl -n kube-system get daemonset kube-proxy. Si existe, elimínalo y reinicia Cilium.
[INFO] Para diagnósticos avanzados, usa cilium troubleshoot y cilium monitor. Estas herramientas son esenciales para cualquier SysAdmin 2026.
Conclusión y Buenas Prácticas para 2026
Desplegar Kubernetes con Kubeadm y Cilium no solo es una decisión técnica, sino estratégica. La combinación de un instalador probado como Kubeadm con la potencia de eBPF a través de Cilium prepara tu infraestructura para los desafíos de 2026: escalabilidad masiva, seguridad cero confianza y observabilidad en tiempo real.
Checklist Final para SysAdmin
- Automatiza: Usa Ansible o Terraform para repetir este despliegue en múltiples entornos.
- Monitorea: Integra Hubble con Prometheus y Grafana para métricas continuas.
- Actualiza: Mantén Cilium y Kubernetes en versiones estables. Cilium tiene un ciclo de releases rápido.
- Seguridad: Implementa políticas de red desde el día uno. No esperes a que ocurra un incidente.
Con esta guía, tienes las herramientas para construir un clúster de Kubernetes que no solo funcione, sino que vuele. El futuro de las redes en contenedores es eBPF, y con Cilium, ya estás un paso adelante.
