Por que o APISIX Ingress Controller é uma escolha melhor que o Emissary-ingress?
Xin Rong
March 17, 2023
Informações de Fundo
O Kubernetes Ingress é um objeto de API usado para definir regras de roteamento de tráfego externo para serviços internos em um cluster. Um Ingress Controller é comumente usado para implementar a lógica do recurso Ingress e gerenciar essas regras de tráfego de forma centralizada.

Na prática, os usuários empresariais geralmente precisam de funções de gerenciamento de tráfego, como mTLS, retentativas, limitação de taxa e autenticação, que a semântica do recurso Ingress não consegue atender. Portanto, as implementações do Ingress Controller geralmente estendem as funções adicionando CRDs adicionais. A seguir, será feita uma comparação detalhada das diferenças entre as implementações do APISIX Ingress Controller e do Emissary-Ingress.
O que é o Apache APISIX Ingress Controller
Apache APISIX Ingress Controller é um projeto de código aberto sob a ASF (Apache Software Foundation). Seu plano de controle configura e entrega recursos no Kubernetes, enquanto o APISIX lida com o tráfego de negócios real. Para melhorar a segurança, todo o processo de implantação utiliza uma arquitetura completamente separada de plano de dados e plano de controle, evitando efetivamente o risco de vazamento de permissões do cluster Kubernetes causado por ataques ao plano de dados.

O que é o Emissary-Ingress
Emissary-Ingress é um projeto em incubação da CNCF (Cloud Native Computing Foundation). Como o plano de controle do proxy Envoy, ele é responsável por analisar os recursos do Kubernetes, e todo o tráfego é processado diretamente pelo Envoy no plano de dados. Ao empacotar o plano de controle e o plano de dados em um único contêiner, o todo se torna mais fácil de acessar e implantar.

A Diferença entre o APISIX Ingress Controller e o Emissary-Ingress
Além de suportar recursos Ingress, tanto o APISIX Ingress Controller quanto o Emissary-Ingress podem suportar configurações por meio de CRDs e Gateway API para complementar as limitações da semântica do Ingress.
As seções a seguir analisarão as diferenças e vantagens entre os dois sob as perspectivas de funcionalidades básicas, descoberta de serviços e escalabilidade.
Funcionalidades Básicas
| Funcionalidade | APISIX Ingress | Emissary-ingress | |
| Protocolos | HTTP/HTTPS | ✓ | ✓ |
| gRPC | ✓ | ✓ | |
| TCP | ✓ | ✓ | |
| UDP | ✓ | ✕ | |
| Websockets | ✓ | ✓ | |
| Balanceamento de carga | Round Robin | ✓ | ✓ |
| Ring Hash | ✓ | ✓ | |
| Least Connections | ✓ | ✓ | |
| Maglev | ✕ | ✓ | |
| Autenticação | External Auth | ✓ | ✓ |
| Basic | ✓ | ✓ | |
| JWT | ✓ | ✕ | |
| OAuth | ✓ | ✕ | |
| OpenID | ✓ | ✕ | |
| Gerenciamento de Tráfego | Circuit Breaker | ✓ | ✓ |
| Rate Limiting | ✓ | ✓ | |
| Canary | ✓ | ✓ | |
| Fault Injection | ✓ | ✕ | |
| Health Checks | ✓ | ✓ | |
As funções comuns de gateway incluem gerenciamento de tráfego, balanceamento de carga e autenticação. No entanto, é importante notar que o Emissary-Ingress tem suporte relativamente limitado para autenticação, contendo apenas capacidades de Basic Auth e External Auth.
Descoberta de Serviços
Na arquitetura de microsserviços, os aplicativos geralmente são divididos em vários microsserviços que trabalham juntos para realizar uma lógica de negócios específica. Como o número de instâncias de microsserviços muda constantemente, é necessário um mecanismo para ajudar os serviços a se descobrirem e localizarem uns aos outros.
A descoberta de serviços refere-se à forma como os microsserviços são localizados na rede, obtendo informações sobre a descoberta de serviços por meio do nome do serviço para determinar para qual instância a solicitação será roteada.
Para frameworks de microsserviços tradicionais, a seleção de um registro geralmente é baseada em requisitos de negócios específicos. No entanto, migrar um componente existente de registro e descoberta de serviços para um mecanismo de descoberta de serviços baseado em DNS no Kubernetes pode envolver certos custos em termos de modificações.
Por outro lado, se o gateway suportar os componentes atuais de registro e descoberta de serviços, não há necessidade de tais modificações, o que pode resultar em um melhor suporte para frameworks de microsserviços.
Aqui estão as situações de suporte dos dois para componentes de descoberta de serviços:
| Descoberta de Serviços | Apache APISIX Ingress Controller | Emissary-Ingress |
|---|---|---|
| Kubernetes | ✓ | ✓ |
| DNS | ✓ | ✓ |
| Nacos | ✓ | ✕ |
| Eureka | ✓ | ✕ |
| Consul | ✓ | ✓ |
Em relação ao ecossistema de descoberta de serviços, o APISIX Ingress Controller tem um suporte mais forte, e os usuários podem integrá-lo facilmente ao seu framework de microsserviços existente por meio do Ingress controller.
Escalabilidade
Quando a funcionalidade do Kubernetes Ingress controller não atende a requisitos específicos, os usuários podem estender sua funcionalidade por meio de desenvolvimento personalizado. Necessidades mais personalizadas podem ser atendidas desenvolvendo plugins personalizados ou modificando o código existente. Ingress controllers com robusta escalabilidade podem tornar o desenvolvimento e a personalização de recursos mais fáceis, fornecendo melhor suporte e soluções para cenários específicos.
Emissary-Ingress
A extensibilidade do Emissary-Ingress é relativamente fraca, pois não suporta extensão por meio do Envoy Filter personalizado. Como o plano de dados e o plano de controle estão integrados, é necessário o desenvolvimento personalizado de todo o sistema. A complexidade do desenvolvimento personalizado para o plano de dados Envoy é alta e representa um fardo significativo para os desenvolvedores.
Além disso, se os usuários precisarem de um Emissary-Ingress mais poderoso, eles precisam atualizá-lo para o produto comercial da Ambassador, o Edge Stack. Alguns recursos proprietários exigem pagamento para obter suporte.
APISIX Ingress Controller
O plano de dados do APISIX estende principalmente sua funcionalidade por meio de plugins, que fornecem mais de 80 plugins prontos para uso. O APISIX Ingress Controller suporta todos os plugins fornecidos pelo APISIX, o que pode atender à maioria dos casos de uso diários.
Se for necessária personalização com base em cenários de negócios específicos, o APISIX oferece várias opções de extensão para os usuários escolherem e combinarem livremente de acordo com suas situações. Os métodos de extensão atualmente suportados são os seguintes:
- Desenvolvimento de plugins usando a linguagem Lua, que é relativamente simples e quase sem perda de desempenho. Além disso, você pode usar o plugin serverless para escrever código Lua diretamente, o que pode atender rapidamente às necessidades de negócios.
- Além da linguagem Lua nativa, você também pode usar
Plugin Runnerou pluginsWASMpara extensão, que suportam o desenvolvimento de plugins personalizados em linguagens de codificação como Java, Python e Go. Isso permite que os usuários utilizem sua lógica de negócios existente e selecionem com base na pilha de tecnologia ou preferências de desenvolvimento da empresa, sem exigir uma nova linguagem.
O APISIX Ingress Controller suporta totalmente os métodos de extensão acima, sem a necessidade de desenvolvimentos adicionais.
Desempenho
Como um componente de proxy de tráfego de entrada do Kubernetes, ele gerencia todo o tráfego de entrada da plataforma e gerencia de forma unificada várias regras de tráfego, colocando demandas mais altas no desempenho do proxy.
Neste artigo, faremos testes de desempenho no APISIX Ingress Controller (APISIX: 3.1.0) e no Emissary-Ingress 3.4.0 na mesma instância (4C 8G).
QPS
QPS (Queries-per-second) representa o número de consultas que um serviço pode lidar por segundo. Quanto maior o número, melhor o desempenho.

- 5000 Ingress Resource QPS

Latência
Latência de resposta: o tempo que o servidor leva para responder. Quanto menor o atraso, melhor o desempenho.

O gráfico mostra que o APISIX Ingress Controller mantém um desempenho consistente em diferentes escalas de recursos, demonstrando um desempenho bem equilibrado.
Por outro lado, o Emissary-Ingress tem um impacto significativo no QPS e na latência ao lidar com grandes escalas de recursos e diferentes correspondências de roteamento, com o desempenho diminuindo à medida que o número de recursos aumenta. Portanto, à medida que o volume de negócios cresce em ambientes de produção reais, o alto desempenho do APISIX se torna mais evidente.
Conclusão
O Emissary-Ingress é caracterizado por simplicidade e facilidade de integração, mas é mais difícil para desenvolvimento personalizado. Além disso, requisitos adicionais de funcionalidades dependem dos componentes relacionados da plataforma para suporte.
Em comparação, o APISIX Ingress Controller tem vantagens em escalabilidade e integração de descoberta de serviços, com forte extensibilidade e desenvolvimento simples. Além disso, o APISIX Ingress Controller tem um desempenho excepcional, especialmente em cenários onde a escala de negócios continua a crescer, mostrando vantagens significativas.