Visão geral
Por que precisamos de ingresses
Um Serviço é geralmente usado para encaminhar solicitações de acesso baseadas em TCP e UDP e fornecer balanceamento de carga de camada 4 para clusters. No entanto, em cenários reais, se houver um grande número de solicitações de acesso HTTP/HTTPS na camada de aplicações, o Serviço não poderá atender aos requisitos de encaminhamento. Portanto, o cluster do Kubernetes fornece um modo de acesso baseado em HTTP, ingress.
Um ingress é um recurso independente no cluster do Kubernetes e define regras para o encaminhamento de tráfego de acesso externo. Conforme mostrado em Figura 1, você pode personalizar regras de encaminhamento com base em nomes de domínio e URLs para implementar a distribuição refinada do tráfego de acesso.
A seguir, descrevem-se as definições relacionadas ao ingress:
- Ingress object: um conjunto de regras de acesso que encaminham solicitações para serviços específicos com base em nomes de domínio ou URLs. Ele pode ser adicionado, excluído, modificado e consultado chamando APIs.
- Ingress Controller: um executor para encaminhamento de solicitações. Ele monitora as mudanças de objetos de recursos, como ingresses, Serviços, pontos de extremidade, segredos (principalmente certificados e chaves TLS), nós e ConfigMaps em tempo real, analisa regras definidas por ingresses e encaminha solicitações para os Serviços de back-end correspondentes.
Ingress Controllers fornecidos por diferentes fornecedores são implementados de maneiras diferentes. Com base nos tipos de balanceadores de carga, Ingress Controllers são classificados em ELB Ingress Controller e Nginx Ingress Controller. Ambos são suportados no CCE. O ELB Ingress Controller encaminha o tráfego através do ELB. O Nginx Ingress Controller usa os modelos e imagens mantidos pela comunidade Kubernetes para encaminhar o tráfego através do componente do Nginx.
Comparação de recursos de ingress
Recurso |
ELB Ingress Controller |
Nginx Ingress Controller |
---|---|---|
O&M |
Sem O&M |
Auto-instalação, atualização e manutenção |
Desempenho |
Um ingress suporta apenas um balanceador de carga. |
Vários ingresses suportam um balanceador de carga. |
Balanceadores de carga de nível empresarial são usados para fornecer alto desempenho e alta disponibilidade. O encaminhamento de serviço não é afetado em cenários de atualização e falha. |
O desempenho varia dependendo da configuração de recursos dos pods. |
|
O carregamento dinâmico é suportado. |
|
|
Implementação de componentes |
Implementado no nó mestre |
Implementado em nós de trabalho e custos operacionais necessários para o componente de Nginx |
Redirecionamento de rota |
Não compatível |
Compatível |
Configuração SSL |
Compatível |
Compatível |
Usar ingress como um proxy para serviços de back-end |
Compatível |
Compatível, que pode ser implementado através de backend-protocol: anotações de HTTPS. |
O ingress do ELB é essencialmente diferente do ingress do Nginx de código aberto. Portanto, seus tipos de Serviço suportados são diferentes. Para mais detalhes, consulte Serviços suportados por ingresses.
O ELB Ingress Controller é implementado em um nó principal. Todas as políticas e comportamentos de encaminhamento são configurados no lado do ELB. Balanceadores de carga fora do cluster podem se conectar a nós no cluster somente por meio do endereço IP da VPC em cenários de rede não passantes. Portanto, o Ingress do ELB oferece suporte apenas aos Serviços NodePort. No entanto, no cenário de rede de passagem (cluster do CCE Turbo + balanceador de carga dedicado), o ELB pode encaminhar diretamente o tráfego para pods no cluster. Neste caso, o ingress só pode interconectar com Serviços ClusterIP.
Nginx Ingress Controller é executado em um cluster e é exposto como um serviço através do NodePort. O tráfego é encaminhado para outros Serviços no cluster por meio do Nginx-ingress. O comportamento de encaminhamento de tráfego e o objeto de encaminhamento estão no cluster. Portanto, ambos os serviços ClusterIP e NodePort são suportados.
Em conclusão, o ELB Ingress usa balanceadores de carga de nível empresarial para encaminhar o tráfego e oferece alto desempenho e estabilidade. O Nginx Ingress Controller é implementado em nós de cluster, que consomem recursos de cluster, mas têm melhor capacidade de configuração.
Princípio de funcionamento do ELB Ingress Controller
O ELB Ingress Controller desenvolvido pelo CCE implementa o acesso de rede de camada 7 para a Internet e intranet (na mesma VPC) com base no ELB e distribui o tráfego de acesso aos Serviços correspondentes usando URLs diferentes.
O ELB Ingress Controller é impllementado no nó principal e vinculado ao balanceador de carga na VPC onde o cluster reside. Diferentes nomes de domínio, portas e políticas de encaminhamento podem ser configurados para o mesmo balanceador de carga (com o mesmo endereço IP). Figura 2 mostra o princípio de funcionamento do ELB Ingress Controller.
- Um usuário cria um objeto de ingress e configura uma regra de acesso de tráfego no ingress, incluindo o balanceador de carga, o URL, o SSL e a porta de serviço de back-end.
- Quando Ingress Controller detecta que o objeto de ingress muda, reconfigura a rota do servidor do ouvinte e do back-end no lado do ELB de acordo com a regra de acesso de tráfego.
- Quando um usuário acessa uma carga de trabalho, o tráfego é encaminhado para a porta de serviço de back-end correspondente com base na política de encaminhamento configurada no ELB e, em seguida, encaminhado para cada carga de trabalho associada por meio do Serviço.
Princípio de funcionamento do Nginx Ingress Controller
Um Nginx ingress usa ELB como entrada de tráfego. O complemento nginx-ingress é implementado em um cluster para equilibrar o tráfego e controlar o acesso.
O complemento nginx-ingress no CCE é implementado usando o gráfico e a imagem da comunidade de código aberto. O CCE não mantém o complemento. Portanto, não é recomendável que o complemento nginx-ingress seja usado comercialmente.
Você pode visitar a comunidade de código aberto para obter mais informações.
O Nginx Ingress Controller é implementado em nós de trabalho por meio de pods, o que resultará em custos de O&M e sobrecargas de execução de componentes Nginx. Figura 3 mostra os princípios de funcionamento do Nginx Ingress Controller.
- Depois de atualizar os recursos de entrada, o Nginx Ingress Controller grava uma regra de encaminhamento definida nos recursos de entrada no arquivo de configuração nginx.conf do Nginx.
- O componente interno do Nginx recarrega o arquivo de configuração atualizado para modificar e atualizar a regra de encaminhamento do Nginx.
- Quando o tráfego acessa um cluster, o tráfego é primeiro encaminhado pelo balanceador de carga criado para o componente do Nginx no cluster. Em seguida, o componente de Nginx encaminha o tráfego para cada carga de trabalho com base na regra de encaminhamento.
Serviços suportados por ingresses
Tipo de cluster |
Tipo do ELB |
ClusterIP |
NodePort |
---|---|---|---|
Cluster do CCE |
Balanceador de carga compartilhado |
Não compatível |
Compatível |
Balanceador de carga dedicado |
Não suportado (Falha ao acessar os balanceadores de carga dedicados porque nenhuma ENI está vinculada ao pod associado do Serviço ClusterIP.) |
Compatível |
|
Cluster do CCE Turbo |
Balanceador de carga compartilhado |
Não compatível |
Compatível |
Balanceador de carga dedicado |
Compatível |
Não suportado (Falha ao acessar os balanceadores de carga dedicados porque um ENI foi vinculado ao pod associado do Serviço NodePort.) |
Tipo de cluster |
Tipo do ELB |
ClusterIP |
NodePort |
---|---|---|---|
Cluster do CCE |
Balanceador de carga compartilhado |
Compatível |
Compatível |
Balanceador de carga dedicado |
Compatível |
Compatível |
|
Cluster do CCE Turbo |
Balanceador de carga compartilhado |
Compatível |
Compatível |
Balanceador de carga dedicado |
Compatível |
Compatível |