A empresa Solo.io, que desenvolve produtos para operações em sistemas de nuvem, microsserviços, contêineres isolados e computação sem servidor, publicou a ferramenta aberta BumbleBee, voltada para simplificar a preparação, distribuição e execução de programas eBPF que são executados em uma máquina virtual especial dentro do kernel Linux e permitem processar operações de rede, controlar acesso e monitorar o funcionamento dos sistemas. O código é escrito na linguagem Go e distribuído sob a licença Apache 2.0.
O BumbleBee permite empacotar um programa eBPF na forma de uma imagem de contêiner no formato OCI (Open Container Initiative), que pode ser executada em qualquer sistema sem necessidade de recompilação e de componentes adicionais no espaço do usuário. A interação com o código eBPF no kernel, incluindo o processamento de dados recebidos dos manipuladores eBPF, é gerenciada pelo BumbleBee, que exporta automaticamente esses dados na forma de métricas, histogramas ou logs, que podem ser acessados, por exemplo, usando a ferramenta curl. A abordagem proposta permite que o desenvolvedor se concentre na escrita do código eBPF, sem se distrair com a organização da interação com esse código a partir do espaço do usuário, compilação e carregamento no kernel.
Para gerenciar programas eBPF, é oferecida uma ferramenta no estilo Docker chamada "bee", com a qual é possível carregar imediatamente o manipulador eBPF desejado de um repositório externo e executá-lo no sistema local. A ferramenta permite gerar uma estrutura de código na linguagem C para manipuladores eBPF de temas selecionados (atualmente, apenas manipuladores de operações de rede e de arquivos, que interceptam chamadas na pilha de rede e nos sistemas de arquivos, são suportados). Com base na estrutura gerada, o desenvolvedor pode rapidamente implementar a funcionalidade de seu interesse.
Ao contrário do BCC (BPF Compiler Collection), o BumbleBee não realiza uma recompilação completa do código do manipulador para cada versão do kernel Linux (BCC utiliza compilação em tempo real com Clang a cada execução do programa eBPF). Para resolver problemas de portabilidade, estão sendo desenvolvidas ferramentas como CO-RE e libbpf, que permitem compilar o código apenas uma vez e usar um carregador universal especial, adaptando o programa carregado ao kernel atual e aos tipos BTF (BPF Type Format). O BumbleBee é uma camada sobre o libbpf e fornece tipos adicionais para a interpretação automática e exibição de dados armazenados nas estruturas de mapa padrão para eBPF, como RingBuffer e HashMap.
Para compilar o programa eBPF final e salvá-lo como uma imagem OCI, basta executar o comando "bee build arquivo_com_código nome:versão", e para executar, use o comando "bee run nome:versão". Por padrão, os eventos recebidos do manipulador serão exibidos na janela do terminal, mas se necessário, é possível obter dados acessando as utilidades curl ou wget no porto de rede vinculado ao manipulador. Os manipuladores podem ser distribuídos por repositórios compatíveis com OCI; por exemplo, para executar um manipulador externo a partir do repositório ghcr.io (GitHub Container Registry), você pode executar o comando "bee run ghcr.io/solo-io/bumblebee/tcpconnect:$(bee version)". Para colocar o manipulador em um repositório, o comando sugerido é "bee push", e para vincular a versão — "bee tag".
Fonte: opennet.ru
