Resolução de DNS no AKS (Serviço de Kubernetes do Azure)

Aplica-se a: ✔️ AKS Automatic ✔️ AKS Standard

A resolução do DNS (Sistema de Nomes de Domínio) é um componente crítico no AKS (Serviço de Kubernetes do Azure), permitindo que pods e serviços se comuniquem usando nomes legíveis por humanos em vez de endereços IP. O AKS fornece serviços de DNS internos para garantir uma resolução de nomes ideal para recursos internos do cluster e pontos de extremidade externos. Entender como o DNS funciona no AKS ajuda os operadores e desenvolvedores de cluster a garantir conectividade confiável, otimizar o desempenho e solucionar problemas de rede com eficiência.

O AKS Automatic é o padrão pronto para produção recomendado para a maioria das cargas de trabalho do AKS. Os clusters automáticos do AKS vêm pré-configurados com o LocalDNS para melhorar o desempenho do DNS, reduzir a pressão de conntrack e aumentar a resiliência sem a necessidade de configuração extra.

Observação

A partir do Kubernetes 1.37, o AKS Standard aplica o Preferred modo LocalDNS por padrão a pools de nós qualificados que não têm um perfil LocalDNS configurado explicitamente. No Preferred modo, o AKS habilita o LocalDNS somente se o pool de nós e o cluster passarem pelas verificações de compatibilidade necessárias. Se as verificações falharem, o LocalDNS permanecerá desabilitado. Perfis configurados explicitamente têm precedência sobre esse padrão, portanto, um pool de nós definido explicitamente como Disabled permanece desabilitado. Para impedir que o LocalDNS seja habilitado, defina explicitamente o modo LocalDNS como Desabilitado. Para obter instruções, consulte Desativar o LocalDNS em um pool de nós.

Para obter mais informações sobre o AKS Automatic, consulte o que é o AKS Automatic?

CoreDNS no Serviço de Kubernetes do Azure

CoreDNS é o serviço DNS padrão no AKS. Ele fornece resolução interna de nomes e descoberta de serviços para cargas de trabalho em execução no cluster. Ele opera como um conjunto de pods no namespace kube-system e é fortemente integrado ao sistema de rede do Kubernetes.

Quando um pod no AKS emite uma consulta DNS, como resolver o nome de outro serviço, a solicitação vai para os pods CoreDNS. Esses pods processam a consulta e retornam o endereço IP apropriado ou encaminham a solicitação para um servidor DNS upstream para domínios externos.

Essa arquitetura garante um equilíbrio entre flexibilidade e segurança operacional em um ambiente gerenciado. Para obter detalhes sobre como personalizar o CoreDNS no AKS, consulte o guia de personalização do CoreDNS.

Quando o LocalDNS está ativo, o caminho de resolução depende do dnsPolicy do pod (Default ou ClusterFirst) e da configuração do bloco do servidor LocalDNS. Por exemplo, quando um pod usa dnsPolicy: Default, as consultas DNS externas seguem o seguinte caminho:

Workload -> LocalDNS -> upstream DNS server

O LocalDNS é executado como uma unidade systemd no nó; portanto, ele recebe a consulta antes do CoreDNS. cluster.local As consultas são encaminhadas para o CoreDNS e as consultas externas são encaminhadas para o CoreDNS ou diretamente para o servidor DNS da rede virtual (VNet). Para obter o comportamento exato de encaminhamento para cada política DNS e a configuração padrão, consulte Blocos de servidor para LocalDNS.

Os servidores DNS de VNet personalizados devem aceitar consultas DNS UDP e TCP de nós do AKS. Com PreferUDP, o LocalDNS tenta novamente via TCP quando uma resposta UDP é truncada.

Para obter informações sobre o projeto CoreDNS, confira a página de projeto upstream do CoreDNS.

LocalDNS no Serviço de Kubernetes do Azure

Observação

Este artigo fornece uma visão geral do que é o LocalDNS e seus benefícios no AKS.

Para o AKS Automatic, LocalDNS é pré-configurado.

Para o AKS Standard, consulte o guia de instruções do LocalDNS para obter diretrizes sobre como habilitar e configurar o LocalDNS.

Visão geral

LocalDNS é um recurso avançado no AKS (Serviço de Kubernetes do Azure) que implanta um proxy DNS (Sistema de Nomes de Domínio) em cada nó para fornecer resolução DNS altamente resiliente e de baixa latência. Ao lidar com consultas DNS localmente, esse proxy reduz o tráfego para os pods do add-on CoreDNS, melhorando a confiabilidade e o desempenho geral do DNS no cluster. O LocalDNS é especialmente benéfico em grandes clusters ou ambientes com grandes volumes de consulta DNS, em que a resolução DNS centralizada pode se tornar um gargalo.

Quando o LocalDNS está habilitado, o AKS implanta um cache DNS local como um serviço systemd em cada nó. Os pods no nó enviam as consultas DNS para esse cache local, o que possibilita uma resolução mais rápida e reduz os saltos de rede. Essa abordagem também minimiza o conntrack uso de tabelas, reduzindo o risco de exaurimento da tabela. Além disso, se o DNS upstream ficar indisponível, o LocalDNS poderá continuar atendendo respostas armazenadas em cache por uma duração configurável, ajudando a manter a conectividade do pod e a confiabilidade do serviço.

Diagrama que mostra a arquitetura localDNS.

LocalDNS e AKS Automatic

O AKS Automatic configura automaticamente o LocalDNS como parte de suas configurações padrão prontas para produção. Você não precisa executar um comando de habilitação separado em clusters automáticos do AKS.

Use este artigo para entender como o LocalDNS funciona e por que ele melhora o comportamento de DNS para cargas de trabalho do AKS. Se você precisar de etapas de habilitação e configuração para o AKS Standard, use o guia de instruções do LocalDNS.

Principais capacidades

  • Latência de resolução de DNS reduzida: cada nó do AKS executa um serviço LocalDNS systemd. As cargas de trabalho em execução no nó enviam consultas DNS para esse serviço, o que as resolve localmente, reduzindo os saltos de rede e acelerando as pesquisas de DNS.
  • Comportamento de DNS personalizável: use kubeDNSOverrides e vnetDNSOverrides para controlar o comportamento de DNS no cluster.
  • Evitar corridas de conntrack e esgotamento da tabela de conntrack: os pods enviam consultas DNS para o serviço LocalDNS no mesmo nó sem criar entradas de tabela conntrack. Ao ignorar o monitoramento de conexão, é possível reduzir as corridas de conntrack e evitar que as entradas DNS do Protocolo UDP (User Datagram Protocol) preencham as tabelas conntrack. Essa otimização impede conexões descartadas e rejeitadas causadas pelo esgotamento da tabela conntrack e por condições de corrida.
  • Conexão atualizada para TCP: a localdns conexão do cache com o serviço CoreDNS do cluster usa o Protocolo de Controle de Transmissão (TCP). O TCP permite o reequilíbrio de conexão e remove entradas conntrack de tabela quando o servidor fecha a conexão (ao contrário das conexões UDP, que têm um tempo limite padrão de 30 segundos). Os aplicativos não precisam de alterações, pois o localdns serviço ainda escuta o tráfego UDP.
  • Armazenamento em cache: você pode configurar o plug-in de cache do LocalDNS com serveStale e as configurações de tempo de vida (TTL). Defina os parâmetros serveStale, serveStaleDurationInSeconds e cacheDurationInSeconds para obter resiliência de DNS, mesmo durante uma interrupção do DNS de upstream.
  • Controle de protocolo: defina o protocolo de consulta DNS preferencial, como PreferUDP ou ForceTCP, para cada domínio. PreferUDP não é uma instrução para usar o UDP exclusivamente. O resolvedor pode tentar novamente ou recorrer ao TCP como alternativa; portanto, os servidores DNS personalizados a montante e os controles de rede devem oferecer suporte a UDP e TCP na porta 53.

Outros benefícios e considerações

Benefícios Considerações
Melhor escalabilidade: reduz a carga em pods CoreDNS centralizados Sobrecarga mínima de recursos: usa uma pequena quantidade de CPU e memória em cada nó
Integração perfeita: não requer alterações nas conexões de aplicativo existentes Alterações de configuração: as atualizações exigem atualizações de imagem de nó, o que pode causar interrupções temporárias
Bloquear domínios de pesquisa inválidos: impede consultas DNS inválidas no nível do nó. Planejamento de disponibilidade: as equipes que usam o AKS Standard devem avaliar se o desempenho e a resiliência do DNS justificam a habilitação do LocalDNS

Comportamento automático do AKS e do AKS Standard

Modo de agrupamento Comportamento de LocalDNS
AKS Automático Pré-configurados
AKS Standard, Kubernetes 1.31 a 1.36 Configurado explicitamente para cada pool de nós
AKS Standard, Kubernetes 1.37 e posteriores Define por padrão os pools de nós elegíveis como Preferred quando não existe um perfil explícito do LocalDNS. O LocalDNS só é habilitado quando as verificações de compatibilidade são aprovadas. Perfis explícitos, incluindo Disabled, são preservados.

Usando o LocalDNS, você obtém uma resolução DNS mais rápida e confiável para suas cargas de trabalho, reduz o risco de interrupções relacionadas a DNS e obtém mais controle sobre o tráfego DNS em seu ambiente do AKS.