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

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

最終更新日:Sep 19, 2026

ACK Pro クラスターにおいて、各名前解決ステージで DNS メッセージをキャプチャし、障害が発生した箇所を特定します。

前提条件

開始する前に、次の条件を満たしていることを確認してください。

背景

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

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

ステップ 1: ACK CoreDNS DNSTAP アナライザーのインストール

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

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

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

    パラメーター

    [アプリケーション名]

    ack-coredns-dnstap-analyser

    [名前空間]

    kube-system

    [ソース]

    [マーケットプレイス] (デフォルト)

    [チャート] — 使用シナリオ

    すべて

    [チャート] — サポートされるアーキテクチャ

    amd64

    [チャート] — 検索ボックス

    ack-coredns-dnstap-analyser

  4. パラメーターステップで、[チャートバージョン] を設定し、[OK] をクリックします。

ステップ 2: CoreDNS での dnstap プラグインの設定

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

  1. DNSTAP アナライザー Service のクラスター 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 を前の手順で取得したクラスター IP アドレスに置き換えてください。

    Corefile: |
        .:53 {
            # ... その他のプラグイン ...
            ready
    
            # 次の行を追加します。"full" フラグを指定すると、各レコードに完全な
            # ワイヤーフォーマット DNS メッセージが含まれ、より豊富な診断データが提供されます。
            dnstap tcp://172.21.0.10:6000 full
    
            kubernetes cluster.local in-addr.arpa ip6.arpa {
            # ... その他の設定 ...
            }
            # ... その他のプラグイン ...
            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 のログをテールします。coredns-7d56l を前の出力の Pod 名に置き換えてください。

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

      最大 1 分間待ちます。再読み込みが成功すると、次のメッセージが表示されます。

      [INFO] Reloading complete

ステップ 3: ACK CoreDNS DNSTAP アナライザーのログの表示

  1. すべての ACK CoreDNS DNSTAP アナライザー Pod を一覧表示します。

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

    想定される出力:

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

    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 またはアナライザー Pod をスケールアップしてください。

BitMap フィールド

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

BitMap

説明

1

CoreDNS がクライアントクエリを受信しましたが、レスポンスを返しませんでした。

3

内部ドメインが解決されました。クエリは CoreDNS キャッシュまたは Kubernetes DNS レコードにヒットし、結果がクライアントに返されました。

5

アップストリーム DNS サーバーに到達できませんでした。CoreDNS がクエリを転送しましたが、レスポンスを受信しませんでした。

15

外部ドメインが解決されました。CoreDNS がクエリをアップストリームサーバーに転送し、レスポンスを受信してクライアントに返しました。

Messages フィールド

Messages フィールドには、JSON 形式の DNS クエリとレスポンスが含まれます。IANA DNS パラメーター参照と照合して解析し、レスポンスコードとレコードタイプを確認してください。

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

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

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

    1. ConfigMap を編集用に開きます。

      kubectl -n kube-system edit cm coredns -o yaml
    2. dnstap を含む行を削除します。

      Corefile: |
          .:53 {
              # ... その他のプラグイン ...
              ready
      
              # 次の行を削除します。
              dnstap tcp://172.21.0.10:6000 full
      
              kubernetes cluster.local in-addr.arpa ip6.arpa {
              # ... その他の設定 ...
              }
              # ... その他のプラグイン ...
              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 のログをテールします。coredns-7d56l を前の出力の Pod 名に置き換えてください。

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

      最大 1 分間待ちます。再読み込みが成功すると、次のメッセージが表示されます。

      [INFO] Reloading complete
  2. ACK CoreDNS DNSTAP アナライザーの Helm リリースを削除します。

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

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

    3. [Helm] ページで ack-coredns-dnstap-analyser を探し、[アクション] 列の [削除] をクリックします。

次のステップ