GNU/Linux >> Tutoriales Linux >  >> Linux

Faucet:un controlador SDN de código abierto para redes de producción de alta velocidad

Gracias al software de código abierto, ahora podemos controlar y modificar el comportamiento de casi todos los componentes de un sistema de TI. Podemos modificar todo, desde la pila de redes en el kernel hasta el código del servidor web en el espacio del usuario para realizar mejoras o implementar nuevas funciones.

El obstáculo final para tener un control total sobre nuestra pila de hardware y software es el hardware de la red física. Estos dispositivos generalmente se crean a partir de las herramientas de código abierto que amamos, pero se presentan como cajas negras que los operadores de red no pueden modificar fácilmente.

Los estándares abiertos como OpenFlow y P4 prometieron mejorar el panorama al abrir el acceso a estos dispositivos a través de una API programable, pero aún requieren que alguien escriba un controlador para volver a implementar la funcionalidad normal del interruptor, como el reenvío y el enrutamiento, en un multi- proveedor, de manera compatible con los estándares. Esto llevó a nuestro grupo a escribir el controlador de red definida por software (SDN) Faucet, que permite a cualquier persona realizar completamente el sueño de las redes programables.

Cómo funciona Faucet

Faucet es un controlador OpenFlow compacto y de código abierto que permite a los usuarios ejecutar sus redes de la misma manera que ejecutan los clústeres de servidores. Faucet hace que las redes sean accesibles para todos al llevar el flujo de trabajo de DevOps a las redes. Lo hace al hacer que las funciones de red (como los protocolos de enrutamiento, el descubrimiento de vecinos y los algoritmos de conmutación) sean fáciles de administrar, probar y ampliar al trasladarlas a un software normal que se ejecuta en un servidor, en comparación con el enfoque tradicional de incorporar estas funciones en el firmware. de un conmutador o enrutador. Faucet funciona al ingerir un archivo de configuración YAML que representa la topología de red y la funcionalidad de red requerida, y hace el trabajo de programar cada dispositivo en la red con OpenFlow.

La historia de Faucet comenzó en septiembre de 2015 cuando REANNZ escribió la primera versión de Faucet basada en un código prototipo del WAND Network Research Group de la Universidad de Waikato. Desde entonces, estos grupos y muchos otros en Nueva Zelanda y más allá se han asociado para escribir y mantener un controlador OpenFlow funcional que pueda ser utilizado por las masas. Nos hemos comprometido a ser un proyecto de código abierto desde el primer día, ya que creemos que esta es la mejor manera en que podemos hacer que nuestras contribuciones estén disponibles para ayudar a la comunidad, y estamos felices de haber recibido cambios en el código de más de 40 desarrolladores diferentes hasta la fecha.

Comprobación y compatibilidad entre proveedores

Cuando se escriben controladores de red, es crucial entregar un código funcional con cada versión que no interrumpa las implementaciones de producción cuando se actualicen. Como resultado, la capacidad de prueba es uno de los principios rectores importantes de Faucet. Tenemos un conjunto de pruebas completo que no solo prueba la calidad del código con análisis estático y de pelusa, sino que también probamos una gran cantidad de topologías de red con diferentes funciones de Faucet habilitadas. Esta prueba se realiza automáticamente en cada cambio de código.

Nuestro conjunto de pruebas también nos permite calificar los dispositivos de hardware que admiten todas las funciones de Faucet. Esto ha hecho que la compatibilidad SDN entre proveedores sea una posibilidad real, ya que varios proveedores ejecutan el conjunto de pruebas de Faucet como parte de su proceso de control de calidad para validar que su firmware es compatible con Faucet. Esto también nos permite evitar escribir controladores adicionales o extensiones de proveedores para programar nuevos dispositivos, lo que tiene el beneficio adicional de mantener nuestra base de código pequeña y consistente.

Faucet en el mundo real

Faucet se ha implementado en muchas redes diferentes en todo el mundo. Más recientemente, nos asociamos con la conferencia ACM/IEEE Supercomputing Conference 2018 (SC18) para implementar una gran red Faucet como parte de la red SCinet que brinda terabits por segundo de Internet a los puestos en el piso de exhibición. La red que creamos incluía hardware de Allied Telesis, Cisco y NoviFlow, y logramos superar los 9 terabits por segundo de capacidad.

Un dispositivo NoviFlow que ejecutaba un circuito integrado de aplicación específica (ASIC) Tofino P4 de Barefoot era el enrutador central de la red. NoviFlow escribió OpenFlow como una aplicación P4, lo que permitió a Faucet usar OpenFlow como una API de tiempo de ejecución además de P4. Escribimos un código de automatización de Ansible para integrarlo con la base de datos de conexiones de clientes SC18 y generar la configuración de Faucet sobre la marcha. La base de datos asignó a cada stand una información de VLAN y subred.

El trabajo de Faucet era realizar enrutamiento entre VLAN en el enrutador central y el Protocolo de puerta de enlace de borde (BGP) con los dos enrutadores SCinet centrales para permitir que las cabinas se enruten a Internet. La implementación del Protocolo de control de agregación de enlaces (LACP) dentro de Faucet nos permitió agrupar enlaces 2x100G a cada enrutador ascendente para permitir la resiliencia (en caso de que hubiera un problema de fibra). A cada stand se le suministró una conexión a Internet (1 Gb, 10 Gb o 100 Gb) mediante un interruptor de acceso (suministrado por uno de los proveedores) que también estaba controlado por Faucet. Los conmutadores de acceso reenviaron e implementaron políticas de seguridad en cada puerto de acceso para proteger la red. Poseidon de CyberReboot proporcionó seguridad de red adicional, una herramienta de aprendizaje automático que se integra con Faucet y puede identificar hosts finales sospechosos en la red. Todos los servicios en la red, como el Protocolo de configuración dinámica de host (DHCP) y BGP, fueron proporcionados por demonios de código abierto (por ejemplo, dhcpd y BIRD) que se ejecutaban como servicios de virtualización de funciones de red (NFV) en un servidor Linux.

Creemos que la implementación de SC18 demuestra la madurez de Faucet y OpenFlow para ejecutar redes de producción reales a gran escala. También esperamos ver a otros asumiendo el desafío de tomar el control de sus redes mediante la implementación de SDN. Para obtener más información sobre faucet y cómo implementarlo, visite nuestro sitio web, que tiene enlaces a tutoriales, documentación y listas de correo para discusiones de usuarios. Para aquellos interesados ​​en participar en nuestro proyecto de código abierto, tenemos una guía para desarrolladores para ayudar a los contribuyentes primerizos. Finalmente, para realizar un seguimiento de nuestro progreso y anuncios de futuras conferencias, tutoriales o implementaciones similares a SC18, síganos en Twitter.


Brad Cowie presentará el uso de un controlador SDN de código abierto para implementar una red de producción de alta velocidad en linux.conf.au, del 21 al 25 de enero en Christchurch, Nueva Zelanda.


Linux
  1. Comprender la Ley de Linus para la seguridad de código abierto

  2. Timekpr (revivido):una aplicación de control parental de código abierto para Linux

  3. Los 10 mejores software de contabilidad de código abierto para Linux

  4. Pixelorama – Editor de código abierto para Pixel Art

  5. Plots:una aplicación de trazado de gráficos de código abierto para GNOME

Las 12 mejores herramientas de copia de seguridad de código abierto para sistemas Linux

Los 6 mejores shells de código abierto para Linux

FreeTube:un reproductor de escritorio de YouTube de código abierto para personas preocupadas por la privacidad

10 editores de video gratuitos de código abierto para Linux [en 2021]

qBittorrent:un cliente BitTorrent de código abierto para Linux

Koodo Reader:un lector de libros electrónicos de código abierto para Linux