すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK CoreDNS DNSTAP Analyser を使用した DNS 名前解決エラーの診断

最終更新日:Jun 18, 2026

ACK Pro マネージドクラスター内で障害が発生している段階を特定するために、名前解決の各ステージで DNS メッセージをキャプチャします。

前提条件

作業を開始する前に、以下の要件を満たしていることを確認してください。

背景情報

dnstap は DNS メッセージ用のログフォーマットです。CoreDNS には組み込みの dnstap プラグインが含まれており、すべての DNS メッセージをキャプチャします。ACK CoreDNS DNSTAP Analyser はこれらのメッセージを TCP 経由で受信し、セッションごとの診断レコードに集約します。

ログフォーマットの詳細については、dnstap をご参照ください。

ステップ 1:ACK CoreDNS DNSTAP Analyser のインストール

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで クラスター をクリックします。

  2. クラスター ページで対象のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで アプリケーション > Helm を選択します。

  3. Helm ページで デプロイ をクリックします。基本情報 ステップで、次のパラメーターを設定します。ack-coredns-dnstap-analyser を選択し、次へ をクリックします。

    パラメーター
    アプリケーション名 ack-coredns-dnstap-analyser
    Namespace kube-system
    ソース マーケットプレイス(デフォルト)
    Chart — 利用シーン All
    Chart — サポートされるアーキテクチャ amd64
    Chart — 検索ボックス ack-coredns-dnstap-analyser
  4. パラメーター ステップで、Chart バージョン を設定し、OK をクリックします。

ステップ 2:CoreDNS での dnstap プラグインの構成

CoreDNS には dnstap プラグインが含まれています。このプラグインを有効化し、ACK CoreDNS DNSTAP Analyser を指すように設定することで、DNS メッセージが自動的に転送されます。

  1. DNSTAP Analyser サービスのクラスター IP アドレスを取得します。このアドレスは次のステップで使用するため、メモしておいてください。

    kubectl -n kube-system get svc dnstap-analyser

    この例では、クラスター IP アドレスは 172.21.0.10 です。

  2. CoreDNS ConfigMap を編集モードで開きます。

    kubectl -n kube-system edit cm coredns -o yaml
  3. Corefile に dnstap ディレクティブを追加します。172.21.0.10 は、ステップ 1 で取得したクラスター IP アドレスに置き換えてください。

    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
        }
  4. CoreDNS が構成を再読み込みしたことを確認します。

    1. すべての CoreDNS Pod を一覧表示します。

      kubectl -n kube-system get pod | grep coredns

      期待される出力:

      coredns-7d56l         1/1     Running   0          30m
      coredns-s7m2t         1/1     Running   0          30m
    2. CoreDNS Pod のログを末尾から表示します。前の出力の Pod 名に応じて coredns-7d56l を置き換えてください。

      kubectl -n kube-system logs -f --tail=500 coredns-7d56l

      最大 1 分間待機します。正常に再読み込みが完了すると、次のメッセージが出力されます。

      [INFO] Reloading complete

ステップ 3:ACK CoreDNS DNSTAP Analyser のログの表示

  1. すべての ACK CoreDNS DNSTAP Analyser Pod を一覧表示します。

    kubectl -n kube-system get pod | grep dnstap-analyser

    期待される出力:

    dnstap-analyser-bbdf879-g****         1/1     Running   0          30m
  2. ログをストリーム表示します。前の出力の Pod 名に応じて dnstap-analyser-bbdf879-g**** を置き換えてください。

    kubectl -n kube-system logs -f dnstap-analyser-bbdf879-g****

ステップ 4:ログの分析

ログの各行は 1 つの DNS セッション(クライアント、CoreDNS、および上流 DNS サーバー間の完全なリクエスト - 応答サイクル)を表します。

セッションエントリの読み方: Status を確認して成功または失敗を判断します。BitMap を確認して名前解決のどの段階で失敗したかを特定します。Messages を確認して生の DNS ペイロードを検査します。

Status フィールド

Status 説明
Succeeded DNS クエリが完了しました。応答には NXDOMAIN または NOERROR の状態コードが含まれます。
Failed 名前解決に失敗しました。応答にエラー状態コードが含まれているか、上流接続がタイムアウトしました。
SampleLoss CoreDNS またはアナライザーが過負荷により dnstap メッセージを破棄しました。診断精度を向上させるには、過負荷になっているコンポーネントをスケールアップしてください。
SampleLoss エントリは、一部の DNS セッションがキャプチャされなかったことを意味します。SampleLoss エントリが頻繁に発生する場合は、調査を続ける前に CoreDNS またはアナライザーポッドをスケールアップしてください。

BitMap フィールド

セッションでキャプチャされたメッセージタイプをエンコードしたビットマスクです。名前解決チェーン内のどこで障害が発生したかを特定するために使用します。

BitMap 説明
1 CoreDNS がクライアントクエリを受信しましたが、応答を返しませんでした。
3 内部ドメインが解決されました。クエリが CoreDNS キャッシュまたは Kubernetes DNS レコードにヒットし、結果がクライアントに返されました。
5 上流 DNS サーバーに到達できません。CoreDNS がクエリを転送しましたが、応答を受信しませんでした。
15 外部ドメインが解決されました。CoreDNS がクエリを上流サーバーに転送し、応答を受信してクライアントに返しました。

Messages フィールド

Messages フィールドには、JSON 形式の DNS クエリおよび応答が含まれます。IANA DNS パラメーターリファレンス を参照して、応答コードおよびレコードタイプを検査してください。

(オプション)ステップ 5:ACK CoreDNS DNSTAP Analyser のアンインストール

調査が完了したら、不要なコストを回避するためにアナライザーを削除してください。

  1. CoreDNS ConfigMap から dnstap ディレクティブを削除します。

    1. ConfigMap を編集モードで開きます。

      kubectl -n kube-system edit cm coredns -o yaml
    2. 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
          }
    3. CoreDNS が構成を再読み込みしたことを確認します。すべての CoreDNS Pod を一覧表示します。

      kubectl -n kube-system get pod | grep coredns

      期待される出力:

      coredns-7d56l         1/1     Running   0          30m
      coredns-s7m2t         1/1     Running   0          30m
    4. CoreDNS Pod のログを末尾から表示します。前の出力の Pod 名に応じて coredns-7d56l を置き換えてください。

      kubectl -n kube-system logs -f --tail=500 coredns-7d56l

      最大 1 分間待機します。正常に再読み込みが完了すると、次のメッセージが出力されます。

      [INFO] Reloading complete
  2. ACK CoreDNS DNSTAP Analyser Helm リリースを削除します。

    1. ACK コンソールにログインします。左側のナビゲーションウィンドウで クラスター をクリックします。

    2. クラスター ページで対象のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで アプリケーション > Helm を選択します。

    3. Helm ページで ack-coredns-dnstap-analyser を見つけ、操作 列の 削除 をクリックします。

次のステップ