eBPF no mundo real: casos de uso

Como explicamos em outro artigo, o eBPF permite o desenvolvimento de novas soluções em diferentes áreas. Algumas estão relacionadas ao gerenciamento de SDN, mitigação de DDoS e detecção de intrusos através da perda precoce de pacotes. Outras ajudam a melhorar o desempenho da rede, o balanceamento de carga, a observabilidade e muito mais.

Agora, você pode descobrir alguns casos de uso e histórias de sucesso de projetos reais.

eBPF: uma visão geral

Mesmo quando o BPF (Berkeley Packet Filter) surgiu em 1992 como uma solução para otimizar os filtros de pacotes, ele tinha algumas limitações. Trabalhando em torno dessas limitações, Alexei Starovoitov inicialmente propôs uma reescrita para o BPF. Em seguida, ele desenvolveu eBPF, ou extended Berkeley Packet Filter, com Daniel Borkmann em 2014. 

Hoje, seus criadores apresentam o eBPF como “uma tecnologia revolucionária com origens no kernel de Linux, que pode executar programas dentro de um sandbox em um kernel do sistema operacional. Ele é usado para estender com segurança e eficiência as capacidades do kernel sem a necessidade de alterar o código-fonte ou carregar os módulos do kernel”. Isso possibilita a “execução em eventos que não sejam pacotes e fazer ações que não sejam filtragem”, como Brandan Gregg refere.

Casos de uso do eBPF

Anteriormente, listamos 5 razões para usar o eBPF. Mais do que razões, existem 5 áreas onde o seu projeto pode ser melhorado e impulsionado por ele. Essas áreas são: programabilidade, redes, rastreamento e criação de perfis (profiling), observabilidade e monitoramento, e segurança.

Load balancer do Facebook

Os servidores do Facebook processam milhões e milhões de visitas todos os dias. Então, como otimizar o tráfego e garantir a experiência do usuário de forma confiável, segura e rápida? Os engenheiros da empresa estão usando Katran. Ele “cria uma solução baseada em software para balanceamento de cargas com um plano de encaminhamento reprojetado que aproveita as recentes inovações em engenharia de kernel”. Essas inovações são o eXpress Data Path (XDP) e o eBPF, conforme explicado por Nikita Shirokov e Ranjeeth Dasineni.

O Facebook usa um balanceador de carga de rede (também chamado de balanceador de carga de camada 4, ou L4LB). Ele opera com pacotes em vez de atender solicitações de nível de aplicação. Para isso, um endereço IP virtual (VIP) é endereçado “à internet em cada localidade. Pacotes destinados ao VIP são então perfeitamente distribuídos entre os servidores de backend” pelo algoritmo de distribuição. Em seguida, os pacotes são enviados para a rede globalmente distribuída de pontos de presença (PoP). Os PoPs também atuam como proxies para os data centers do Facebook.

No entanto, a primeira geração L4LB, baseada no módulo do kernel IPVS, apresentou alguns desafios relacionados a backends. “Na segunda iteração, alavancamos o framework eXpress Data Path (XDP) e eBPF para executar o balanceador de carga do software junto com os backends em um grande número de máquinas”, acrescentaram os engenheiros.

Duas gerações de L4LBs. Fonte.

Comparando gerações, “ambos são balanceadores de carga de software em execução em servidores de backend. Mas o Katran (à direita) nos permite colocar o balanceador de carga com a aplicação backend, aumentando assim a capacidade do balanceador de carga”. Além disso, “o Katran é implantado hoje em servidores de backend nos pontos de presença (PoPs) do Facebook. Isso nos ajudou a melhorar o desempenho e a escalabilidade do balanceamento de carga de rede e reduzir ineficiências, como os loops ocupados quando não há pacotes de entrada”. 

Criptografia do Facebook

O Facebook também usa eBPF para impor políticas de criptografia dentro de sua rede. Pensando em diferentes opções e cenários para fornecer uma aplicação transparente, a equipe decidiu desenvolver e implantar um SSLWall. É “um sistema que corta conexões não SSL através de vários limites”, como explicado neste post. Esta abordagem requer trabalho no contexto do kernel. É aqui que os engenheiros aproveitam os recursos do eBPF, como tc-bpf, kprobes e mapas.

Os programas eBPF são gerenciados através de um daemon, que também envia logs para o Scribe. “Isso torna o gerenciamento de versões mais fácil de lidar, pois temos apenas uma unidade de software para monitorar em vez de precisar rastrear um daemon e uma versão do eBPF. Além disso, podemos modificar o esquema de nossas tabelas BPF, que tanto o espaço do usuário quanto o espaço do kernel consultam, sem preocupações de compatibilidade entre as versões.” Os proxies também fazem parte da infraestrutura final. 

Aplicação e lógica de proxy para conexão transparente na rede Facebook. Fonte.

O Magic Firewall da Cloudflare

A Cloudflare é uma das líderes no mercado de cloud computing. Sendo um provedor para empresas em todo o mundo, é obrigatório oferecer um serviço impecável, mas também seguro para proteger seus ativos. Neste assunto, a Cloudflare usou o eBPF para criar filtragem de pacotes programáveis para seu produto chamado Magic Firewall.

“O Magic Firewall permite regras personalizadas no nível de pacotes, permitindo que os clientes descontinuem os dispositivos de firewall de hardware e bloqueiem o tráfego malicioso na rede da Cloudflare”, de acordo com a empresa. Com os ataques cibernéticos sendo mais frequentes e sofisticados a cada dia, era necessário proteger a rede e os serviços da Cloudlare. 

Como o eBPF aprimora o Magic Firewall?

Para atingir esse objetivo, a equipe de engenharia usa os recursos do eBPF. “Com o eBPF, você pode inserir programas de processamento de pacotes que executam no kernel, dando-lhe a flexibilidade de paradigmas de programação familiares com a velocidade de execução no kernel (…) Queríamos encontrar uma maneira de usar o eBPF para estender nosso uso de nftables no Magic Firewall. Isso significa ser capaz de fazer match, usando um programa eBPF dentro de uma tabela e cadeia como regra. Ao fazer isso, podemos fazer tudo, mantendo nossa infraestrutura e código existentes e estendendo-os ainda mais”.

A relação entre iptables, nftables e o kernel. Fonte

Junto com o uso de iptables e nftables, a Cloudflare construiu um programa eBPF. Com isso, a equipe foi capaz de carregá-lo em uma tabela e cadeia nftables existentes e integrá-lo nas ferramentas através do Cilium. Agora, o Magic Firewall é mais flexível e poderoso. Além de ter uma solução integrada, a Cloudflare afirmou que pode “analisar mais profundamente os pacotes e implementar uma lógica de correspondência mais complexa do que os nftables sozinhos poderiam fornecer. Como nosso firewall está sendo executado como software em todos os servidores da Cloudflare, podemos iterar e atualizar rapidamente os recursos”.

A observabilidade da Netflix

Em relação às tarefas de observação e monitoramento, “o eBPF permite a coleta e agregação de métricas personalizadas no kernel e a geração de eventos de visibilidade com base em uma ampla gama de fontes possíveis”, indica o site oficial do eBPF. Dessa forma, estende a profundidade de visibilidade e gera histogramas e estruturas de dados que facilitam a análise. Atualmente, existem vários plugins e aplicações de código aberto que você pode orquestrar com sua infraestrutura de nuvem.

Nos últimos anos, a Netflix tem “usado o eBPF para entender o que o software está fazendo, o que o software está bloqueando de maneiras que não podíamos ver antes na produção”, afirma Brendan Gregg, Senior Performance Architect da empresa. “Podemos registrar sempre que as máquinas conversam com outras máquinas, e podemos usar isso para planejamento de capacidade e análise de segurança. Está nos permitindo usar tecnologias no Linux que não podíamos usar antes, kprobes, uprobes, em produção”.

Novo fluxo de dados da Netflix

Vários produtos, tecnologias e serviços compõem a infraestrutura de nuvem da Netflix. Isso representa alguns desafios relacionados à observabilidade geral. Para resolver esses problemas, a empresa implantou o Cloud Network Insight. É “um conjunto de soluções que fornece informações operacionais e analíticas sobre a infraestrutura de rede em nuvem para resolver os problemas identificados”, segundo a definição da equipe da Netflix. No Cloud Network Insight, diferentes fontes (como  VPC Flow Logs, ElB Access Logs, eBPF flow logs nas instâncias, etc.) coletam os dados. No caso específico do eBPF, “o Flow Exporter é um sidecar que usa pontos de rastreamento eBPF para capturar fluxos TCP em tempo quase real em instâncias que alimentam a arquitetura de microsserviços da Netflix”.

Observabilidade aprimorada pelo eBPF na Netflix. Fonte.

O Flow Collector consome dois fluxos de dados, e os dados passam pelo Keystone que roteia para os armazenamentos de dados. Finalmente, os dados alimentam “vários casos de uso dentro da Netflix, como monitoramento de rede e previsão de uso de rede disponíveis por meio de painéis Lumen e segmentação de rede baseada em Machine Learning. Os dados também são usados por equipes de segurança e outras equipes parceiras para insights e análise de incidentes.”

Essa solução tem se mostrado escalável, sendo capaz de gerenciar bilhões de logs de fluxo de eBPF por hora, afirma a equipe, ao mesmo tempo em que fornece visibilidade.

Sumário

O número de aplicações e ferramentas de código aberto baseados em eBPF está aumentando. A adoção dessa tecnologia vem facilitando esse processo e confirmando sua usabilidade em projetos da vida real. Grandes e pequenas empresas estão se beneficiando de diferentes maneiras. Parece que vamos ouvir e ler muito mais sobre eBPF nos próximos meses e anos.

Scroll to Top