🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Despliegue de Kubernetes en Bare Metal con Cilium y eBPF

Actualizado el 22 de mayo de 2026

El ecosistema de contenedores ha madurado hasta el punto en que Kubernetes se ha convertido en el estándar de facto para la orquestación. Sin embargo, durante años, el despliegue de clusters sobre Kubernetes bare metal se consideraba una tarea compleja, reservada para entornos cloud donde los balanceadores de carga y las redes definidas por software (SDN) ya venían resueltos. Esto ha cambiado drásticamente.

La llegada de Cilium eBPF ha revolucionado las redes Kubernetes avanzadas, ofreciendo un rendimiento a nivel de kernel que los proxies tradicionales (como kube-proxy con iptables) simplemente no pueden igualar. Para 2025, cualquier arquitecto de infraestructura que busque optimización servidores y máxima eficiencia debe considerar seriamente esta combinación.

En este artículo, exploraremos en detalle cómo desplegar un clúster de Kubernetes sobre hardware físico (bare metal) utilizando Cilium con eBPF, cubriendo desde la planificación del hardware hasta la configuración de redes avanzadas, políticas de seguridad y monitorización.

¿Por qué Bare Metal con Cilium y eBPF?

Antes de sumergirnos en el despliegue, es crucial entender por qué esta combinación es tan poderosa para el despliegue clusters 2025.

El problema de las redes tradicionales en Bare Metal

En entornos cloud, el hipervisor abstrae la red. En bare metal, el administrador es responsable de todo el stack de red. Usar soluciones como Flannel (VXLAN) o Calico (con iptables) funciona, pero introduce latencia y limita la escalabilidad. El uso de iptables para el NAT y el balanceo de carga se vuelve un cuello de botella a medida que el clúster crece.

eBPF: El nuevo plano de control del kernel

eBPF (Extended Berkeley Packet Filter) permite ejecutar programas sandboxeados dentro del kernel de Linux sin necesidad de modificar el código fuente del kernel ni cargar módulos. Cilium aprovecha esto para:

  • Reemplazar kube-proxy completamente: Cilium puede manejar el balanceo de carga de servicios (ClusterIP, NodePort, LoadBalancer) mediante programas eBPF, eliminando la necesidad de iptables.
  • Redes de alto rendimiento: Ofrece conectividad de pod a pod con encapsulación (VXLAN/Geneve) o modo nativo de capa 2/3, con una latencia mínima.
  • Seguridad a nivel de kernel: Las políticas de red se aplican directamente en el kernel, permitiendo inspeccionar tráfico con un overhead casi nulo.

[INFO] Si estás migrando desde un cloud a on-premise, Cilium es la herramienta que te permitirá mantener la misma agilidad operativa sin depender de soluciones propietarias.

Planificación del Hardware y Sistema Operativo

Un clúster bare metal exitoso comienza con un hardware bien dimensionado. Para un clúster de producción en 2025, considera:

Requisitos mínimos por nodo

  • CPU: x86_64 o ARM64 (con soporte para eBPF). Al menos 4 cores para el plano de control, 8+ para workers.
  • RAM: 16 GB para control-plane, 32 GB+ para workers (dependiendo de la carga).
  • Almacenamiento: NVMe SSD para etcd y almacenamiento de estado.
  • Red: Interfaces de 10 Gbps o superiores. eBPF se beneficia enormemente de NICs modernas.

Sistema Operativo

Elige una distribución Linux moderna con kernel 5.10 o superior (recomendado 6.x para mejores características de eBPF). Las opciones más sólidas son:

  • Ubuntu 24.04 LTS (kernel 6.8+)
  • Debian 12 (kernel 6.1+)
  • Flatcar Container Linux (optimizado para contenedores)

[WARNING] Evita kernels antiguos (como RHEL 8 con kernel 4.18) sin habilitar los módulos de eBPF adecuados. Cilium requiere CONFIG_DEBUG_INFO_BTF=y para funcionar al máximo rendimiento.

Instalación del Clúster Kubernetes

Para este tutorial, asumiremos que tienes 3 nodos (1 control-plane, 2 workers) con acceso SSH y conectividad de red entre ellos.

Paso 1: Preparar los nodos

En cada nodo, ejecuta:

# Habilitar módulos del kernel necesarios para eBPF
cat <<EOF | sudo tee /etc/modules-load.d/cilium.conf
br_netfilter
overlay
EOF

sudo modprobe br_netfilter
sudo modprobe overlay

# Configurar sysctl para redes
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes.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 2: Instalar kubeadm, kubelet y kubectl

Sigue las instrucciones oficiales para tu distribución. Aquí un ejemplo para Ubuntu:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Paso 3: Inicializar el Plano de Control

En el nodo control-plane, inicializa el clúster. Importante: no uses el plugin de red por defecto (Flannel). Usaremos Cilium más tarde.

sudo kubeadm init --pod-network-cidr=10.0.0.0/16 --service-cidr=10.96.0.0/12

Copia el archivo de configuración de kubeconfig:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Une los nodos worker usando el token generado por kubeadm init.

Despliegue de Cilium con eBPF

Ahora viene la parte clave: instalar Cilium como plugin de red y reemplazar kube-proxy.

Paso 1: Descargar e instalar Cilium CLI

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz

Paso 2: Instalar Cilium en el clúster

Ejecuta el siguiente comando. La opción --set kubeProxyReplacement=true es la que elimina la dependencia de kube-proxy.

cilium install \
  --set kubeProxyReplacement=true \
  --set ipam.mode=cluster-pool \
  --set ipam.operator.clusterPoolIPv4PodCIDRList="10.0.0.0/16" \
  --set ipam.operator.clusterPoolIPv4MaskSize=24 \
  --set encryption.enabled=true \
  --set encryption.type=wireguard \
  --set securityContext.capabilities.ciliumAgent=["CHOWN","KILL","NET_ADMIN","NET_RAW","IPC_LOCK","SYS_ADMIN","SYS_RESOURCE","DAC_OVERRIDE","FOWNER","SETGID","SETUID"]

[TIP] La opción encryption.enabled=true con WireGuard es ideal para entornos bare metal donde el tráfico entre nodos no está cifrado por defecto. Añade seguridad sin el overhead de IPsec.

Paso 3: Verificar la instalación

cilium status --wait

Deberías ver algo como:

    /¯¯\
 /¯¯\__/¯¯\    Cilium:         OK
 \__/¯¯\__/    Operator:       OK
 /¯¯\__/¯¯\    Envoy Daemon:   OK
 \__/¯¯\__/    Hubble Relay:   OK
    \__/       ClusterMesh:    disabled

Además, verifica que kube-proxy ya no está corriendo:

kubectl get pods -n kube-system | grep kube-proxy
# No debería mostrar nada

Configuración de Redes Avanzadas

Con Cilium instalado, puedes explotar características que van mucho más allá de la conectividad básica.

Balanceo de Carga con eBPF

Cilium reemplaza kube-proxy con un balanceador de carga implementado en eBPF. Esto significa que los servicios ClusterIP se resuelven en el kernel sin pasar por iptables. Para exponer servicios en bare metal, puedes usar la función LoadBalancer IP Pool.

  1. Crear un pool de IPs públicas (por ejemplo, 192.168.1.200-192.168.1.210):
cat <<EOF | kubectl apply -f -
apiVersion: "cilium.io/v2alpha1"
kind: CiliumLoadBalancerIPPool
metadata:
  name: "public-pool"
spec:
  blocks:
  - cidr: "192.168.1.200/28"
EOF
  1. Crear un servicio con tipo LoadBalancer:
apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx

Cilium asignará automáticamente una IP del pool al servicio.

Políticas de Red a nivel de Kernel

Las NetworkPolicies de Kubernetes se vuelven extremadamente eficientes con Cilium. Puedes aplicar políticas L3/L4 y L7 (con Envoy) sin perder rendimiento.

Ejemplo de política L4:

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "allow-http-from-frontend"
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: frontend
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP

[WARNING] Las políticas de Cilium se aplican en el kernel. Si bloqueas accidentalmente el tráfico de nodos a pods, podrías perder la conectividad con el clúster. Siempre prueba con políticas de tipo Egress primero.

Optimización del Rendimiento y Monitorización

Ajustes para Máximo Rendimiento

  • Deshabilitar GRO/LRO: Para cargas de trabajo intensivas en red, deshabilitar Generic Receive Offload puede mejorar la latencia.
sudo ethtool -K eth0 gro off lro off
  • Aislar CPUs: Usa isolcpus en el kernel para dedicar cores exclusivos a las aplicaciones, evitando que el kernel interrumpa los procesos críticos.

  • Ajustar el mapa eBPF: Aumenta el límite de mapas eBPF para manejar más conexiones simultáneas.

sudo sysctl -w net.core.bpf_jit_enable=1
sudo sysctl -w net.core.bpf_jit_harden=0

Monitorización con Hubble

Cilium incluye Hubble, una plataforma de observabilidad que te permite ver el tráfico de red en tiempo real.

cilium hubble enable
cilium hubble port-forward&
hubble observe --from-pod default/nginx-xxx --to-pod default/backend-yyy

Esto te mostrará cada paquete, su origen, destino, protocolo y latencia. Es una herramienta invaluable para la optimización servidores en producción.

Casos de Uso Reales para 2025

La combinación de Kubernetes bare metal con Cilium eBPF es ideal para:

  • Telecomunicaciones: Baja latencia para aplicaciones 5G y edge computing.
  • Fintech: Cumplimiento de normativas que exigen control total sobre el hardware.
  • HPC (High Performance Computing): Redes de alto rendimiento para cargas de trabajo de IA/ML.
  • Gaming: Servidores de juego donde cada milisegundo cuenta.

Conclusión

Desplegar Kubernetes bare metal con Cilium eBPF no es solo una tendencia; es una necesidad para quienes buscan el máximo rendimiento y control. Las redes Kubernetes avanzadas que ofrece eBPF permiten eliminar cuellos de botella históricos, mientras que la seguridad a nivel de kernel protege el clúster sin sacrificar velocidad.

Para 2025, esta arquitectura se ha vuelto no solo viable, sino recomendada. El ecosistema de Cilium ha madurado, con herramientas como Hubble para observabilidad y una integración profunda con el kernel de Linux. Si estás planeando un despliegue clusters 2025, no lo pienses dos veces: bare metal + Cilium + eBPF es el camino.

[INFO] ¿Te ha sido útil este artículo? Comparte tu experiencia o dudas en los comentarios. La comunidad de SysAdmins crece cuando compartimos conocimiento.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel