BLOG | NGINX

Controladores NGINX e NGINX Plus Ingress para balanceamento de carga do Kubernetes

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Michael Pleshakov
Michael Pleshakov
Publicado em 05 de dezembro de 2016

Executar e gerenciar aplicativos de microsserviços em contêineres em escala em um cluster de máquinas é uma tarefa desafiadora. O Kubernetes ajuda você a enfrentar o desafio oferecendo uma solução poderosa para orquestração de contêineres. Ele inclui vários recursos importantes, como tolerância a falhas, dimensionamento automático, atualizações contínuas, armazenamento, descoberta de serviços e balanceamento de carga.

Nesta postagem do blog, explicamos como usar o NGINX Open Source ou o NGINX Plus com o Ingress , a estrutura de balanceamento de carga integrada do Kubernetes para tráfego HTTP. O Ingress permite que você configure regras que controlam o roteamento de tráfego externo para os serviços no seu cluster Kubernetes. Você pode escolher qualquer balanceador de carga que forneça um controlador Ingress , que é um software que você implanta no seu cluster para integrar o Kubernetes e o balanceador de carga. Aqui mostramos como configurar o balanceamento de carga para um aplicativo de microsserviços com o Ingress e os controladores Ingress que fornecemos para NGINX Plus e NGINX.

[Editor – Os controladores anteriormente separados para NGINX e NGINX Plus foram mesclados em um único controlador Ingress para ambos.]

Nesta postagem do blog, examinamos apenas o balanceamento de carga HTTP para Kubernetes com Ingress. Para saber mais sobre outras opções de balanceamento de carga, consulte Balanceamento de carga de serviços do Kubernetes com o NGINX Plus em nosso blog.

Observação:  Instruções completas para os procedimentos discutidos nesta postagem do blog estão disponíveis em nosso repositório GitHub . Esta postagem não aborda todas as etapas necessárias, mas fornece links para essas instruções.

Controladores de entrada para NGINX e NGINX Plus

Antes de implantar o aplicativo de exemplo e configurar o balanceamento de carga para ele, precisamos escolher um balanceador de carga e implantar o controlador Ingress correspondente.

Um controlador Ingress é um software que integra um balanceador de carga específico com o Kubernetes. Desenvolvemos um controlador Ingress para NGINX Open Source e NGINX Plus, agora disponível em nosso repositório GitHub . Há também outras implementações criadas por terceiros; para saber mais, visite a página Ingress Controllers no repositório GitHub para Kubernetes.

Para obter instruções completas sobre como implantar o controlador NGINX ou NGINX Plus Ingress em seu cluster, consulte nosso repositório GitHub .

O aplicativo de microsserviços de exemplo

Nosso aplicativo de exemplo é um aplicativo web de microsserviços típico que consiste em vários serviços, cada um implantado separadamente. O aplicativo, chamado café , permite que você peça chá pelo serviço de chá ou café pelo serviço de café . Você indica sua preferência de bebida com o URI da sua solicitação HTTP: URIs terminando com /tea lhe dão chá e URIs terminando com /coffee lhe dão café. As conexões com o aplicativo devem ser protegidas com SSL/TLS.

O diagrama abaixo descreve conceitualmente o aplicativo, com o balanceador de carga NGINX Plus desempenhando o importante papel de rotear solicitações do cliente para o serviço apropriado, bem como proteger as conexões do cliente com SSL/TLS.

O aplicativo de microsserviços 'cafe' de exemplo fornecido com os controladores NGINX e NGINX Plus Ingress ilustra o balanceamento de carga do Kubernetes

Para implantar o aplicativo em seu cluster, siga as instruções em nosso repositório GitHub .

Configurando o balanceamento de carga do Kubernetes via Ingress

Nosso aplicativo de café requer que o balanceador de carga forneça duas funções:

  • Roteamento baseado no URI da solicitação (também chamado de roteamento baseado em caminho )
  • Encerramento do SSL/TLS

Para configurar o balanceamento de carga com o Ingress, defina regras em um recurso do Ingress . As regras especificam como rotear o tráfego externo para os serviços no seu cluster.

No recurso, você pode definir vários servidores virtuais, cada um para um nome de domínio diferente. Um servidor virtual geralmente corresponde a um único aplicativo de microsserviços implantado no cluster. Para cada servidor, você pode:

  • Especifique várias regras baseadas em caminho. O tráfego é enviado para diferentes serviços em um aplicativo com base no URI da solicitação.
  • Configure a terminação SSL/TLS referenciando um certificado e uma chave SSL/TLS.

Você pode encontrar uma explicação mais detalhada do Ingress, com exemplos, na página de documentação do Ingress .

Aqui está o recurso Ingress ( cafe‑ingress.yaml ) para o aplicativo do café :

 

Examinando linha por linha, vemos:

  • Na linha 4 nomeamos o recurso cafe‑ingress .
  • Nas linhas 6–9 configuramos a terminação SSL/TLS:

    • Na linha 9, referenciamos um recurso Secret pelo seu nome cafe‑secret . Este recurso contém o certificado e a chave SSL/TLS e deve ser implantado antes do recurso Ingress.
    • Na linha 8, aplicamos o certificado e a chave ao nosso servidor virtual cafe.example.com .
  • Na linha 11, definimos um servidor virtual com nome de domínio cafe.example.com .
  • Nas linhas 13–21 definimos duas regras baseadas em caminhos:

    • A regra definida nas linhas 14–17 instrui o balanceador de carga a distribuir as solicitações com o URI /tea entre os contêineres do serviço tea , que é implantado com o nome tea‑svc no cluster.
    • A regra definida nas linhas 18–21 instrui o balanceador de carga a distribuir as solicitações com o URI /coffee entre os contêineres do serviço de café , que é implantado com o nome coffee‑svc no cluster.
    • Ambas as regras instruem o balanceador de carga a distribuir as solicitações para a porta 80 do serviço correspondente.

Para obter instruções completas sobre como implantar os recursos Ingress e Secret no cluster, consulte nosso repositório GitHub .

Testando o aplicativo

Depois de implantar o controlador NGINX Plus Ingress, nosso aplicativo, o recurso Ingress e o recurso Secret, podemos testar o aplicativo.

Quando fazemos uma solicitação de chá com o URI /tea , no navegador vemos uma página gerada pelo serviço de chá .

O microsserviço de amostra 'tea' fornecido com os controladores NGINX e NGINX Plus Ingress para balanceamento de carga do Kubernetes retorna uma página de índice com detalhes da solicitação

Esperamos que você não fique muito desapontado porque os serviços de chá e café não oferecem bebidas, mas sim informações sobre os recipientes em que são servidos e os detalhes da sua solicitação. Eles incluem o nome do host e o endereço IP do contêiner, o URI da solicitação e o endereço IP do cliente. Cada vez que atualizamos a página, obtemos uma resposta de um contêiner diferente.

Também podemos nos conectar ao painel de monitoramento de atividades ao vivo do NGINX Plus e ver métricas de balanceamento de carga em tempo real do NGINX Plus e de cada contêiner do nosso aplicativo.

O painel de monitoramento de atividades ao vivo do NGINX Plus mostra as solicitações de balanceamento de carga do NGINX Plus entre os microsserviços no aplicativo de exemplo 'cafe' fornecido com os controladores NGINX e NGINX Plus Ingress para balanceamento de carga do Kubernetes

Extensões do controlador Ingress

O Ingress fornece funcionalidade básica de balanceamento de carga HTTP. No entanto, muitas vezes os requisitos de balanceamento de carga para seus aplicativos são mais complexos e, portanto, não são suportados pelo Ingress. Para atender a alguns desses requisitos, adicionamos uma série de extensões ao controlador Ingress. Dessa forma, você ainda pode aproveitar a vantagem de usar os recursos do Kubernetes para configurar o balanceamento de carga (em vez de ter que configurar o balanceador de carga diretamente), mas aproveitando a capacidade de utilizar recursos avançados de balanceamento de carga.

Para uma lista completa das extensões disponíveis, consulte nosso repositório GitHub .

Além disso, fornecemos um mecanismo para personalizar a configuração do NGINX por meio de recursos do Kubernetes, via recursos do Config Maps ou Anotações. Por exemplo, você pode personalizar valores das diretivas proxy_connect_timeout ou proxy_read_timeout .

Quando seus requisitos de balanceamento de carga vão além daqueles suportados pelo Ingress e nossas extensões, sugerimos uma abordagem diferente para implantar e configurar o NGINX Plus que não usa o controlador Ingress. Leia Balanceamento de carga de serviços do Kubernetes com o NGINX Plus em nosso blog para saber mais.

Benefícios do NGINX Plus com o controlador

Com o NGINX Plus, o controlador Ingress oferece os seguintes benefícios, além daqueles que você obtém com o NGINX:

  • Estabilidade em um ambiente altamente dinâmico – Toda vez que há uma alteração no número de pods de serviços expostos via Ingress, o controlador Ingress precisa atualizar a configuração do NGINX ou NGINX Plus para refletir as alterações. Com o NGINX Open Source, você deve alterar o arquivo de configuração manualmente e recarregar a configuração. Com o NGINX Plus, você pode usar a API de reconfiguração dinâmica para atualizar a configuração sem recarregar o arquivo de configuração. Isso evita o potencial aumento no uso de memória e a sobrecarga geral do sistema que podem ocorrer quando as recargas de configuração são muito frequentes.
  • Estatísticas em tempo real – O NGINX Plus fornece estatísticas avançadas em tempo real , que você pode acessar por meio de uma API ou no painel integrado. Isso pode lhe dar insights sobre o desempenho do NGINX Plus e de seus aplicativos.
  • Persistência de sessão – Quando você habilita a persistência de sessão, o NGINX Plus garante que todas as solicitações do mesmo cliente sejam sempre passadas para o mesmo contêiner de backend usando o método de cookie fixo .

Resumo

O Kubernetes fornece balanceamento de carga HTTP integrado para rotear tráfego externo para os serviços no cluster com o Ingress. O NGINX e o NGINX Plus integram-se ao balanceamento de carga do Kubernetes, oferecendo suporte total aos recursos do Ingress e também fornecendo extensões para dar suporte a requisitos estendidos de balanceamento de carga.

Para experimentar o NGINX Plus e o controlador Ingress, comece hoje mesmo seu teste gratuito de 30 dias ou entre em contato conosco para discutir seus casos de uso .


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."