- A Camada de Rede em Kubernetes: O Papel Crítico da CNI
- Calico: A Solidez do BGP e a Confiança no Stack de Rede Linux
- Arquitetura e Componentes do Calico
- Cilium: Inovação e Performance com eBPF
- Arquitetura e o Poder do eBPF
- Análise Comparativa Detalhada: Cilium vs. Calico
- Arquitetura e Mecanismo de Encaminhamento de Pacotes
- Desempenho e Latência
- Políticas de Rede (Network Policies)
- Observabilidade e Troubleshooting
- Guia de Implementação Prática
- Instalando o Calico
- Instalando o Cilium
- Casos de Uso e Critérios de Decisão
- Quando escolher Calico?
- Quando escolher Cilium?
A Camada de Rede em Kubernetes: O Papel Crítico da CNI
A orquestração de contêineres com kubernetes abstrai complexidades de infraestrutura, mas a comunicação entre os componentes distribuídos de uma aplicação moderna permanece um desafio central. É aqui que a Container Network Interface (CNI) entra em cena. A CNI é uma especificação que define uma interface padrão entre o orquestrador (Kubernetes) e os plugins de rede. A escolha de um plugin CNI não é trivial; ela impacta diretamente a performance, a escalabilidade, a segurança e a observabilidade do cluster. Dentre as dezenas de opções disponíveis, duas se destacam pela popularidade e abordagens tecnológicas distintas: Calico e Cilium.
Calico é conhecido por sua maturidade, escalabilidade e forte integração com a pilha de rede Linux tradicional, utilizando o protocolo BGP. Cilium, por outro lado, representa uma abordagem mais moderna, aproveitando o poder do eBPF (extended Berkeley Packet Filter) para revolucionar o processamento de pacotes diretamente no kernel do Linux. Este artigo técnico oferece uma análise comparativa aprofundada entre Cilium e Calico, explorando suas arquiteturas, mecanismos de funcionamento, performance, políticas de segurança e guias práticos de implementação para auxiliar arquitetos e engenheiros de DevOps a tomar uma decisão informada.
Calico: A Solidez do BGP e a Confiança no Stack de Rede Linux
O Project Calico é um dos plugins CNI mais adotados e testados em produção. Sua filosofia de design se baseia em simplicidade e na utilização de tecnologias de rede bem estabelecidas. Em sua configuração padrão, Calico não utiliza uma rede de overlay (como VXLAN ou IP-in-IP), optando por configurar uma rede L3 pura onde cada pod recebe um endereço IP roteável no cluster. Para propagar as rotas para esses pods entre os nós, Calico utiliza o Border Gateway Protocol (BGP).
Arquitetura e Componentes do Calico
A arquitetura do Calico é composta por alguns componentes chave que rodam em cada nó do cluster:
- Felix: É o agente principal do Calico, executado como um DaemonSet. Sua principal responsabilidade é programar rotas na tabela de roteamento do kernel Linux e configurar as regras de ACLs (Access Control Lists) para implementar as Network Policies do Kubernetes. Historicamente, Felix utilizava iptables para isso, o que, em clusters muito grandes, poderia levar a cadeias de regras extensas e complexas, impactando a performance. Versões mais recentes podem utilizar IPVS ou até mesmo eBPF em um data plane experimental.
- BIRD: Um daemon de roteamento BGP que distribui as informações de rotas entre os nós. Cada nó anuncia os IPs dos pods que está executando, permitindo que o tráfego seja roteado diretamente para o nó correto sem a necessidade de encapsulamento.
- calico-node: O contêiner que agrupa Felix e BIRD, simplificando a implantação.
A grande vantagem dessa abordagem é a performance em redes underlay que suportam BGP. Como não há encapsulamento, o tráfego de pod para pod tem a mesma performance do tráfego nativo do host. Além disso, suas políticas de rede (Kubernetes NetworkPolicy e as CRDs Calico GlobalNetworkPolicy) são extremamente poderosas e granulares para regras de L3/L4, tornando-o uma escolha sólida para ambientes com requisitos de segurança rigorosos.
Cilium: Inovação e Performance com eBPF
Cilium adota uma abordagem fundamentalmente diferente, construída sobre o eBPF. O eBPF é uma tecnologia revolucionária no kernel Linux que permite a execução de programas customizados em um ambiente sandboxed dentro do próprio kernel, sem a necessidade de alterar o código-fonte do kernel ou carregar módulos. Isso abre um leque de possibilidades para networking, segurança e observabilidade.
Arquitetura e o Poder do eBPF
Cilium utiliza programas eBPF para controlar o fluxo de pacotes em vários pontos de hook no kernel. Isso permite que ele implemente funcionalidades de rede de forma muito mais eficiente do que as abordagens baseadas em iptables.
- Encaminhamento de Pacotes: Ao anexar programas eBPF às interfaces de rede (físicas e virtuais), Cilium pode tomar decisões de roteamento e encaminhamento de pacotes no ponto mais inicial possível, evitando a travessia de toda a pilha de rede do kernel e as complexas cadeias de iptables.
- Load Balancing: Cilium pode substituir completamente o kube-proxy. Ele implementa o balanceamento de carga para Services (ClusterIP, NodePort, LoadBalancer) usando mapas eBPF, que são estruturas de dados altamente eficientes no kernel. Isso resulta em uma redução significativa de latência e maior throughput.
- Políticas de Segurança: A implementação de Network Policies em Cilium é baseada em identidade, não apenas em IPs. Ele atribui uma identidade de segurança a cada pod com base em seus labels. As políticas são então aplicadas com base nessas identidades. O mais impressionante é sua capacidade de entender e aplicar políticas em L7 (camada de aplicação), como restringir chamadas a endpoints HTTP específicos (`GET /api/v1/data`) ou a tópicos do Kafka.
Essa profunda integração com o kernel via eBPF confere ao Cilium vantagens significativas em performance, especialmente em cenários de alta densidade de serviços e tráfego intenso. Além disso, ele oferece uma observabilidade sem precedentes através do Hubble, sua ferramenta de visualização e monitoramento.
Análise Comparativa Detalhada: Cilium vs. Calico
A escolha entre Cilium e Calico depende de uma análise cuidadosa de vários fatores técnicos. Vamos detalhar os principais pontos de comparação.
Arquitetura e Mecanismo de Encaminhamento de Pacotes
Calico: Depende primariamente do stack de rede Linux. Para Network Policies e Services, ele manipula regras de iptables ou IPVS. Para roteamento entre nós, utiliza BGP. Embora eficiente, a escala de regras de iptables pode se tornar um gargalo em clusters com milhares de serviços e pods, aumentando a latência de processamento de pacotes.
Cilium: Utiliza eBPF para uma abordagem mais direta. Os programas eBPF implementam a lógica de roteamento, load balancing e políticas de rede. Ao contornar iptables e Netfilter, Cilium consegue um caminho de dados mais curto e eficiente. A substituição do kube-proxy é um diferencial chave, eliminando uma fonte comum de contenção e complexidade.
Desempenho e Latência
Em benchmarks sintéticos e cenários de produção, Cilium geralmente demonstra menor latência e maior throughput, especialmente para a implementação de Services (load balancing). A razão é o processamento direto no socket/TC (Traffic Control) via eBPF, que é inerentemente mais rápido do que a travessia das cadeias de iptables que o Calico (em seu modo padrão) e o kube-proxy utilizam. Para tráfego pod-a-pod em uma rede L3 pura, a performance do Calico é excelente, mas o custo de processamento das políticas e dos services ainda recai sobre o iptables.
Políticas de Rede (Network Policies)
Calico: É extremamente robusto e maduro em políticas de rede de L3/L4. Suas CRDs, como GlobalNetworkPolicy, permitem a criação de políticas que abrangem todo o cluster, namespaces específicos, hosts e até mesmo VMs externas. É a escolha padrão para quem precisa de segmentação de rede baseada em IP/porta de forma rigorosa e comprovada.
Cilium: Vai além. Enquanto suporta totalmente a API padrão de NetworkPolicy, seu poder reside nas CiliumNetworkPolicy (CRDs). Elas permitem políticas baseadas em L7, como: `Allow endpoint A to call GET /public on endpoint B`. Também suporta políticas baseadas em FQDN/DNS, permitindo regras de egress para nomes de domínio específicos (ex: `api.externa.com`), uma funcionalidade crucial em ambientes de segurança zero-trust.
Observabilidade e Troubleshooting
Calico: Oferece métricas Prometheus padrão e logs detalhados sobre as ações do Felix. O troubleshooting geralmente envolve ferramentas Linux padrão como `iptables-save`, `ip route` e `tcpdump`. A versão enterprise, Calico Enterprise, oferece ferramentas de visualização mais avançadas.
Cilium: Este é um dos seus maiores diferenciais. O Hubble, componente de observabilidade do Cilium, fornece uma visibilidade profunda e em tempo real do fluxo de tráfego. Com sua UI e CLI, é possível ver mapas de dependência de serviços, inspecionar fluxos de rede individuais (incluindo metadados de L7 como paths HTTP e tópicos Kafka) e ver por que um pacote foi permitido ou descartado pela política de rede. Isso acelera drasticamente o troubleshooting de problemas de conectividade.
Guia de Implementação Prática
A instalação de ambos os CNIs foi simplificada ao longo do tempo, com métodos de implantação bem documentados.
Instalando o Calico
A instalação mais comum do Calico é através da aplicação de um único manifesto YAML, que pode ser customizado conforme a necessidade.
1. Obtenha o manifesto do site oficial do Project Calico: `kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml`
2. Antes de aplicar, é crucial verificar e, se necessário, ajustar o CIDR de pods detectado automaticamente pelo manifesto. Isso pode ser feito editando a variável de ambiente `CALICO_IPV4POOL_CIDR` no DaemonSet `calico-node`.
3. Após a aplicação, monitore o status dos pods no namespace `kube-system` ou `calico-system` até que todos estejam em estado `Running`.
Instalando o Cilium
A forma recomendada de instalar o Cilium é utilizando seu chart Helm oficial, que oferece um alto grau de customização.
1. Adicione o repositório Helm do Cilium: `helm repo add cilium https://helm.cilium.io/`
2. Instale o chart com as configurações desejadas. Um exemplo de instalação que substitui o kube-proxy e habilita o Hubble seria:
“`shell
helm install cilium cilium/cilium –version 1.14.0 –namespace kube-system –set kubeProxyReplacement=strict –set hubble.relay.enabled=true –set hubble.ui.enabled=true
“`
3. É fundamental garantir que o kernel dos nós do cluster atenda aos requisitos mínimos de versão do Cilium para o funcionamento correto do eBPF.
Casos de Uso e Critérios de Decisão
A escolha final deve ser guiada pelos requisitos específicos do seu ambiente e workload.
Quando escolher Calico?
- Integração com Infraestrutura Existente: Se você opera em um ambiente on-premise com uma infraestrutura de rede que já utiliza BGP, o Calico se integra de forma natural e eficiente.
- Maturidade e Simplicidade: Para equipes que preferem uma solução amplamente testada, com uma arquitetura baseada em componentes de rede Linux conhecidos, o Calico é uma opção segura.
- Foco em Políticas L3/L4: Se seus requisitos de segurança se concentram estritamente na segmentação de rede por IP e porta, as políticas do Calico são mais do que suficientes e extremamente poderosas.
Quando escolher Cilium?
- Performance Extrema: Para aplicações sensíveis à latência, como trading de alta frequência, processamento de dados em tempo real ou gateways de API de alto tráfego, os ganhos de performance do eBPF e da substituição do kube-proxy são significativos.
- Segurança e Observabilidade Avançadas: Se você precisa de políticas de rede que entendam o tráfego da aplicação (L7) e de uma ferramenta de observabilidade nativa que forneça visibilidade profunda dos fluxos de serviço, Cilium e Hubble são incomparáveis.
- Ambientes Cloud-Native Modernos: Em arquiteturas de microsserviços complexas, onde a depuração de problemas de conectividade é difícil e a segurança zero-trust é um objetivo, as capacidades do Cilium oferecem um valor imenso.
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.



