Este tópico responde a perguntas frequentes sobre o Domain Name System (DNS) em clusters do Container Service for Kubernetes (ACK).
Por que não consigo executar exec em um Pod do CoreDNS?
A imagem de contêiner do CoreDNS usa scratch como base, que não possui shell. O comando kubectl -n kube-system exec -it {coredns-pod-name} bash falha porque a imagem não contém shell.
Para inspecionar o ambiente de rede de um Pod do CoreDNS, use nsenter. Consulte Verificar a conectividade de rede de um Pod do CoreDNS para obter instruções. Para visualizar os logs do CoreDNS, ative o recurso de análise e monitoramento de logs. Consulte Analisar e monitorar logs do CoreDNS.
Por que o CoreDNS usa uma API obsoleta?
Durante a verificação prévia de atualização do cluster, um cliente com o user agent coredns acessa a API obsoleta discovery.k8s.io/v1beta1 no endpoint /apis/discovery.k8s.io/v1beta1.
Isso ocorre por um dos dois motivos:
Versão desatualizada do CoreDNS: A versão instalada não oferece suporte a
discovery.k8s.io/v1e recorre av1beta1.Seleção de API antiga: O CoreDNS iniciou em uma versão anterior do Kubernetes (por exemplo, v1.20) e fixou o uso de
v1beta1na inicialização. Após a atualização do cluster tornar essa API obsoleta, o CoreDNS continuou a usá-la.
Em ambos os casos, atualize o CoreDNS primeiro. Se não houver atualização disponível, reinicie-o para forçar uma nova seleção de API.
Para atualizar ou reiniciar o CoreDNS:
Faça login no console do ACK e clique em Clusters no painel de navegação à esquerda.
Clique no nome do cluster. No painel de navegação à esquerda, clique em Add-ons.
Na página Add-ons, atualize o componente CoreDNS. Se a página indicar que a atualização não é possível, prossiga para a etapa 4. Para mais informações, consulte Gerenciar componentes.
-
Reinicie o CoreDNS:
kubectl -n kube-system rollout restart deployment corednsImportanteErros de resolução de DNS podem ocorrer ocasionalmente durante a reinicialização. Consulte Mitigar timeouts intermitentes de DNS causados por defeitos no IPVS para reduzir o impacto.
-
Verifique se os Pods do CoreDNS estão em execução:
kubectl -n kube-system get pod -l k8s-app=kube-dnsA saída esperada mostra Pods recém-criados no estado Running:
NAME READY STATUS RESTARTS AGE coredns-xxxxxxxxxx-xxxxx 1/1 Running 0 30s coredns-xxxxxxxxxx-yyyyy 1/1 Running 0 28sQuando ambos os Pods estiverem no estado Running, ignore os registros de chamadas de API obsoletas na página de verificação prévia e prossiga com a atualização do cluster.
Erro de log do CoreDNS: dns: buffer size too small
O CoreDNS define o tamanho padrão do buffer UDP (bufsize) como 1232 bytes. Quando uma resposta DNS excede esse limite, a resolução falha e o erro dns: buffer size too small aparece nos logs. Isso geralmente afeta consultas DNS que retornam respostas grandes. Para mais contexto, consulte esta issue no GitHub.
Atualize o CoreDNS para a versão v1.7.1 ou posterior, que resolve esse problema automaticamente. Para versões anteriores à v1.7.1, defina manualmente o parâmetro bufsize no ConfigMap do CoreDNS:
kubectl edit cm -n kube-system coredns
Adicione bufsize com um valor no intervalo \[512, 4096\] (inclusivo):
. {
bufsize 1220
log
}
Para mais informações, consulte a documentação do plugin bufsize do CoreDNS.
Por que as solicitações retornam NXDOMAIN e NOERROR de forma inconsistente após a criação de um Service?
O CoreDNS executa como múltiplas réplicas de Pods. Logo após a criação de um novo Service, um Pod pode ainda não ter obtido as informações mais recentes do Service no servidor de API, enquanto outro já as possui. Solicitações roteadas para o Pod dessincronizado retornam NXDOMAIN; já as solicitações roteadas para o Pod atualizado retornam NOERROR. A inconsistência se resolve automaticamente assim que todos os Pods do CoreDNS sincronizam com o servidor de API. Nenhuma ação manual é necessária.
Resolução de DNS em nós Windows
Os Pods em nós Windows apresentam vários comportamentos de DNS diferentes do Linux:
**Não há suporte para
ClusterFirstWithHostNet.** O Windows não oferece suporte a essa política de DNS para Pods.**Todos os nomes contendo um ponto (
.) são tratados como FQDNs.** Ao contrário do Linux, que percorre uma lista de sufixos de busca, o Windows não anexa sufixos de busca DNS para nomes com ponto.Apenas um sufixo DNS é usado por Pod. O sufixo deriva do namespace do Pod. Por exemplo, um Pod no namespace
defaultrecebe o sufixodefault.svc.cluster.local. Isso significa quekubernetes.default.svc.cluster.localekubernetesresolvem corretamente, mas nomes parcialmente qualificados, comokubernetes.defaultoukubernetes.default.svc, não resolvem.**Use
Resolve-DnsNamepara consultas DNS.** O Windows oferece suporte a múltiplos resolvedores DNS com pequenas diferenças comportamentais. O cmdlet do powershell Resolve-DnsName fornece os resultados mais consistentes.
Para mais informações, consulte DNS para Services e Pods.