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: