O que é o Kubernetes Ingress?

Publicado 30/04/2020
Notebook com tela rosa brilhante ao lado de um monitor rosa grande e um mouse em uma superfície escura com iluminação de fundo preta.
By Ravi Saraswathi

Definição do Kubernetes Ingress

O Kubernetes Ingress é um objeto de API que fornece regras de roteamento para gerenciar o acesso de usuários externos aos serviços em um cluster do Kubernetes.

Neste artigo, veremos como e por que você pode precisar expor uma aplicação ao exterior de seu cluster do Kubernetes, as diferentes opções disponíveis e as situações em que o Kubernetes Ingress é mais útil. Este blog pressupõe que você tenha conhecimentos básicos do Kubernetes, mas se precisar de mais informações básicas, confira os seguintes recursos:

Opções para expor aplicações implementadas no Kubernetes

Há várias maneiras de expor sua aplicação ao exterior do cluster do Kubernetes, e você vai querer selecionar a apropriada com base em seu caso de uso específico. 

As quatro opções principais que compararemos neste post são: ClusterIP, NodePort, LoadBalancer e Ingress. Cada uma delas proporciona uma forma de expor serviços e é útil em diferentes situações. Um serviço é essencialmente um front-end para a sua aplicação que redireciona automaticamente o tráfego para pods disponíveis de maneira uniformemente distribuída. Os serviços são uma maneira abstrata de expor uma aplicação em execução em um conjunto de pods como um serviço de rede. Os pods são imutáveis, o que significa que, quando morrem, não são ressuscitados. O cluster do Kubernetes cria novos pods no mesmo nó ou em um novo nó quando um pod é desativado. 

Semelhante a pods e implementações, os serviços são recursos no Kubernetes. Um serviço fornece um único ponto de acesso de fora do cluster do Kubernetes e permite que você acesse dinamicamente um grupo de pods de réplica. 

Para acesso a aplicações internas em um cluster do Kubernetes, o ClusterIP é o método preferencial. É uma configuração padrão no Kubernetes e usa um endereço IP interno para acessar o serviço.

Para expor um serviço a solicitações de rede externa, NodePort, LoadBalancer e Ingress são opções possíveis. Vamos analisar o Ingress primeiro e comparar os serviços mais adiante no artigo.

O que é o Kubernetes Ingress e por que ele é útil?

O Kubernetes Ingress é um objeto de API que fornece regras de roteamento para gerenciar o acesso de usuários externos aos serviços em um cluster do Kubernetes, geralmente via HTTPS/HTTP. Com o Ingress, você pode configurar facilmente regras para rotear tráfego sem criar vários LoadBalancers ou expor cada serviço no nó. Isso o torna a melhor opção para uso em ambientes de produção. 

Em ambientes de produção, você normalmente precisa de roteamento baseado em conteúdo, compatibilidade com vários protocolos e autenticação. O Ingress permite configurar e gerenciar esses recursos dentro do cluster.

O Ingress é composto por um objeto de API do Ingress e o Ingress Controller. Como discutimos, o Kubernetes Ingress é um objeto de API que descreve o estado desejado para expor serviços para o exterior do cluster do Kubernetes. Um Controlador do Ingress é essencial porque é a implementação real da API do Ingress. Um Ingress Controller lê e processa as informações do Ingress Resource e geralmente é executado como pods dentro do cluster do Kubernetes.

Um Ingress fornece o seguinte:

  • URLs alcançáveis externamente para aplicações implementadas em clusters do Kubernetes
  • Compatibilidade com host virtual baseado em nome e roteamento baseado em URI
  • Regras de balanceamento de carga e tráfego, bem como terminação de SSL

Para uma visão geral visual rápida do Kubernetes Ingress, confira o vídeo a seguir:

O que é o Ingress Controller?

Se o Kubernetes Ingress é o objeto de API que fornece regras de roteamento para gerenciar o acesso externo a serviços, o Controlador do Ingress é a implementação real da API do Ingress. O Controlador do Ingress geralmente é um LoadBalancer para rotear tráfego externo para seu cluster do Kubernetes e é responsável pelos serviços de rede L4-L7. 

A camada 4 (L4) refere-se ao nível de conexão da stack de OSI — conexões externas com balanceamento de carga de maneira round-robin entre pods. A camada 7 (L7) refere-se ao nível de aplicação da stack de OSI—conexões externas com balanceamento de carga entre pods, com base nas solicitações. A camada 7 é frequentemente preferida, mas você deve selecionar um Controlador do Ingress que atenda a seus requisitos de balanceamento de carga e roteamento.

O Controlador do Ingress é responsável por ler as informações do Ingress Resource e processar esses dados adequadamente. Veja a seguir um exemplo de Ingress Resource:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress 
spec:
  backend:
    serviceName:ServiceName
    servicePort:<Port Number>

Como analogia, se o Kubernetes Ingress é um computador, então o Controlador do Ingress é um programador usando o computador e agindo. Além disso, os Ingress Rules atuam como o gerente que orienta o programador a fazer o trabalho usando o computador. Os Ingress Rules são um conjunto de regras para processar o tráfego HTTP de entrada. Um Ingress sem regras envia todo o tráfego para um único serviço de back-end padrão. 

Olhando mais a fundo, o Controlador do Ingress é uma aplicação que é executada em um cluster do Kubernetes e configura um LoadBalancer HTTP de acordo com os Ingress Resources. O LoadBalancer pode ser um LoadBalancer de software executado no cluster ou um LoadBalancer de hardware ou nuvem executado externamente. Diferentes LoadBalancers exigem diferentes implementações do Ingress Controller.

Vários Controlador do Ingresss estão disponíveis no mercado, e é importante escolher o certo para gerenciar o tráfego e a carga que chegam ao seu cluster do Kubernetes.

IBM DevOps

O que é DevOps?

Andrea Crawford explica o que é DevOps, seu valor e como suas práticas e ferramentas ajudam você a migrar suas aplicações por todo o pipeline de entrega de software, desde a concepção até a produção. Conduzido pelos principais líderes da IBM, o conteúdo foi concebido para ajudar os líderes empresariais a adquirir o conhecimento necessário para priorizar os investimentos em IA que podem estimular o crescimento.

Ingress versus ClusterIP versus NodePort versus LoadBalancer

Ingress, ClusterIP, NodePort e LoadBalancer são formas de levar tráfego externo para o cluster, e cada um faz isso de maneira diferente. Vamos dar uma olhada em como cada um funciona e onde você os usaria.

ClusterIP

O ClusterIP é a opção preferencial para acesso ao serviço interno e usa um endereço IP interno para acessar o serviço. Alguns exemplos de onde o ClusterIP pode ser a melhor opção são a depuração de serviços durante o desenvolvimento e os testes, tráfego interno e dashboards.

O ClusterIP é a opção preferencial para acesso ao serviço interno e usa um endereço IP interno para acessar o serviço. Alguns exemplos de onde o ClusterIP pode ser a melhor opção são a depuração de serviços durante o desenvolvimento e os testes, tráfego interno e dashboards.

NodePort

Um NodePort é uma máquina virtual (VM) usada para expor um serviço em um número de porta estática. É usado principalmente para expor serviços em um ambiente que não seja de produção (na verdade, o uso em produção não é recomendado). Por exemplo, um NodePort seria usado para expor um único serviço (sem requisitos de balanceamento de carga para vários serviços).

O NodePort é uma máquina virtual (VM) utilizada para expor um serviço em um número de porta estática. É usado principalmente para expor serviços em um ambiente de não produção

Balanceador de carga

Esse método usa um LoadBalancer externo para expor serviços à internet. Você pode usar o LoadBalancer em um ambiente de produção, mas o Ingress é geralmente preferido.

Esse método usa um LoadBalancer externo para expor serviços à internet. Você pode usar o LoadBalancer em um ambiente de produção, mas o Ingress é geralmente preferido.

Ingress

O Ingress permite consolidar as regras de roteamento de tráfego em um único recurso e é executado como parte de um cluster do Kubernetes. Algumas razões pelas quais o Kubernetes Ingress é a opção preferencial para expor um serviço em um ambiente de produção incluem o seguinte:

  • O roteamento de tráfego é controlado por regras definidas no Ingress Resource.
  • O Ingress faz parte do cluster do Kubernetes e é executado como pods.
  • Um LoadBalancer externo é caro, e você precisa gerenciá-lo fora do cluster do Kubernetes. O Kubernetes Ingress é gerenciado de dentro do cluster.
O Ingress permite consolidar as regras de roteamento de tráfego em um único recurso e é executado como parte de um cluster do Kubernetes.

Em ambientes de produção, você normalmente usa o Ingress para expor aplicações à internet. Uma aplicação é acessada pela internet via porta 80 (HTTP) ou porta 443 (HTTPS), e o Ingress é um objeto que permite o acesso a seus Kubernetes Services de fora do cluster do Kubernetes. 

Resumo

A API do Kubernetes Ingress permite expor suas aplicações implementadas em um cluster do Kubernetes à internet com regras de roteamento em uma única fonte. Para implementar o Ingress, você precisa configurar um Ingress Controller em seu cluster — ele é responsável por processar informações do Ingress Resource e permitir o tráfego com base no Ingress Rules. É importante escolher o serviço certo com a configuração apropriada, para expor sua aplicação à internet com base nas diretrizes listadas acima. 

Autora

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Soluções relacionadas
IBM Instana Observability

Aproveite o poder da IA e da automação para resolver problemas de forma proativa em todo o stack de aplicações.

Explore o IBM Instana Observability
Soluções de DevOps

Utilize softwares e ferramentas de DevOps para desenvolver, implementar e gerenciar aplicações nativas da nuvem em diversos dispositivos e ambientes.

Explore as soluções de DevOps
Serviços de consultoria em nuvem

Acelere a agilidade e o crescimento dos negócios, modernize suas aplicações de forma contínua em qualquer plataforma utilizando nossos serviços de consultoria de nuvem.

Explore os serviços de consultoria em nuvem
Dê o próximo passo

Da detecção proativa de problemas com IBM Instana a insights em tempo real em todo o seu stack, você pode manter aplicações nativas em nuvem funcionando de forma confiável.

  1. Descubra o IBM Instana
  2. Explore as soluções de DevOps