Estou usando Kubernetes localmente através do Docker Desktop no macOS.
Para testar o acesso a um Pod rodando nginx, criei um Service do tipo NodePort, e consegui acessá-lo via navegador com http://localhost:<nodePort>
.
Isso funcionou normalmente e o nginx foi exibido.
Em seguida, quis testar o acesso ao mesmo Pod usando um Service do tipo LoadBalancer. Sei que esse tipo de serviço normalmente depende de um provedor de nuvem (como GKE, EKS, etc.) ou de algo como o MetalLB para funcionar localmente como um verdadeiro balanceador de carga.
No entanto, mesmo sem esses componentes, o Docker Desktop parece mapear o LoadBalancer para localhost
. O manifesto que utilizei foi:
ports:
- port: 81
targetPort: 80
nodePort: 30000
Neste cenário:
Acessar localhost:30000
não funcionou
Acessar localhost:81
funcionou perfeitamente
Por que no Service do tipo LoadBalancer o acesso é feito pela porta definida em port
, enquanto o nodePort
não funciona diretamente como acontece no serviço do tipo NodePort?
E mais:
Qual é o papel do nodePort
em um Service do tipo LoadBalancer? Existe diferença do seu comportamento em ambientes locais usando Docker Desktop com uma única máquina e em ambientes com um cluster verdadeiro?
Agradeço desde já qualquer explicação que possa esclarecer essa diferença de comportamento!