Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

En la comunidad nativa de la nube y más allá, eBPF se ha convertido en uno de los temas técnicos más candentes de los últimos años. Se ha creado una nueva generación de potentes herramientas y proyectos en redes, seguridad, observabilidad y mucho más (y se siguen creando más) utilizando eBPF como plataforma, ofreciendo un mejor rendimiento y precisión en comparación con sus predecesores. Las conferencias relacionadas con eBPF, como la eBPF Summit y el Cloud Native eBPF Day, han atraído a miles de asistentes y espectadores, y en el momento de escribir este artículo, la comunidad eBPF Slack cuenta con más de 14.000 miembros.

¿Por qué se está eligiendo eBPF como tecnología subyacente para tantas herramientas de infraestructura? ¿Cómo consigue las mejoras de rendimiento prometidas? ¿Qué utilidad tiene eBPF en campos técnicos tan dispares, que van desde el rastreo del rendimiento a la encriptación del tráfico de red?

Este libro pretende responder a estas preguntas proporcionando al lector una comprensión de cómo funciona eBPF, así como una introducción a la escritura de código eBPF.

A quién va dirigido este libro

Este libro está dirigido a desarrolladores, administradores de sistemas, operadores y estudiantes que sientan curiosidad por eBPF y quieran saber más sobre su funcionamiento. Proporcionará una base para aquellos que quieran explorar la escritura de programas eBPF por sí mismos. Dado que eBPF proporciona una gran plataforma para toda una nueva generación de instrumentación y herramientas, es probable que haya empleo remunerado para los desarrolladores de eBPF durante algunos años.

Pero no necesariamente tienes que estar pensando en escribir código eBPF para que este libro te resulte útil. Si trabajas en operaciones, seguridad o cualquier otra función que implique infraestructura de software, es probable que te encuentres con herramientas basadas en eBPF, ahora o en los próximos años. Si entiendes algo sobre el funcionamiento interno de estas herramientas, estarás en mejores condiciones para utilizarlas eficazmente. Por ejemplo, si sabes cómo los eventos pueden desencadenar programas eBPF, tendrás un modelo mental mejor para saber exactamente qué mide realmente una herramienta basada en eBPF cuando te muestra métricas de rendimiento. Si eres desarrollador de aplicaciones, también podrías entrar en contacto con algunas de estas herramientas basadas en eBPF: por ejemplo, si estás ajustando el rendimiento de una aplicación, podrías utilizar una herramienta como Parca para generar gráficos de llama que muestren qué funciones están tardando más tiempo. Si estás evaluando herramientas de seguridad, este libro te ayudará a comprender dónde brilla eBPF y cómo evitar utilizarlo de una forma ingenua que resulte menos eficaz contra los ataques.

Aunque no utilices las herramientas eBPF en la actualidad, espero que este libro te ofrezca perspectivas interesantes sobre áreas de Linux que quizá no habías considerado antes. La mayoría de los desarrolladores dan por sentado el núcleo, ya que utilizan lenguajes de programación con cómodas abstracciones de alto nivel que les permiten centrarse en el trabajo de desarrollo de aplicaciones, ¡que ya es bastante duro! Utilizan herramientas como depuradores y analizadores de rendimiento para ayudarles a hacer su trabajo con eficacia. Conocer el funcionamiento interno de un depurador o de una herramienta de rendimiento puede ser interesante, pero no es esencial. Sin embargo, para muchos de nosotros es divertido y satisfactorio adentrarnos en la madriguera del conejo para saber más.1 Del mismo modo, la mayoría de la gente utilizará las herramientas eBPF sin tener que preocuparse por cómo están construidas. Arthur C. Clarke escribió que "cualquier tecnología suficientemente avanzada es indistinguible de la magia", pero personalmente, me gusta indagar y averiguar cómo funciona el truco de magia. Puede que tú seas como yo y te sientas obligado a explorar la programación eBPF para tener una idea más clara de lo que es posible con esta tecnología. Si es así, creo que disfrutarás con este libro.

De qué trata este libro

El eBPF sigue evolucionando a un ritmo bastante rápido, lo que hace bastante difícil escribir una referencia exhaustiva que no necesite actualizarse constantemente. Sin embargo, hay algunos fundamentos y principios básicos que es poco probable que cambien significativamente, y eso es lo que trata este libro.

El Capítulo 1prepara el terreno describiendo por qué el eBPF es una tecnología tan potente y explicando cómo la posibilidad de ejecutar programas personalizados en el núcleo del sistema operativo permite tantas capacidades apasionantes.

Las cosas se vuelven más concretas en el Capítulo 2, donde verás algunos ejemplos de "Hola Mundo" que te introducen en los conceptos de los programas y mapas eBPF.

El Capítulo3 se sumerge en más detalles sobre los programas eBPF y cómo se ejecutan en el núcleo, y el Capítulo 4 explora la interfaz entre las aplicaciones del espacio de usuario y los programas eBPF.

Uno de los grandes retos de eBPF en los últimos años ha sido la cuestión de la compatibilidad entre versiones del núcleo. El Capítulo 5 examina el enfoque "compilar una vez, ejecutar en todas partes" (CO-RE) que resuelve este problema.

El proceso de verificación es quizá la característica más importante que distingue a eBPF de los módulos del núcleo. Te presentaré el verificador eBPF en el Capítulo 6.

En el Capítulo 7 tendrás una introducción a los distintos tipos de programas eBPF y sus puntos de conexión. Muchos de esos puntos de conexión están dentro de la pila de red, y el Capítulo 8 explora con más detalle la aplicación de eBPF para funciones de red. El Capítulo 9 examina cómo se utiliza eBPF para crear herramientas de seguridad.

Si quieres escribir una aplicación de espacio de usuario que interactúe con los programas del eBPF, hay muchas bibliotecas y marcos de trabajo disponibles para ayudarte. El Capítulo 10 ofrece una visión general de las opciones para varios lenguajes de programación.

Por último, en el Capítulo 11 miraré en mi bola de cristal y te hablaré de algunos acontecimientos futuros que probablemente se produzcan en el mundo de la eBPF.

Conocimientos previos

Este libro asume que te sientes cómodo con los comandos básicos del shell en Linux y con la idea de utilizar un compilador para convertir el código fuente en un programa ejecutable. Hay algunos ejemplos sencillos extraídos de archivos Makefiles, suponiendo que tienes al menos una mínima comprensión de cómo make utiliza estos archivos.

Hay muchos ejemplos de código en Python, C y Go. No necesitarás un conocimiento profundo de esos lenguajes para sacar algo de estos ejemplos, pero sacarás el máximo partido del libro si, en general, estás dispuesto a leer algo de código. También asumo que estás familiarizado con la idea de los punteros, que identifican una ubicación de memoria.

Código de ejemplo y ejercicios

Hay muchos ejemplos de código en este libro. Si quieres probarlos por ti mismo, encontrarás un repositorio GitHub adjunto e instrucciones para instalar y ejecutar el código en https://github.com/lizrice/learning-ebpf.

También he incluido ejercicios al final de la mayoría de los capítulos para ayudarte a explorar la programación eBPF ampliando los ejemplos o escribiendo tus propios programas.

Dado que el eBPF está en continua evolución, las funciones que tienes a tu disposición dependen de la versión del núcleo que estés ejecutando. Muchas de las restricciones aplicables a versiones anteriores se han eliminado o relajado en versiones posteriores. El proyecto Iovisor tiene una útil visión general de las versiones del núcleo en las que se añadieron distintas funciones de BPF, y en este libro he intentado señalar cuándo se añadieron las capacidades concretas que describo. Los ejemplos se probaron utilizando la versión 5.15 del kernel, y en el momento de escribir este libro algunas de las distribuciones populares de Linux aún no admiten una versión tan reciente del kernel. Si estás leyendo este libro poco después de su publicación, es posible que algunas de las funciones no funcionen en el núcleo Linux que tu organización utiliza en producción.

¿El eBPF es sólo para Linux?

El eBPF se desarrolló originalmente para Linux. No hay ninguna razón en particular por la que el mismo enfoque no pueda utilizarse también en otros sistemas operativos; de hecho, Microsoft ha estado desarrollando una implementación de eBPF para Windows. Lo comento brevemente en el Capítulo 11, pero en el resto del libro me centraré en la implementación de Linux, y todos los ejemplos serán de Linux.

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Utilizar ejemplos de código

El material complementario (ejemplos de código, ejercicios, etc.) se puede descargar en https://github.com/lizrice/learning-ebpf.

Si tienes una pregunta técnica o un problema al utilizar los ejemplos de código, envía un correo electrónico a

Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y citando código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.

Agradecemos la atribución, pero en general no la exigimos. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Aprendiendo eBPF por Liz Rice (O'Reilly). Copyright 2023 Vertical Shift Ltd., 978-1-098-13512-6".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita https://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Norte
  • Sebastopol, CA 95472
  • 800-998-9938 (en Estados Unidos o Canadá)
  • 707-829-0515 (internacional o local)
  • 707-829-0104 (fax)

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/learning-eBPF.

Envía un correo electrónico para comentar o hacer preguntas técnicas sobre este libro.

Para noticias e información sobre nuestros libros y cursos, visita https://oreilly.com.

Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media.

Síguenos en Twitter: https://twitter.com/oreillymedia.

Míranos en YouTube: https://youtube.com/oreillymedia.

Agradecimientos

Me gustaría dar las gracias a las muchas personas que han contribuido enormemente a la redacción de este libro:

  • Mis revisores técnicos -Timo Beckers, Jess Males, Quentin Monnet, Kevin Sheldrake y Celeste Stinger- aportaron comentarios detallados y prácticos, así como grandes ideas para mejorar los ejemplos, por lo que les estoy muy agradecido.

  • Me subo a los hombros de los gigantes que construyeron, popularizaron y siguen manteniendo eBPF, como Daniel Borkmann, Thomas Graf, Brendan Gregg, Andrii Nakryiko, Alexei Starovoitov e innumerables otros que han contribuido a la comunidad no sólo con código, sino también con charlas en conferencias y publicaciones en blogs.

  • Gracias a mis talentosos y encantadores colegas de Isovalent, muchos de los cuales son especialistas en eBPF y kernel, de los que sigo aprendiendo tanto.

  • Gracias también al equipo de O'Reilly, especialmente a mi editora, Rita Fernando, que me prestó un apoyo infinito durante el proceso de escritura, así como la planificación que ayudó a mantener el libro dentro de los plazos previstos; y a John Devins, por animarme a escribir el libro en primer lugar.

  • Phil Pearl no sólo me dio útiles comentarios sobre el contenido, sino que también se aseguró de que comiera y me tomara descansos. Le estaré eternamente agradecida por su apoyo y sus ánimos.

También quiero dar las gracias a todas las personas maravillosas que, a lo largo de los años, se han tomado la molestia de hacer comentarios alentadores sobre mi trabajo, ya sea en persona en un evento o en las redes sociales. Es increíblemente inspirador saber que algo que he escrito o grabado ha ayudado a otra persona a comprender un concepto técnico o le ha dado ganas de construir o escribir algo por sí misma. ¡Gracias a todos!

1 En la conferencia dotGo París de 2017, di una charla que mostraba cómo funciona un depurador.

Get Aprendizaje eBPF now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.