Ingress do Kubernetes é um recurso que adiciona regras para direcionar o tráfego de fontes externas para as aplicações em execução no cluster do Kubernetes.
Neste tutorial de ingress do Kubernetes, você aprenderá os conceitos básicos de ingress, o objeto de recurso nativo de ingress e os conceitos envolvidos nos controladores de ingress.
Aqui estão os tópicos que abordaremos neste guia completo para Kubernetes Ingress:
- O que é Kubernetes Ingress?
- Antes do Ingress?
- Como funciona o Kubernetes Ingress?
- Recurso de Ingress do Kubernetes
- Controlador de Ingress do Kubernetes
- Como funciona um controlador de Ingress?
- Lista de controladores de Ingress do Kubernetes
- FAQs do Kubernetes Ingress
O que é Kubernetes Ingress?
O significado literal: Ingress se refere ao ato de entrar.
É o mesmo no mundo do Kubernetes. Ingress significa o tráfego que entra no cluster e egress é o tráfego que sai do cluster.
Ingress é um recurso nativo do Kubernetes, como pods, deployments, etc. Usando ingress, você pode manter as configurações de roteamento DNS. O roteamento real é feito pelo controlador de ingress, lendo as regras de roteamento de objetos de ingress armazenados no etcd.
Vamos entender o ingress com um exemplo de alto nível.
Sem o ingress do Kubernetes, para expor uma aplicação ao mundo externo, você adicionaria um serviço do Tipo Loadbalancer aos deployments.
Na mesma implementação, com ingress, existe uma camada de proxy reverso (implementação do controlador de ingress) entre o balanceador de carga e o ponto de extremidade do serviço kubernetes.
Nas seções seguintes, veremos uma arquitetura detalhada cobrindo todos os conceitos-chave.
Nota: A implementação do controlador de ingress da nuvem AWS, GCP difere um pouco. O próprio balanceador de carga atua como um controlador de ingress. Consulte o blog de configuração de ingress do GKE para entender mais.
Antes do Ingress?
Antes do Kubernetes Ingress se tornar estável, um Nginx personalizado ou um deployment do Kubernetes HAproxy seria exposto como um serviço Loadbalancer para rotear o tráfego externo para os serviços internos do cluster.
As regras de roteamento são adicionadas como um configmap nos pods Nginx/HAProxy. Sempre que há uma mudança no dns ou uma nova entrada de rota a ser adicionada, ela é atualizada no configmap, e as configurações do pod são recarregadas, ou ele é reimplantado.
O ingress do Kubernetes também segue um padrão semelhante, tendo as regras de roteamento mantidas como objetos nativos de ingress do Kubernetes, em vez de um configmap.
E no lugar de Nginx/HAProxy, temos controladores de ingress, uma versão personalizada de Nginx/HAProxy, etc., que buscam as regras de roteamento dinamicamente.
Além disso, havia implementações usando consul e outras ferramentas de descoberta de serviço para atualizar as alterações de DNS para Nginx ou HAproxy sem tempo de inatividade, o que traz a mesma implementação que o ingress.
Quando se trata de openshift, o conceito de roteador (implementações do HAproxy) facilitou a exposição dos pontos finais do serviço fora do cluster. Tudo que você tem que fazer é fazer uma configuração de roteador (objeto YAML do Openshift), e o roteador openshift cuida de tudo. É semelhante ao ingress do Kubernetes.
Como funciona o Kubernetes Ingress?
Se você é um iniciante e está tentando entender o ingress, pode haver confusão sobre como ele funciona.
Por exemplo, você pode se perguntar, foram criadas as regras de ingress, mas não temos certeza de como mapeá-las para um nome de domínio ou rotear o tráfego externo para os deployments internos.
Para entender isso, você precisa ter muita clareza sobre dois conceitos-chave:
Recurso de Ingress do Kubernetes (Kubernetes Ingress Resource): O recurso de ingress do Kubernetes é responsável por armazenar as regras de roteamento DNS no cluster.
Controlador de Ingress do Kubernetes (Kubernetes Ingress Controller): Os controladores de ingress do Kubernetes (Nginx/HAProxy etc.) são responsáveis pelo roteamento acessando as regras de DNS aplicadas através do recurso de ingress.
Vamos olhar tanto o recurso de ingress quanto o controlador de ingress em detalhes.
Recurso de Ingress do Kubernetes
O recurso de Ingress do Kubernetes é um recurso nativo do kubernetes onde você especifica as regras de roteamento DNS. Ou seja, você mapeia o tráfego de DNS externo para os pontos finais do serviço interno do Kubernetes.
Ele requer um controlador de ingress para rotear as regras especificadas no objeto de ingress. Vamos dar uma olhada em um recurso de ingress muito básico.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
namespace: dev
spec:
rules:
- host: test.apps.dominio.com
http:
paths:
- backend:
serviceName: hello-service
servicePort: 80
A declaração acima significa que todas as chamadas para test.apps.dominio.com devem atingir o serviço chamado hello-service residindo no namespace dev.
Como você pode ver, tudo que tem são regras de roteamento. Você pode adicionar vários pontos de extremidade de roteamento para roteamento baseado em caminho, você pode adicionar configuração TLS, etc.
Coisas importantes para entender sobre objetos de ingress.
Um objeto de ingress requer um controlador de ingress para rotear o tráfego. E, o mais importante, o tráfego externo não atinge a API de ingress, em vez disso, ele atingirá o ponto de extremidade do serviço do controlador de ingress configurado diretamente com um balanceador de carga. Agora, vamos entender o controlador de ingress.
Controlador de Ingress do Kubernetes
O controlador de ingress não é uma implementação nativa do Kubernetes. Ou seja, ele não vem por padrão no cluster.
Precisamos configurar um controlador de ingress para as regras de ingress funcionarem. Existem vários controladores de ingress de código aberto e empresariais disponíveis.
Um controlador de ingress é normalmente uma implementação de servidor de proxy reverso web no cluster. Em termos de kubernetes, é um servidor de proxy reverso implantado como um deployment do kubernetes exposto a um serviço do tipo Loadbalancer.
Você pode ter vários controladores de ingress em um cluster mapeados para vários balanceadores de carga. Cada controlador de ingress deve ter um identificador único chamado ingress-class adicionado à anotação.
Como funciona um Controlador de Ingress?
Nginx é um dos controladores de ingress mais amplamente utilizados.
Então, vamos pegar um exemplo de implementação de controlador de ingress do Nginx para entender como ele funciona.
O arquivo nginx.conf dentro do pod do controlador Nginx é um template lua que pode conversar com a API de ingress do Kubernetes e obter os valores mais recentes para roteamento de tráfego em tempo real. Aqui está o arquivo template.
O controlador Nginx conversa com a API de ingress do Kubernetes para verificar se há alguma regra criada para roteamento de tráfego. Se encontrar quaisquer regras de ingress, o controlador Nginx gera uma configuração de roteamento dentro do local /etc/nginx/conf.d dentro de cada pod nginx. Para cada recurso de ingress que você cria, nginx gera uma configuração dentro do local /etc/nginx/conf.d.
O arquivo principal /etc/nginx/nginx.conf contém todas as configurações de etc/nginx/conf.d. Se você atualizar o objeto de ingress com novas configurações, a configuração do nginx é atualizada novamente e faz um recarregamento gracioso da configuração. Se você se conectar ao pod do controlador de ingress do Nginx usando exec e verificar o arquivo /etc/nginx/nginx.conf, você pode ver todas as regras especificadas no objeto de ingress aplicadas no arquivo conf.
Aqui está o diagrama de arquitetura que explica a configuração de ingress em um cluster kubernetes.
Lista de Controladores de Ingress do Kubernetes
A seguir estão os controladores de ingress mais comumente usados disponíveis para Kubernetes.
- Controlador de Ingress Nginx (Comunidade & Da Nginx Inc)
- Traefik
- HAproxy
- Contour
- Controlador de Ingress GKE para GKE
- Controlador de Ingress ALB da AWS para AKS
- Controlador de Ingress do Gateway de Aplicação Azure
Learnk8s criou um grande documento comparando todos os controladores de ingress disponíveis. Dê uma olhada no documento de comparação.
Perguntas Frequentes sobre o Kubernetes Ingress
O Ingress é um balanceador de carga?
O Ingress não é um balanceador de carga. Ele contém todas as regras de roteamento, cabeçalhos personalizados e configurações TLS. O controlador de ingress age como um balanceador de carga.
Por que eu preciso de um controlador de ingress?
O controlador de ingress é responsável pelo roteamento real do tráfego externo para os pontos finais do serviço kubernetes. Sem um controlador de ingress, as regras de roteamento adicionadas ao ingress não funcionarão.
Qual é a diferença entre ingress e Nginx?
Ingress é um objeto kubernetes. Nginx é usado como um controlador de ingress (Proxy reverso).
Podemos rotear tráfego para vários caminhos usando ingress?
Sim. Com uma única definição de ingress, você pode rotear o tráfego para vários serviços baseados no caminho.
Posso ter vários controladores de ingress no mesmo cluster?
Sim. Você pode ter vários controladores de ingress no mesmo cluster. Cada controlador de ingress deve ter um ingress-class único para evitar conflitos.
Espero que você tenha gostado do tutorial completo sobre o ingress do Kubernetes. Se você tem alguma dúvida, por favor, pergunte na seção de comentários abaixo.
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.