eBPF en el mundo real: casos de uso

Como explicamos en otro artículo, eBPF permite el desarrollo de nuevas soluciones en diferentes áreas. Algunas están relacionadas con la gestión de SDN, la mitigación de DDoS y la detección de intrusos a través de la pérdida temprana de paquetes (early packet drop). Otras ayudan a mejorar el desempeño de la red, el balanceo de carga, la observabilidad y más.

Ahora, puedes descubrir algunos casos de uso e historias de éxito de proyectos reales.

eBPF: una visión general

Incluso cuando BPF (Berkeley Packet Filter) surgió en 1992 como una solución para optimizar los filtros de paquetes, tenía algunas limitaciones. Mientras trabajaba alrededor de estas limitaciones, Alexei Starovoitov propuso inicialmente una reescritura para BPF. Luego desarrolló eBPF, o extended Berkeley Packet Filter, junto a Daniel Borkmann en 2014. 

Hoy en día, sus creadores presentan a eBPF como “una tecnología revolucionaria, con orígenes en el kernel de Linux, que puede ejecutar programas dentro de una sandbox en un kernel de sistema operativo. Se utiliza para ampliar de forma segura y eficiente las capacidades del kernel sin necesidad de cambiar el código fuente o cargar módulos del kernel”. Esto  posibilita la “ejecución en eventos que no sean paquetes y realizar acciones que no sean filtrado”, como señala Brandan Gregg.

Casos de uso de eBPF

Anteriormente, enumeramos 5 razones para usar eBPF. Más que razones, son 5 áreas en las que tu proyecto puede ser mejorado e impulsado por esta solución. Estas áreas son: programabilidad, redes, rastreo y perfilado (profiling), observabilidad y monitoreo, y seguridad.

Load balancer de Facebook

Los servidores de Facebook procesan millones y millones de visitas todos los días. Entonces, ¿cómo optimizar el tráfico y garantizar la experiencia del usuario de una manera confiable, segura y rápida? Los ingenieros de la empresa están usando Katran. Esto “crea una solución basada en software para balancear cargas con un plano de reenvío rediseñado que aprovecha las innovaciones recientes en ingeniería de kernel”. Estas innovaciones son eXpress Data Path (XDP) y eBPF, como explican Nikita Shirokov y Ranjeeth Dasineni.

Facebook utiliza un balanceador de carga de red (también llamado balanceador de carga de capa 4, o L4LB). Funciona con paquetes en lugar de atender solicitudes de nivel de aplicación. Para ello, una dirección IP virtual (VIP) los dirige “a Internet en cada ubicación. Los paquetes destinados a la VIP se distribuyen sin problemas entre los servidores backend”, mediante el algoritmo de distribución. Luego, los paquetes se envían a la red globalmente distribuida de puntos de presencia (PoP). Los PoP también actúan como proxies para los data centers de Facebook.

Sin embargo, la primera generación de L4LB, basada en el módulo del kernel IPVS, presentó algunos desafíos relacionados con los backends. “En la segunda iteración, aprovechamos el marco eXpress Data Path (XDP) y eBPF para ejecutar el balanceador de carga de software junto con los backends en un gran número de máquinas”, agregaron los ingenieros.

Dos generaciones de L4LB. Fuente.

Al comparar generaciones, “ambos son balanceadores de carga basados en software que se ejecutan en servidores backend. Pero Katran (a la derecha) nos permite colocar el balanceador de carga con la aplicación backend, lo que aumenta la capacidad del balanceador”. Además, “Katran se implementa hoy en día en servidores backend en los puntos de presencia (PoP) de Facebook. Esto nos ha ayudado a mejorar el desempeño y la escalabilidad del balanceo de carga de red y reducir las ineficiencias, como los loops ocupados cuando no hay paquetes entrantes”. 

Cifrado de Facebook

Facebook también utiliza eBPF para hacer cumplir las políticas de cifrado dentro de su red. Al pensar en diferentes opciones y escenarios para proporcionar una aplicación transparente, el equipo decidió desarrollar e implementar un SSLWall. Es “un sistema que corta las conexiones que no son SSL a través de varios límites”, como se explica en esta entrada del blog. Este enfoque requiere trabajo en el contexto del kernel. Es aquí donde los ingenieros aprovechan las capacidades de eBPF, como tc-bpf, kprobes y mapas.

Los programas eBPF se administran a través de un daemon, que también envía logs a Scribe. “Esto hace que la gestión de las versiones sea más fácil de manejar, ya que solo tenemos una unidad de software para monitorear en lugar de tener que rastrear un daemon y una versión de eBPF. También podemos modificar el esquema de nuestras tablas BPF, que tanto el espacio de usuario como el espacio de kernel consultan, sin preocupaciones de compatibilidad entre versiones”. Los proxies también forman parte de la infraestructura final. 

Aplicación y lógica de proxy para conexión transparente en la red de Facebook. Fuente.

El Magic Firewall de Cloudflare

Cloudflare es uno de los líderes en el mercado de cloud computing. Al ser un proveedor para empresas de todo el mundo, es imperativo ofrecer un servicio impecable, pero también seguro para proteger los activos. En este contexto, Cloudflare usó eBPF para crear filtros de paquetes programables para su producto llamado Magic Firewall.

“Magic Firewall permite crear reglas personalizadas a nivel de paquetes, así los clientes pueden descontinuar los firewall de hardware y bloquear el tráfico malicioso en la red de Cloudflare”, según la empresa. Dado que los ciberataques son más frecuentes y sofisticados cada día, era necesario proteger la red y los servicios de Cloudlare. 

¿Cómo mejora el uso de eBPF al Magic Firewall?

Para lograr este objetivo, el equipo de ingeniería usa las capacidades de eBPF. “Con eBPF, se puede insertar programas de procesamiento de paquetes que se ejecutan en el kernel, lo que le da la flexibilidad de los paradigmas de programación familiares con la velocidad de ejecución en el kernel (…) Queríamos encontrar una manera de usar eBPF para extender nuestro uso de nftables en Magic Firewall. Esto significa ser capaz de hacer match, utilizando un programa eBPF dentro de una tabla y una cadena como regla. Al hacer esto podemos hacerlo todo, manteniendo nuestra infraestructura y código existentes, y extendiéndolos aún más”.

La relación entre iptables, nftables y el kernel. Fuente.

Junto con el uso de iptables y nftables, Cloudflare construyó un programa eBPF. Con esto, fue capaz de cargarlo en una tabla y cadena nftables ya existentes e integrarla en sus herramientas a través de Cilium. Ahora, Magic Firewall es más flexible y potente. Además de tener una solución integrada, Cloudflare afirmó que pueden “mirar más profundamente en los paquetes e implementar una lógica de coincidencia más compleja de lo que nftables por sí solo podría proporcionar. Dado que nuestro firewall se ejecuta como software en todos los servidores Cloudflare, podemos iterar y actualizar rápidamente las funciones”.

La observabilidad de Netflix

Con respecto a las tareas de observabilidad y monitoreo, “eBPF permite la recopilación y agregación en el kernel de métricas personalizadas y la generación de eventos de visibilidad basados en una amplia gama de posibles fuentes”, indica el sitio oficial de eBPF. De esta manera, amplía la profundidad de la visibilidad y genera histogramas y estructuras de datos que facilitan el análisis. Actualmente, hay varios plugins y aplicaciones de código abierto que puede orquestarse con tu infraestructura en la nube.

En los últimos años, Netflix ha usado eBPF “para entender lo que el software está haciendo, lo que el software está bloqueando de maneras que no podíamos ver antes en producción”, afirma Brendan Gregg, Senior Performance Architect de la compañía. “Podemos registrar cada vez que las máquinas hablan con otras máquinas, y podemos usar eso para la planificación de la capacidad y el análisis de seguridad. Nos permite usar tecnologías en Linux que antes no podíamos usar, kprobes, uprobes, en producción”.

Nuevo flujo de datos de Netflix

Diversos productos, tecnologías y servicios componen la infraestructura de nube de Netflix. Esto representa algunos desafíos relacionados con la observabilidad general. Para resolver estos problemas, la compañía implementó Cloud Network Insight. Se trata de “un conjunto de soluciones que proporciona información operativa y analítica sobre la infraestructura de red en la nube para abordar los problemas identificados”, según la definición del equipo de Netflix . En Cloud Network Insight, diferentes fuentes (como registros de flujo VPC, logs de acceso ElB, logs de flujo eBPF en las instancias, etc.) recopilan datos. En el caso específico de eBPF, “el Flow Exporter es un sidecar que utiliza puntos de seguimiento eBPF para capturar flujos TCP en tiempo casi real en instancias que alimentan la arquitectura de microservicios de Netflix”.

Observabilidad mejorada por eBPF en Netflix. Fuente.

Flow Collector consume dos flujos de datos, y los datos pasan por Keystone que los dirige hacia los almacenes de datos. Finalmente, los datos alimentan “varios casos de uso dentro de Netflix, como monitoreo de red y pronóstico de uso de red disponibles a través de paneles de Lumen y segmentación de red basada en Machine Learning. Los datos también son utilizados por los equipos de seguridad y otros departamentos para el análisis de información e incidentes”.

Esta solución ha demostrado ser escalable, ya que es capaz de gestionar miles de millones de registros de flujo eBPF por hora, afirma el equipo, al tiempo que proporciona visibilidad.

Resumen

El número de aplicaciones y herramientas de código abierto basadas en eBPF está aumentando. La adopción de esta tecnología está facilitando este proceso y confirma su usabilidad en proyectos de la vida real. Las empresas grandes y pequeñas se están beneficiando de ello de diferentes maneras. Parece que vamos a escuchar y leer mucho más sobre eBPF en los próximos meses y años.

Scroll to Top