Deteção de serviços e DNS

Esta página descreve como o Google Kubernetes Engine (GKE) implementa a deteção de serviços e o DNS do cluster.

Deteção de serviços

No Kubernetes, a deteção de serviços é implementada com nomes de serviços gerados automaticamente que são mapeados para o endereço IP do serviço. Os nomes dos serviços seguem uma especificação padrão: da seguinte forma: my-svc.my-namespace.svc.cluster.local. Os pods também podem aceder a serviços externos através dos respetivos nomes, como example.com. Para mais informações sobre como o DNS funciona no Kubernetes, consulte DNS para serviços e pods.

DNS do cluster no GKE

Os novos clusters do Autopilot usam o Cloud DNS e não pode modificar o fornecedor de DNS.

Para o Standard, o GKE oferece as seguintes opções de DNS do cluster para resolver nomes de serviços e nomes externos:

  • kube-dns: um suplemento de cluster implementado por predefinição em todos os clusters do GKE.
  • Cloud DNS: uma infraestrutura de DNS de cluster gerida na nuvem que tira partido do Cloud DNS e não requer a gestão de servidores DNS no cluster, como o kube-dns.

Também pode registar os seus serviços no Service Directory para o GKE.

O GKE também fornece o NodeLocal DNSCache como um suplemento opcional que pode ser usado com o kube-dns ou o Cloud DNS.

kube-dns

O kube-dns é o fornecedor de DNS predefinido para clusters Standard e o único fornecedor de DNS para clusters Autopilot que executam versões anteriores a 1.25.9-gke.400 e 1.26.4-gke.500.

O kube-dns é executado como uma implementação que agenda pods kube-dns para nós no cluster.

Para saber mais sobre o kube-dns, consulte o artigo Usar o kube-dns.

Cloud DNS

O Cloud DNS é o único fornecedor de DNS para clusters do Autopilot com a versão 1.25.9-gke.400 e posteriores, e a versão 1.26.4-gke.500 e posteriores.

O Cloud DNS oferece resolução de DNS de pods e serviços sem um fornecedor de DNS alojado no cluster, como o kube-dns. O controlador do Cloud DNS aprovisiona automaticamente registos DNS para pods e serviços no Cloud DNS para ClusterIP, sem cabeçalho e serviços de nomes externos.

Para saber como configurar o Cloud DNS, consulte o artigo Usar o Cloud DNS para o GKE.

NodeLocal DNSCache

O NodeLocal DNSCache é executado como um DaemonSet que agenda um pod de cache DNS em cada nó do cluster. Esta cache DNS melhora a latência de procura de DNS, torna os tempos de procura de DNS mais consistentes e pode reduzir o número de consultas DNS para kube-dns ou Cloud DNS.

Para saber como configurar a NodeLocal DNSCache, consulte o artigo Configurar a NodeLocal DNSCache.

Deteção de serviços fora de um único cluster

Pode configurar a deteção de serviços além do âmbito de um único cluster através de um dos seguintes métodos.

Âmbito da VPC do Cloud DNS

Um cluster que usa o Cloud DNS para o DNS do cluster tem de funcionar num de dois modos disponíveis: âmbito do cluster do GKE ou âmbito da nuvem privada virtual (VPC).

Quando configura um cluster no âmbito do cluster, os registos de DNS só são resolvidos no cluster através do esquema <svc>.<ns>.svc.cluster.local. Este é o mesmo comportamento que o kube-dns.

Quando configura um cluster no âmbito da VPC, os registos DNS dos serviços de cluster são resolvidos em toda a VPC. Isto significa que os clientes na mesma VPC ou ligados à VPC através do Cloud VPN ou do Cloud Interconnect podem resolver diretamente os registos DNS para serviços no cluster do GKE. Também pode configurar nomes DNS de clusters exclusivos para que os clientes não pertencentes ao GKE possam resolver registos DNS. Por exemplo, um cliente não GKE pode resolver gke-svc.ns.svc.cluster1 a partir de gke-svc.ns.svc.cluster2.

Para saber mais sobre o DNS ao nível do VPC, consulte o artigo Usar o Cloud DNS para o GKE.

Serviços em vários clusters

Os serviços em vários clusters oferecem deteção de serviços em vários clusters e equilíbrio de carga para o GKE que tira partido do objeto de serviço existente. Os serviços em vários clusters são detetáveis e acessíveis em qualquer cluster do GKE com um único endereço IP virtual. Este é o mesmo comportamento que um serviço ClusterIP acessível num único cluster.

Os serviços em vários clusters agregam serviços em vários clusters e tornam-nos endereçáveis como um único registo DNS em vários clusters através do esquema <svc>.<ns>.svc.clusterset.local. Isto fornece um nome exclusivo para um determinado serviço que é consistente e endereçável a partir de qualquer cluster do GKE através de serviços em vários clusters.

Para saber mais sobre os serviços em vários clusters, consulte o artigo Serviços em vários clusters.

Service Directory para o GKE

O Service Directory para o GKE oferece uma vista única dos serviços em todas as suas implementações do Kubernetes. O Service Directory pode registar serviços do GKE e não pertencentes ao GKE num único registo. O diretório de serviços é particularmente útil se quiser:

  • Um único registo para que as aplicações Kubernetes e não Kubernetes se descubram mutuamente.
  • Uma ferramenta de deteção de serviços gerida.
  • Para armazenar metadados sobre o seu serviço que podem ser acedidos por outros clientes.
  • Definir autorizações de acesso ao nível do serviço.

Os serviços do Service Directory podem ser resolvidos através de DNS, HTTP e gRPC. O Service Directory está integrado com o Cloud DNS e pode preencher registos do Cloud DNS que correspondem a serviços no Service Directory.

Para saber mais, consulte o artigo Configurar o Service Directory para o GKE.

/etc/resolv.conf

Para pods que usam a ClusterFirst política DNS, o valor de /etc/resolv.conf depende das funcionalidades ativadas no cluster:

Cloud DNS para GKE NodeLocal DNSCache Valor: /etc/resolv.conf
Ativado Ativado 169.254.20.10
Ativado Desativado 169.254.169.254
Desativado Ativado Endereço IP do serviço kube-dns
Desativado Desativado Endereço IP do serviço kube-dns

O que se segue?

  • Saiba como usar o Cloud DNS para GKE.
  • Saiba como fornecer uma resolução de DNS escalável para clusters que requerem volumes elevados de consultas de DNS através da DNSCache NodeLocal.