DNS e descoberta de serviços


Nesta página, descrevemos como o Google Kubernetes Engine (GKE) implementa a descoberta de serviços e o DNS do cluster.

Descoberta de serviços

No Kubernetes, a descoberta de serviços é implementada com nomes de serviço gerados automaticamente e mapeados para o endereço IP do serviço. Os nomes de serviço seguem uma especificação padrão (em inglês) como esta: my-svc.my-namespace.svc.cluster-domain.example. Os pods também podem acessar serviços externos usando os nomes deles, como example.com. Saiba mais sobre como o DNS funciona no Kubernetes em DNS para serviços e pods.

DNS do cluster no GKE

Os novos clusters do Autopilot usam o Cloud DNS, e não é possível modificar o provedor de DNS.

Para o padrão, o GKE fornece as seguintes opções de DNS do cluster para resolver nomes de serviço e nomes externos:

  • kube-dns: um complemento de cluster implantado por padrão em todos os clusters do GKE.
  • Cloud DNS: uma infraestrutura de DNS do cluster gerenciada na nuvem que utiliza o Cloud DNS e não exige o gerenciamento de servidores DNS no cluster, como o kube-dns.

Também é possível registrar seus serviços com o Diretório de serviços para o GKE.

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

kube-dns

O kube-dns é o provedor de DNS padrão para clusters padrão e o único provedor de DNS para clusters do Autopilot que executam versões anteriores a 1.25.9-gke.400 e 1.26.4-gke.500.

O kube-dns é executado como uma implantação que programa os pods de réplica do kube-dns em nós no cluster.

Para saber mais sobre o kube-dns, consulte Como usar o kube-dns.

Cloud DNS

O Cloud DNS é o único provedor de DNS para clusters do Autopilot que executam as versões 1.25.9-gke.400 e posteriores e 1.26.4-gke.500 e posteriores.

O Cloud DNS fornece resolução de DNS de pod e serviço sem um provedor de DNS hospedado no cluster, como o kube-dns. O controlador do Cloud DNS provisiona automaticamente registros DNS para pods e serviços no Cloud DNS relativos a serviços de nome externo, de clusterIP e headless.

Para saber como configurar o Cloud DNS, consulte Como usar o Cloud DNS para GKE.

NodeLocal DNSCache

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

Para saber como configurar o NodeLocal DNSCache, consulte Como configurar o NodeLocal DNSCache.

Descoberta de serviço fora de um único cluster

É possível configurar a descoberta de serviços além do escopo de um único cluster usando um dos métodos a seguir.

Escopo de VPC do Cloud DNS

Um cluster que usa o Cloud DNS para DNS do cluster precisa operar em um dos dois modos disponíveis: escopo do cluster do GKE ou escopo da nuvem privada virtual (VPC, na sigla em inglês).

Quando você configura um cluster no escopo do cluster, os registros DNS só podem ser resolvidos dentro do cluster usando o esquema <svc>.<ns>.svc.cluster.local. Esse é o mesmo comportamento que o kube-dns.

Quando você configura um cluster no escopo da VPC, os registros DNS dos serviços de cluster são resolvidos dentro de toda a VPC. Isso significa que os clientes na mesma VPC ou conectados a ela pelo Cloud VPN ou Cloud Interconnect podem resolver diretamente os registros DNS dos serviços no cluster do GKE. Também é possível configurar nomes exclusivos de DNS de cluster para que clientes que não sejam do GKE possam resolver registros DNS. Por exemplo, um cliente que não é do GKE pode resolver gke-svc.ns.svc.cluster1 de gke-svc.ns.svc.cluster2.

Para saber mais sobre o DNS do escopo da VPC, consulte Como usar o Cloud DNS para GKE.

Serviços de vários clusters

Os serviços de vários clusters fornecem descoberta de serviços de vários clusters e balanceamento de carga para o GKE que aproveita o objeto de serviço existente. Os serviços de vários clusters podem ser descobertos e acessados em qualquer cluster do GKE com um único endereço IP virtual. Esse é o mesmo comportamento de um serviço ClusterIP acessível em um único cluster.

Os serviços de vários clusters agregam serviço em clusters e os tornam endereçáveis como um único registro DNS de vários clusters usando o esquema <svc>.<ns>.svc.clusterset.local. Isso fornece um nome exclusivo para um determinado serviço, consistente e endereçável de qualquer cluster do GKE que use serviços de vários clusters.

Para saber mais sobre os serviços de vários clusters, consulte Serviços de vários clusters.

Diretório de serviços para o GKE

O Diretório de serviços para o GKE fornece uma visão única dos serviços em todas as implantações do Kubernetes. O Diretório de serviços pode registrar serviços do GKE e de terceiros em um único registro. O Diretório de serviços é útil principalmente se você quiser:

  • que um único registro de aplicativos do Kubernetes e de terceiros descubram uns aos outros;
  • uma ferramenta de descoberta de serviços gerenciados;
  • armazenar metadados sobre o serviço que possam ser acessados por outros clientes;
  • definir permissões de acesso por nível de serviço.

Os serviços do Diretório de serviços podem ser resolvidos por DNS, HTTP e gRPC. O Diretório de serviços é integrado ao Cloud DNS e pode preencher registros do Cloud DNS que correspondam a serviços no Diretório de serviços.

Para saber mais, consulte Como configurar o diretório de serviços para o GKE.

/etc/resolv.conf

Nos pods que usam a política de DNS ClusterFirst, o valor de /etc/resolv.conf depende de quais recursos estão ativados no cluster:

Cloud DNS para GKE NodeLocal DNSCache Valor de /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

A seguir