Este documento explica como configurar e usar o Cloud DNS como fornecedor de DNS para os seus clusters do Google Kubernetes Engine (GKE).
O Cloud DNS gere automaticamente os registos de DNS para os seus serviços Kubernetes. Por predefinição, estes registos só são acessíveis a partir do seu cluster (âmbito do cluster).
Se precisar de resolver serviços sem interface gráfica a partir do exterior do cluster, como VMs do Compute Engine, tem de ativar o âmbito da VPC ou o âmbito da VPC aditivo.
Este documento destina-se a utilizadores do GKE, incluindo programadores, administradores e arquitetos. Para saber mais sobre as funções comuns e exemplos de tarefas no Google Cloud, consulte o artigo Funções de utilizador e tarefas comuns do GKE Enterprise.
Para tirar o máximo partido deste documento, deve estar familiarizado com o seguinte:
Para tornar os serviços ClusterIP ou NodePort acessíveis a partir do exterior do cluster, tem de expor o serviço através de um LoadBalancer ou outro método e registar o respetivo endereço IP externo no Cloud DNS.
Para mais informações sobre a utilização do kube-dns como fornecedor de DNS, consulte o artigo Deteção de serviços e DNS.
Para saber como usar uma versão personalizada do kube-dns ou um fornecedor de DNS personalizado, consulte o artigo
Configurar uma implementação
kube-dns personalizada.
Preços
Quando o Cloud DNS é o fornecedor de DNS para clusters padrão do GKE, as consultas de DNS de pods que estão dentro do cluster do GKE são faturadas de acordo com os preços do Cloud DNS.
As consultas a uma zona DNS com âmbito de VPC gerida pelo GKE são faturadas através dos preços padrão do Cloud DNS.
Restrições e limitações
Aplicam-se as seguintes limitações:
- O âmbito da VPC não é suportado em clusters do Autopilot; apenas o âmbito do cluster é suportado. Se precisar de resolver nomes de serviços sem interface gráfica que são executados em clusters do GKE Autopilot, tem de usar o âmbito da VPC aditivo.
- Só pode ativar o âmbito de VPC aditivo nos clusters do GKE Autopilot no momento da criação do cluster. Não é suportada a ativação ou a desativação do âmbito da VPC aditivo em clusters do Autopilot do GKE existentes.
- A criação de clusters de âmbito de VPC aditivos em projetos de serviço de redes de VPC partilhadas não é suportada.
- O Cloud DNS para GKE não está disponível para o Assured
Workload com um regime de conformidade
IL4.
kube-dnsé forçado nesses ambientes regulamentados. - As alterações manuais às zonas de DNS privado geridas não são suportadas e são substituídas pelo controlador do Cloud DNS. As modificações aos registos de DNS nessas zonas não persistem quando o controlador é reiniciado.
- Depois de ativar o Cloud DNS para GKE num cluster, o
kube-dnscontinua a ser executado no cluster. Pode desativar okube-dnsdimensionando a implementação e o redimensionador automático para zero.kube-dns - Não pode alterar o âmbito do DNS num cluster depois de definir o âmbito com a flag
--cluster-dns-scope. Se precisar de alterar o âmbito do DNS, tem de recriar o cluster com um âmbito do DNS diferente. - Aplicam-se limitações dos recursos do CloudDNS. Em particular, é possível associar, no máximo, uma zona de política de resposta a uma rede VPC de cada vez. Para âmbitos de VPC e VPC aditivos, a criação de clusters falha se já existir uma zona de política de resposta que não siga a convenção de nomenclatura que está associada à rede VPC do cluster.
- As configurações de domínios stub personalizados e do servidor DNS a montante aplicam-se às configurações de DNS de pods e nós. Os pods que usam a rede do anfitrião ou os processos que são executados diretamente no anfitrião também usam o domínio stub e as configurações do servidor de nomes a montante. Este comportamento só é suportado no tipo de campanha Padrão.
- Os domínios stub personalizados e os servidores de nomes a montante configurados através do
kube-dnsConfigMap são aplicados automaticamente ao Cloud DNS para o DNS ao nível do cluster. O DNS de âmbito da VPC ignora okube-dnsConfigMap e tem de aplicar estas configurações diretamente no Cloud DNS. Este comportamento só é suportado no modo padrão. - A migração de
kube-dnspara o âmbito da VPC é uma operação destrutiva. Recrie o cluster quando mudar do âmbitokube-dnspara o âmbito da VPC ou quando fizer o inverso. - Para o âmbito da VPC, o intervalo de endereços IP secundários para os serviços não pode ser partilhado com outros clusters nessa sub-rede.
- Para o âmbito da VPC, a política de resposta associada a um registo PTR é anexada à rede VPC. Se outras políticas de resposta estiverem associadas à rede do cluster, a resolução do registo PTR para endereços IP do serviço Kubernetes falha.
- Se tentar criar um serviço sem cabeça com um número de pods que exceda a quota permitida, o Cloud DNS não cria conjuntos de registos nem registos para o serviço.
- Os nomes de serviços e portas estão limitados a 62 carateres, embora as etiquetas DNS tenham um limite máximo de 63 carateres. Este comportamento deve-se ao facto de o GKE adicionar um prefixo de sublinhado aos registos de DNS.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize a
CLI gcloud. Se instalou anteriormente a CLI gcloud, execute o comando
gcloud components updatepara obter a versão mais recente. As versões anteriores da CLI gcloud podem não suportar a execução dos comandos neste documento.
Ative a API Cloud DNS no seu projeto:
Para usar o Cloud DNS no âmbito do cluster, precisa de uma das seguintes versões:
- Para o Standard: versões do GKE 1.24.7-gke.800 ou 1.25.3-gke.700, ou posteriores.
- Para o Autopilot: versões do GKE 1.25.9-gke.400 ou 1.26.4-gke.500, ou posteriores.
- Versão 411.0.0 ou posterior da CLI do Google Cloud.
Para usar o Cloud DNS no âmbito da VPC aditivo, precisa de uma das seguintes versões:
- Versão 1.28.3-gke.1430000 ou posterior do GKE.
- Versão 503.0.0 ou posterior da CLI do Google Cloud.
Ativar DNS ao nível do cluster
No DNS ao nível do cluster, apenas os nós executados no cluster do GKE podem resolver nomes de serviços, e os nomes de serviços não entram em conflito entre clusters. Este comportamento é igual ao dos clusters do GKE, o que significa que pode migrar clusters do kube-dns para o âmbito do cluster do Cloud DNS sem tempo de inatividade nem alterações às suas aplicações.kube-dns
O diagrama seguinte mostra como o Cloud DNS cria uma zona DNS privada para um cluster do GKE. Apenas os processos e os pods executados nos nós no cluster podem resolver os registos DNS do cluster, porque apenas os nós estão no âmbito do DNS.
Ative o âmbito do cluster num novo cluster
Os novos clusters do Autopilot nas versões 1.25.9-gke.400, 1.26.4-gke.500 ou posteriores usam o âmbito do cluster do Cloud DNS por predefinição. A secção seguinte mostra como ativar o âmbito do cluster num novo cluster padrão.
Crie um cluster padrão com o âmbito do cluster ativado
Pode criar um cluster padrão do GKE com o âmbito do cluster do Cloud DNS ativado através da CLI gcloud ou da Google Cloud consola:
gcloud
Crie um cluster com a flag --cluster-dns:
gcloud container clusters create CLUSTER_NAME \
--cluster-dns=clouddns \
--cluster-dns-scope=cluster \
--location=COMPUTE_LOCATION
Substitua o seguinte:
CLUSTER_NAME: o nome do cluster.COMPUTE_LOCATION: a localização do Compute Engine para o cluster.
A flag --cluster-dns-scope=cluster é opcional no comando porque cluster é o valor predefinido.
Consola
Na Google Cloud consola, aceda à página Criar um cluster do Kubernetes.
No painel de navegação, em Cluster, clique em Rede.
Na secção Fornecedor de DNS, clique em Cloud DNS.
Selecione Âmbito do cluster.
Configure o cluster conforme necessário.
Clique em Criar.
Ative o âmbito do cluster num cluster existente
A migração de um cluster do Autopilot existente de kube-dns para o âmbito do cluster do Cloud DNS não é suportada. Para ativar o âmbito do cluster do Cloud DNS, recrie os clusters do Autopilot nas versões 1.25.9-gke.400, 1.26.4-gke.500 ou posteriores do GKE.
Pode migrar um cluster padrão existente do kube-dns para o âmbito do cluster do Cloud DNS através da CLI gcloud ou daGoogle Cloud consola.
Quando migra um cluster existente do kube-dns para o Cloud DNS, tem de recriar os nós para que a alteração entre em vigor. Migre clusters que
estão a executar aplicações sem interromper a comunicação do cluster ativando o
Cloud DNS como fornecedor de DNS em cada conjunto de nós separadamente. Um subconjunto dos nós está operacional em todos os momentos porque alguns node pools usam kube-dns e alguns node pools usam o Cloud DNS.
gcloud
Atualize o cluster existente:
gcloud container clusters update CLUSTER_NAME \ --cluster-dns=clouddns \ --cluster-dns-scope=cluster \ --location=COMPUTE_LOCATIONSubstitua o seguinte:
CLUSTER_NAME: o nome do cluster.COMPUTE_LOCATION: a localização do Compute Engine para o seu cluster.
A flag
--cluster-dns-scope=clusteré opcional no comando porqueclusteré o valor predefinido.A resposta é semelhante à seguinte:
All the node-pools in the cluster need to be re-created by the user to start using Cloud DNS for DNS lookups. It is highly recommended to complete this step shortly after enabling Cloud DNS. Do you want to continue (Y/n)?Depois de confirmar, o controlador do Cloud DNS é executado no plano de controlo do GKE. No entanto, os seus pods não usam o Cloud DNS para a resolução de DNS até atualizar o conjunto de nós ou adicionar novos conjuntos de nós ao cluster.
Atualize os node pools no cluster para usar o Cloud DNS:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=POOL_NAME \ --location=COMPUTE_LOCATIONSubstitua o seguinte:
CLUSTER_NAME: o nome do cluster.POOL_NAME: o nome do node pool a atualizar.
Se o conjunto de nós e o plano de controlo estiverem a executar a mesma versão, atualize primeiro o plano de controlo, conforme descrito no artigo Atualizar manualmente o plano de controlo. Em seguida, faça a atualização do node pool.
Confirme a resposta e repita este comando para cada conjunto de nós no cluster. Se o cluster tiver um pool de nós, omita a flag
--node-pool.
Consola
Aceda à página Google Kubernetes Engine na Google Cloud consola.
Clique no nome do cluster que quer modificar.
Em Networking, no campo DNS provider, clique em edit Edit DNS provider.
Clique em Cloud DNS.
Clique em Âmbito do cluster.
Clique em Guardar alterações.
Ative o âmbito do VPC aditivo
Esta secção descreve os passos para ativar ou desativar o âmbito da VPC aditivo, como um suplemento ao âmbito do cluster do Cloud DNS.
Ative o âmbito da VPC aditivo num novo cluster
Pode ativar o DNS de âmbito da VPC aditivo num novo cluster do GKE através da CLI gcloud ou da Google Cloud consola.
Crie um cluster do Autopilot com âmbito de VPC aditivo
gcloud container clusters create-auto CLUSTER_NAME \
--additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN
Substitua o seguinte:
CLUSTER_NAME: o nome do cluster.UNIQUE_CLUSTER_DOMAIN: o nome de um domínio. Tem de garantir que este nome é exclusivo na VPC porque o GKE não confirma este valor. Não pode alterar este valor depois de o definir. Não pode usar um domínio que termine em.local, caso contrário, pode ter falhas de resolução de DNS.
Crie um cluster padrão com âmbito da VPC aditivo
gcloud container clusters create CLUSTER_NAME \
--cluster-dns=clouddns \
--cluster-dns-scope=cluster \
--additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN
A flag --cluster-dns-scope=cluster é opcional porque cluster é o valor predefinido.
Substitua o seguinte:
CLUSTER_NAME: o nome do cluster.UNIQUE_CLUSTER_DOMAIN: o nome de um domínio. Tem de garantir que este nome é exclusivo na VPC, porque o GKE não confirma este valor. Não pode alterar este valor depois de o definir. Não pode usar um domínio que termine em.local, caso contrário, pode ter falhas de resolução de DNS.
Ative o âmbito do VPC aditivo num cluster padrão existente
A ativação do âmbito da VPC aditivo num cluster do Autopilot existente não é suportada.
Para ativar o âmbito da VPC aditivo num cluster padrão existente, execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \
--additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN \
--location=COMPUTE_LOCATION
Substitua o seguinte:
CLUSTER_NAME: o nome do cluster.UNIQUE_CLUSTER_DOMAIN: o nome de um domínio. Tem de garantir que este nome é exclusivo na VPC porque o GKE não confirma este valor. Não pode alterar este valor depois de o definir. Não pode usar um domínio que termine em.local, caso contrário, pode ter falhas de resolução de DNS.COMPUTE_LOCATION: a localização do Compute Engine para o cluster.
Ative o DNS de âmbito da VPC
No DNS ao nível do VPC, os nomes DNS de um cluster são resolvidos em todo o VPC. Qualquer cliente na VPC pode resolver registos DNS do cluster.
O DNS com âmbito de VPC permite os seguintes exemplos de utilização:
- Descoberta de serviços sem interface para clientes não GKE na mesma VPC.
- Resolução de serviços do GKE a partir de clientes locais ou na nuvem de terceiros. Para mais informações, consulte a Política de Servidores de Entrada.
- Resolução de serviços em que um cliente pode decidir com que cluster comunicar através do domínio DNS do cluster personalizado.
No diagrama seguinte, dois clusters do GKE usam o DNS ao nível da VPC na mesma VPC. Ambos os clusters têm um domínio DNS personalizado, .cluster1 e .cluster2, em vez do domínio .cluster.local predefinido. Uma VM comunica com o serviço de back-end sem interface através da resolução de backend.default.svc.cluster1. O Cloud DNS resolve o serviço sem cabeçalho para os endereços IP dos pods individuais no serviço, e a VM comunica diretamente com os endereços IP dos pods.
Também pode realizar este tipo de resolução a partir de outras redes quando estiver ligada à VPC através do Cloud Interconnect ou do Cloud VPN. As políticas do servidor DNS permitem que os clientes de redes ligadas à VPC resolvam nomes no Cloud DNS, o que inclui os serviços do GKE se o cluster usar o DNS de âmbito da VPC.
Ative o âmbito da VPC num cluster existente
A migração para o âmbito da VPC só é suportada no modo Standard e não é suportada no modo Autopilot.
Pode migrar um cluster Standard existente do kube-dns para o âmbito da VPC do Cloud DNS através da CLI gcloud ou da consola Google Cloud .
Quando migra para o âmbito da VPC, tem de recriar os nós para que a alteração entre em vigor.
gcloud
Atualize o cluster existente:
gcloud container clusters update CLUSTER_NAME \ --cluster-dns=clouddns \ --cluster-dns-scope=vpc \ --cluster-dns-domain=CUSTOM_DOMAIN \ --location=COMPUTE_LOCATIONSubstitua o seguinte:
CLUSTER_NAME: o nome do cluster.COMPUTE_LOCATION: a localização do Compute Engine para o cluster.CUSTOM_DOMAIN: o nome de um domínio. Tem de garantir que este nome é exclusivo na VPC porque o GKE não confirma este valor. Não pode alterar este valor depois de o definir. Não pode usar um domínio que termine em.local, caso contrário, pode ter falhas de resolução de DNS.
A resposta é semelhante à seguinte:
All the node-pools in the cluster need to be re-created by the user to start using Cloud DNS for DNS lookups. It is highly recommended to complete this step shortly after enabling Cloud DNS. Do you want to continue (Y/n)?Depois de confirmar, o controlador do Cloud DNS é executado no plano de controlo do GKE. Os seus Pods não usam o Cloud DNS para a resolução de DNS até atualizar o conjunto de nós ou adicionar novos conjuntos de nós ao cluster.
Atualize os node pools no cluster para usar o Cloud DNS:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=POOL_NAMESubstitua o seguinte:
CLUSTER_NAME: o nome do cluster.POOL_NAME: o nome do node pool a atualizar.
Se o conjunto de nós e o plano de controlo estiverem a executar a mesma versão, atualize primeiro o plano de controlo, conforme descrito no artigo Atualizar manualmente o plano de controlo. Em seguida, faça a atualização do node pool.
Confirme a resposta e repita este comando para cada conjunto de nós no cluster. Se o cluster tiver um pool de nós, omita a flag
--node-pool.
Consola
Aceda à página Google Kubernetes Engine na Google Cloud consola.
Clique no nome do cluster que quer modificar.
Em Networking, no campo DNS provider, clique em edit Edit DNS provider.
Clique em Cloud DNS.
Clique em Âmbito da VPC.
Clique em Guardar alterações.
Valide o Cloud DNS
Verifique se o Cloud DNS para GKE está a funcionar corretamente para o seu cluster:
Verifique se os seus nós usam o Cloud DNS estabelecendo ligação a um pod num nó e executando o comando
cat /etc/resolv.conf:kubectl exec -it POD_NAME -- cat /etc/resolv.conf | grep nameserverSubstitua
POD_NAMEpelo nome do pod.Com base no modo de cluster, o resultado é semelhante ao seguinte:
Cluster do GKE Autopilot
nameserver 169.254.20.10Uma vez que o NodeLocal DNSCache está ativado por predefinição no GKE Autopilot, o pod usa o NodeLocal DNSCache.
Se a cache local não tiver uma entrada para o nome que está a ser procurado, o NodeLocal DNSCache encaminha o pedido para o Cloud DNS.
Cluster Standard do GKE
nameserver 169.254.169.254Este exemplo de pod usa
169.254.169.254comonameserver, que é o endereço IP do servidor de metadados onde o plano de dados do Cloud DNS escuta pedidos na porta53. Os nós já não usam o endereço do serviço para a resolução de DNS, e toda a resolução de DNS ocorre no nó local.kube-dnsSe o resultado for um endereço IP semelhante a
10.x.y.10, o Pod usakube-dns. Para compreender por que motivo o seu grupo ainda usakube-dns, consulte a secção Resolução de problemas .Se o resultado for
169.254.20.10, ativou a opção NodeLocal DNSCache no seu cluster e o pod usa a opção NodeLocal DNSCache.Implemente uma aplicação de exemplo no seu cluster:
kubectl run dns-test --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0Exponha a aplicação de exemplo com um serviço:
kubectl expose pod dns-test --name dns-test-svc --port 8080Verifique se o serviço foi implementado com êxito:
kubectl get svc dns-test-svcO resultado é semelhante ao seguinte:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dns-test-svc ClusterIP 10.47.255.11 <none> 8080/TCP 6m10sO valor da coluna
CLUSTER-IPé o endereço IP virtual do seu cluster. Neste exemplo, o endereço IP virtual é10.47.255.11.Verifique se o nome do serviço foi criado como um registo na zona de DNS privado do cluster:
gcloud dns record-sets list \ --zone=PRIVATE_DNS_ZONE \ --name=dns-test-svc.default.svc.DOMAIN_NAME.Substitua o seguinte:
PRIVATE_DNS_ZONE: o nome da zona de DNS gerida criada pelo GKE. Pode encontrar os nomes das zonas na página de zonas do Cloud DNS na Google Cloud consola ou consultando a convenção de nomenclatura.DOMAIN_NAME:cluster.localse usar o âmbito do cluster sem o âmbito da VPC aditivo; ou o domínio personalizado que configurou quando ativou o âmbito da VPC ou o âmbito da VPC aditivo.
O resultado é semelhante ao seguinte:
NAME: dns-test-svc.default.svc.cluster.local. TYPE: A TTL: 30 DATA: 10.47.255.11
Desative o Cloud DNS em clusters padrão
A desativação do Cloud DNS não é suportada em clusters do Autopilot que foram criados com o Cloud DNS ativado por predefinição.
A desativação do âmbito da VPC na versão Standard não é suportada. Tem de
recriar o cluster com kube-dns como fornecedor DNS.
Pode desativar o âmbito do cluster e reverter para kube-dns num cluster padrão através da CLI gcloud ou daGoogle Cloud consola.
gcloud
Atualize o cluster para usar kube-dns:
gcloud container clusters update CLUSTER_NAME \
--cluster-dns=kube-dns \
--location=COMPUTE_LOCATION
Substitua o seguinte:
CLUSTER_NAME: o nome do cluster.COMPUTE_LOCATION: a localização do Compute Engine para o seu cluster.
Consola
Aceda à página Google Kubernetes Engine na Google Cloud consola.
Clique no nome do cluster que quer modificar.
Em Networking, no campo DNS provider, clique em edit Edit DNS provider.
Clique em Kube-dns.
Clique em Guardar alterações.
Depois de desativar o Cloud DNS, tem de recriar os seus conjuntos de nós antes de os nós poderem usar o kube-dns para resolução. Se tiver dimensionado kube-dns para zero nós, tem de dimensionar kube-dns para cima antes de os nós o poderem usar para a resolução de DNS. Se não recriar os seus conjuntos de nós, os pods nos nós existentes continuam a usar o Cloud DNS para a resolução de DNS, porque o respetivo ficheiro /etc/resolv.conf não é atualizado até o nó ser recriado.
Desative o âmbito da VPC aditivo
Quando desativa o âmbito de VPC aditivo para o seu cluster, apenas os registos DNS nas zonas privadas anexadas à rede VPC são eliminados. Os registos nas zonas de DNS privadas para o cluster do GKE permanecem e são geridos pelo Cloud DNS para o GKE até que o serviço sem cabeça seja eliminado do cluster.
Para desativar o âmbito de VPC aditivo, execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \
--disable-additive-vpc-scope
Substitua CLUSTER_NAME pelo nome do cluster.
Esta definição mantém o cluster com o âmbito do cluster do Cloud DNS ativado, o que fornece a resolução de DNS a partir do cluster.
Limpar
Depois de concluir os exercícios neste documento, siga estes passos para remover recursos e evitar a cobrança de encargos indesejados na sua conta:
Elimine o serviço:
kubectl delete service dns-test-svcElimine o Pod:
kubectl delete Pod dns-testTambém pode eliminar o cluster.
Resolução de problemas
Para obter informações sobre a resolução de problemas do Cloud DNS, consulte as seguintes páginas:
- Para obter aconselhamento sobre o Cloud DNS no GKE, consulte o artigo Resolva problemas do Cloud DNS no GKE.
- Para obter conselhos específicos sobre o Cloud DNS, consulte o artigo Resolva problemas do Cloud DNS.
- Para obter aconselhamento geral sobre o diagnóstico de problemas de DNS do Kubernetes, consulte o artigo Depurar a resolução de DNS.
O que se segue?
- Leia uma vista geral de como o GKE fornece DNS gerido.
- Leia o artigo DNS para serviços e pods para uma vista geral de como o DNS é usado em clusters do Kubernetes.
- Saiba mais sobre os âmbitos e as hierarquias no Cloud DNS.
- Saiba como ativar e desativar o registo para zonas geridas privadas.