Sobes.tech
Middle+

Como é feita a redireção do tráfego para o ingressa de dentro do cluster?

sobes.tech IA

Resposta da IA

Para redirecionar o tráfego de dentro do cluster para o Ingress, é utilizado o nome DNS do serviço do Ingress Controller. Na configuração padrão, o Ingress Controller é implantado como um Serviço do tipo LoadBalancer ou NodePort.

  1. Descoberta de Serviço: A aplicação dentro do cluster usa o nome DNS do Serviço, que expõe (torna visível) o Ingress Controller. Por exemplo, nginx-ingress-controller.ingress-nginx.svc.cluster.local, se estiver usando nginx-ingress com o nome de Serviço correspondente.

  2. IP do Serviço/ClusterIP: O servidor DNS do Kubernetes (por exemplo, CoreDNS) resolve esse nome DNS para o ClusterIP do Serviço do Ingress Controller.

  3. kube-proxy: kube-proxy no nó onde a aplicação está em execução intercepta o tráfego direcionado ao Serviço ClusterIP do Ingress Controller.

  4. iptables/ipvs: kube-proxy usa regras de iptables ou ipvs para rotear o tráfego para um dos pods do Ingress Controller.

  5. Processamento no Ingress Controller: Os pods do Ingress Controller recebem o tráfego e, de acordo com as regras dos recursos Ingress, redirecionam-no para o serviço correspondente dentro do cluster.

Exemplo de requisição de um pod:

# Requisição ao serviço via Ingress, usando DNS interno
curl http://my-app.example.com

Aqui, my-app.example.com é resolvido pelo servidor DNS do cluster para o ClusterIP do Serviço do Ingress Controller, se as entradas apropriadas estiverem configuradas ou se o Ingress Controller estiver configurado para lidar com essas requisições diretamente (menos comum para tráfego interno). A maioria do tráfego interno acessa o serviço pelo seu nome DNS. Se for necessário passar explicitamente pelo Ingress de dentro do cluster, deve-se garantir que o Ingress Controller esteja acessível via ClusterIP ou IP local dos pods e que o registro DNS ou o mecanismo de roteamento direcione para ele.

O padrão mais comum para comunicação entre serviços dentro do cluster é acessar diretamente o serviço pelo seu nome DNS (<nome-do-serviço>.<namespace>.svc.cluster.local), evitando o Ingress. A redireção de tráfego para o Ingress de dentro do cluster geralmente é necessária para testes ou cenários específicos de roteamento.