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 Runner
ou pluginsWASM
para 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.