Por que o APISIX Ingress Controller é uma escolha melhor que o Emissary-ingress?

Xin Rong

March 17, 2023

Products

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.

Ingress

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.

apisix-ingress-controller

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.

emissary-ingress

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

FuncionalidadeAPISIX IngressEmissary-ingress
ProtocolosHTTP/HTTPS✓✓
gRPC✓✓
TCP✓✓
UDP✓✕
Websockets✓✓
Balanceamento de cargaRound Robin✓✓
Ring Hash✓✓
Least Connections✓✓
Maglev✕✓
AutenticaçãoExternal Auth✓✓
Basic✓✓
JWT✓✕
OAuth✓✕
OpenID✓✕
Gerenciamento de TráfegoCircuit 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çosApache APISIX Ingress ControllerEmissary-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:

  1. 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.
  2. Além da linguagem Lua nativa, você também pode usar Plugin Runner ou plugins WASM 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.

1-ingress-qps

  • 5000 Ingress Resource QPS

5000-ingress-qps

Latência

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

latency

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.

Tags:
Share article link