Projeto projet11-kubernetes-services · a teoria útil antes (ou durante) a prática.
Um Pod é efémero: pode ser apagado, recriado, deslocado para outro nó — e o endereço IP muda. Impossível, portanto, escrever « em duro » o IP de um Pod.
O Service resolve este problema: fornece um endereço estável (IP + nome DNS) e reparte automaticamente o tráfego para o conjunto dos Pods que correspondem ao seu seletor de labels.
O elo Service → Pods não é um IP fixo: é um seletor de labels. O Kubernetes mantém sozinho a lista dos Pods correspondentes (os Endpoints).
http://demo-clusterip).http://<ip-du-noeud>:<nodePort> (aqui http://localhost:30082).EXTERNAL-IP torna-se localhost (http://localhost:8090).| Tipo | Âmbito | Acesso | Caso de uso típico |
|---|---|---|---|
| ClusterIP | Interno | Nome DNS interno | Base de dados, API interna, comunicação Pod↔Pod |
| NodePort | Externo | localhost:<30000-32767> | Demo / dev local |
| LoadBalancer | Externo | IP público (localhost em local) | Serviço público em produção cloud |
Existe também ExternalName (alias DNS para um serviço externo) e o Ingress (encaminhamento HTTP/HTTPS por nome de domínio, visto mais tarde) — fora deste projeto.
O Kubernetes executa o CoreDNS no cluster. Cada Service recebe um nome DNS:
<nom-du-service> # no mesmo namespace
<nom-du-service>.<namespace> # a partir de outro namespace
<nom-du-service>.<namespace>.svc.cluster.local # nome completo (FQDN)Assim, a partir de qualquer Pod do mesmo namespace:
curl http://demo-clusterip # resolvido pelo CoreDNS -> IP do Service -> um PodIP:port dos Pods correspondentes, atualizada automaticamente pelo Kubernetes.kubectl get endpoints demo-clusterip # affiche les IP des Pods derriere le ServiceCurso criado pelo Dr. Haythem REHOUMA — Desenvolvimento e implantação de soluções de dados