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.
-
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. -
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.
-
kube-proxy:
kube-proxyno nó onde a aplicação está em execução intercepta o tráfego direcionado ao Serviço ClusterIP do Ingress Controller. -
iptables/ipvs:
kube-proxyusa regras deiptablesouipvspara rotear o tráfego para um dos pods do Ingress Controller. -
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.