DNS e descoberta de serviços
Entenda como os Pods encontram uns aos outros usando o DNS integrado do Kubernetes e como funciona a descoberta de serviços internamente.
DNS e descoberta de serviços é uma aula grátis de Kubernetes Basics no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kubernetes Basics, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kubernetes Basics inclui 4 aulas no total.
O problema da descoberta de serviços
Os pods entram e saem, e seus IPs mudam constantemente. Codificar IPs diretamente faria tudo parar de funcionar imediatamente. O Kubernetes resolve isso com a descoberta de serviços baseada em DNS.
Em vez de usar um IP, você se comunica com um nome estável.
DNS do cluster
Todo cluster executa um serviço DNS (geralmente o CoreDNS). Ele cria automaticamente registros DNS para serviços e pods, fazendo com que os nomes sejam resolvidos para o ClusterIP correto.
Nomes DNS de serviços
Um serviço recebe um nome DNS seguindo um padrão previsível:
service-name.namespace.svc.cluster.local
No mesmo espaço de nomes, basta usar o service-name curto.
# from a Pod in the same namespace
curl http://payment-service:8080
# fully qualified, from any namespace
curl http://payment-service.shop.svc.cluster.local:8080Espaços de nomes e nomenclatura
O espaço de nomes faz parte do nome. Para acessar um serviço em outro espaço de nomes, inclua-o: service.namespace.
# Pod in 'frontend' namespace calling 'backend' namespace
curl http://api.backend.svc.cluster.localTestando o DNS de um pod
Você pode iniciar um pod descartável para testar a resolução de nomes.
kubectl run dnstest --image=busybox:1.36 --rm -it --restart=Never -- nslookup payment-serviceComo o CoreDNS resolve nomes
Quando um pod consulta um nome, a solicitação vai para o CoreDNS. Ele procura o serviço correspondente e retorna seu ClusterIP. Para serviços sem IP virtual, ele retorna diretamente os IPs dos pods.
Serviços sem IP virtual
Um serviço sem IP virtual (clusterIP: None) não usa um único IP virtual. Em vez disso, o DNS retorna os IPs individuais dos pods, o que é essencial para aplicativos com estado que acessam os pods diretamente.
apiVersion: v1
kind: Service
metadata:
name: db
spec:
clusterIP: None
selector:
app: db
ports:
- port: 5432Registros DNS de pods
Com um serviço sem IP virtual, cada pod associado também pode receber seu próprio registro DNS, o que é útil para StatefulSets, nos quais os pods têm identidades estáveis, como db-0 e db-1.
# stable per-Pod name in a StatefulSet
curl http://db-0.db.default.svc.cluster.local:5432Inspecionando o resolv.conf do pod
O Kubernetes injeta configurações de DNS em cada pod. Os domínios de pesquisa permitem que nomes curtos sejam resolvidos corretamente.
kubectl exec -it mypod -- cat /etc/resolv.conf
# nameserver 10.96.0.10
# search default.svc.cluster.local svc.cluster.local cluster.localVariáveis de ambiente versus DNS
O Kubernetes também injeta informações de conexão dos serviços como variáveis de ambiente, mas apenas para serviços que já existiam quando o pod foi iniciado. O DNS é preferível porque sempre reflete o estado atual.
Armadilhas comuns do DNS
- Esquecer o espaço de nomes ao acessar serviços entre espaços de nomes
- Esperar DNS para um serviço sem pods correspondentes (sem pontos de extremidade)
- Armazenar em cache IPs obsoletos no aplicativo em vez de resolver o nome novamente
Verificação rápida
Escolha o formato correto de nome DNS.
Recapitulação
Você aprendeu que o Kubernetes usa o CoreDNS para fornecer aos serviços nomes DNS estáveis seguindo o formato service.namespace.svc.cluster.local. Nomes curtos funcionam dentro de um espaço de nomes, os serviços sem IP virtual expõem os IPs individuais dos pods e o DNS sempre reflete o estado atual do cluster.
Perguntas Frequentes
A aula “DNS e descoberta de serviços” é grátis?
Sim — o texto completo de “DNS e descoberta de serviços” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kubernetes Basics, atualize para CoddyKit PRO. O curso de Kubernetes Basics inclui 4 aulas no total.
O que vou aprender em “DNS e descoberta de serviços”?
Entenda como os Pods encontram uns aos outros usando o DNS integrado do Kubernetes e como funciona a descoberta de serviços internamente. Você pratica Kubernetes Basics com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Kubernetes Basics?
Nenhuma experiência prévia é necessária. Kubernetes Basics no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “DNS e descoberta de serviços”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Kubernetes Basics?
Sim. Cada aula de Kubernetes Basics inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Expondo aplicações com serviços
- Tipos de serviço: ClusterIP, NodePort, LoadBalancer
- Ingress para acesso externo
- DNS e descoberta de serviços