Capture mensagens DNS em cada estágio de resolução para identificar onde ocorrem falhas em clusters ACK Pro.
Pré-requisitos
Antes de começar, verifique se você tem:
Um ACK Pro cluster.
O cluster kubeconfig file e conectividade kubectl.
Contexto
dnstap é um formato de log para mensagens DNS. O CoreDNS inclui um plugin dnstap nativo que captura todas as mensagens DNS. O ACK CoreDNS DNSTAP Analyser recebe essas mensagens via TCP e as agrega em registros de diagnóstico por sessão.
Consulte dnstap para detalhes sobre o formato de log.
Etapa 1: Instale o ACK CoreDNS DNSTAP Analyser
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, localize o cluster e clique em seu nome. No painel de navegação à esquerda, escolha Applications > Helm.
-
Na página Helm, clique em Deploy. Na etapa Basic Information, configure os parâmetros a seguir. Selecione ack-coredns-dnstap-analyser e clique em Next.
Parâmetro
Valor
Application Name
ack-coredns-dnstap-analyserNamespace
kube-systemSource
Marketplace (padrão)
Chart — Use Scenarios
All
Chart — Supported Architecture
amd64
Chart — Search box
ack-coredns-dnstap-analyser Na etapa Parameters, configure a Chart Version e clique em OK.
Etapa 2: Configure o plugin dnstap no CoreDNS
O CoreDNS inclui o plugin dnstap. Ative-o e aponte-o para o ACK CoreDNS DNSTAP Analyser para encaminhar mensagens DNS automaticamente.
-
Obtenha o endereço IP do cluster do service DNSTAP Analyser. Anote esse endereço para a próxima etapa.
kubectl -n kube-system get svc dnstap-analyserNeste exemplo, o endereço IP do cluster é
172.21.0.10. -
Abra o ConfigMap do CoreDNS para edição.
kubectl -n kube-system edit cm coredns -o yaml -
Adicione a diretiva
dnstapao Corefile. Substitua172.21.0.10pelo endereço IP do cluster obtido na Etapa 1.Corefile: | .:53 { # ... other plugins ... ready # Add this line. The "full" flag includes the complete wire-format DNS # message in each record, which provides richer diagnostic data. dnstap tcp://172.21.0.10:6000 full kubernetes cluster.local in-addr.arpa ip6.arpa { # ... other settings ... } # ... other plugins ... reload loadbalance } -
Verifique se o CoreDNS recarregou a configuração.
-
Liste todos os Pods do CoreDNS.
kubectl -n kube-system get pod | grep corednsSaída esperada:
coredns-7d56l 1/1 Running 0 30m coredns-s7m2t 1/1 Running 0 30m -
Acompanhe o log de um Pod do CoreDNS. Substitua
coredns-7d56lpelo nome de um Pod exibido na saída anterior.kubectl -n kube-system logs -f --tail=500 coredns-7d56lAguarde até um minuto. Um recarregamento bem-sucedido produz:
[INFO] Reloading complete
-
Etapa 3: Visualize o log do ACK CoreDNS DNSTAP Analyser
-
Liste todos os Pods do ACK CoreDNS DNSTAP Analyser.
kubectl -n kube-system get pod | grep dnstap-analyserSaída esperada:
dnstap-analyser-bbdf879-g**** 1/1 Running 0 30m -
Transmita o log em tempo real. Substitua
dnstap-analyser-bbdf879-g****pelo nome do Pod exibido na saída anterior.kubectl -n kube-system logs -f dnstap-analyser-bbdf879-g****
Etapa 4: Analise o log
Cada linha do log representa uma sessão DNS — um ciclo completo de requisição e resposta entre um cliente, o CoreDNS e o servidor DNS upstream.
Como interpretar uma entrada de sessão: Verifique o campo Status para confirmar sucesso ou falha. Examine o campo BitMap para identificar em qual estágio de resolução ocorreu a falha. Inspecione o campo Messages para visualizar os payloads DNS brutos.
Campo Status
|
Status |
Descrição |
|
|
Consulta DNS concluída. A resposta contém um código de status |
|
|
Resolução falhou. A resposta contém um código de status de erro ou a conexão upstream expirou. |
|
|
O CoreDNS ou o analyser descartou mensagens dnstap por sobrecarga. Dimensione o componente sobrecarregado para melhorar a precisão do diagnóstico. |
EntradasSampleLossindicam que algumas sessões DNS não foram capturadas. Se entradasSampleLossforem frequentes, dimensione os Pods do CoreDNS ou do analyser antes de continuar.
Campo BitMap
Máscara de bits que indica quais tipos de mensagem foram capturados na sessão. Use-a para identificar em qual ponto da cadeia de resolução a falha ocorreu.
|
BitMap |
Descrição |
|
|
O CoreDNS recebeu uma consulta do cliente, mas não retornou resposta. |
|
|
Domínio interno resolvido. A consulta atingiu o cache do CoreDNS ou um registro DNS do Kubernetes, e o resultado foi retornado ao cliente. |
|
|
Servidor DNS upstream inacessível. O CoreDNS encaminhou a consulta, mas não recebeu resposta. |
|
|
Domínio externo resolvido. O CoreDNS encaminhou a consulta ao servidor upstream, recebeu uma resposta e a devolveu ao cliente. |
Campo Messages
O campo Messages contém consultas e respostas DNS em JSON. Analise-as com base na referência de parâmetros DNS da IANA para inspecionar códigos de resposta e tipos de registro.
(Opcional) Etapa 5: Desinstale o ACK CoreDNS DNSTAP Analyser
Após concluir a investigação, remova o analyser para evitar custos desnecessários.
-
Remova a diretiva
dnstapdo ConfigMap do CoreDNS.-
Abra o ConfigMap para edição.
kubectl -n kube-system edit cm coredns -o yaml -
Exclua a linha que contém
dnstap.Corefile: | .:53 { # ... other plugins ... ready # Delete the following line. dnstap tcp://10.10.10.10:6000 full kubernetes cluster.local in-addr.arpa ip6.arpa { # ... other settings ... } # ... other plugins ... reload loadbalance } -
Verifique se o CoreDNS recarregou a configuração. Liste todos os Pods do CoreDNS.
kubectl -n kube-system get pod | grep corednsSaída esperada:
coredns-7d56l 1/1 Running 0 30m coredns-s7m2t 1/1 Running 0 30m -
Acompanhe o log de um Pod do CoreDNS. Substitua
coredns-7d56lpelo nome de um Pod exibido na saída anterior.kubectl -n kube-system logs -f --tail=500 coredns-7d56lAguarde até um minuto. Um recarregamento bem-sucedido produz:
[INFO] Reloading complete
-
-
Exclua o release Helm do ACK CoreDNS DNSTAP Analyser.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, localize o cluster e clique em seu nome. No painel de navegação à esquerda, escolha Applications > Helm.
Na página Helm, localize ack-coredns-dnstap-analyser e clique em Delete na coluna Actions.