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

Container Service for Kubernetes:ACK CoreDNS DNSTAPアナライザーを使用してDNS解決エラーを診断する

最終更新日:Mar 06, 2025

Container Service for Kubernetes (ACK) は、ACK CoreDNS DNSTAP Analyserコンポーネントを提供します。 コンポーネントは、クライアントとCoreDNSの間、またはCoreDNSとアップストリームDNSサーバーの間で交換されるDNSメッセージを識別および分類できます。 このコンポーネントを使用して、DNS解決エラーの原因を効率的に特定できます。

前提条件

背景情報

dnstapはDNSメッセージのログ形式です。 dnstapを使用して、DNSサーバーのDNS解決エラーを診断できます。 詳細は、「dnstap」をご参照ください。

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

  1. ACKコンソールにログインします。

  2. ACKコンソールの左側のナビゲーションウィンドウで、[Marketplace] > [Marketplace] を選択します。

  3. [アプリカタログ] ページで、検索ボックスにack-coredns-dnstap-analyserと入力し、検索アイコンをクリックします。 検索結果で、ack-coredns-dnstap-analyserを見つけてクリックします。

  4. ack-coredns-dnstap-analyserページで、[デプロイ] をクリックします。

  5. [デプロイ] ウィザードで、クラスターと名前空間を選択し、[次へ] をクリックします。 [パラメーター] ウィザードで、ビジネス要件に基づいてパラメーターを設定し、[OK] をクリックします。

ステップ2: CoreDNSでDNSTAPプラグインを設定する

CoreDNSには、DNSTAPメッセージを送信するDNSTAPプラグインがプリインストールされています。 DNSTAPプラグインによって送受信されるDNSメッセージは、ACK CoreDNS DNSTAPアナライザーに転送できます。 ACK CoreDNS DNSTAPアナライザーを使用してCoreDNS解決エラーを診断する前に、CoreDNSでDNSTAPプラグインを設定して有効にする必要があります。 DNSTAPプラグインが設定されると、CoreDNSはDNSTAPプラグインによって送受信されるDNSメッセージを自動診断のためにACK CoreDNS DNSTAPアナライザーに転送します。

  1. 次のコマンドを実行して、kube-system名前空間のACK CoreDNS DNSTAP AnalyserのクラスターIPアドレスを照会し、記録します。 このIPアドレスは、DNSTAPプラグインの設定に使用されます。 この例では、IPアドレスは172.21.0.10です。

    kubectl -n kube-system get svc dnstap-analyser
  2. 次のコマンドを実行して、CoreDNSのConfigMapを変更します。

    kubectl -n kube-system edit cm coredns -o yaml
  3. 次のスニペットのコメントに基づいて、CoreDNSのデフォルト設定を変更します。

    ConfigMapで、DNSTAPプラグインを有効にし、その宛先アドレスをACK CoreDNS DNSTAPアナライザーのクラスターIPアドレスに設定する必要があります。 このようにして、DNSTAPプラグインによって送受信されるDNSメッセージをACK CoreDNS DNSTAPアナライザーに転送できます。

    Corefile: |
            .:53 {
                # 詳細は示されていません。
                準備完了
    
                # 次の行を追加します。 172.21.0.10をCoreDNS DNSTAP Analyserの実際のクラスターIPアドレスに置き換えます。 
                dnstap tcp:// 172.21.0.10:6000フル
    
                kubernetes cluster.local in-addr.arpa ip6.arpa {
                # 詳細は示されていません。
                }
                # 詳細は示されていません。
                リロード
                loadbalance
            }
  4. 次のコマンドを実行して、CoreDNSを実行するすべてのポッドを照会します。

    kubectl -n kube-system get pod | grep coredns

    期待される出力:

    coredns-7d56l 1/1ランニング0 30m
    coredns-s7m2t 1/1ランニング0 30m 
  5. 次のコマンドを実行して、CoreDNSログを表示します。

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

    coredns-7d56lを、前のステップ4で返されたポッドの名前に置き換えます。

    1分待ちます。 次の出力が返され、例外が発生しない場合、設定は変更されます。

    [情報] リロード完了

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

  1. 次のコマンドを実行して、ACK CoreDNS DNSTAP Analyserを実行するすべてのポッドを照会します。

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

    期待される出力:

    dnstap-analyser-bbdf879-g **** 1/1ランニング0 30m
  2. 次のコマンドを実行して、ACK CoreDNS DNSTAPアナライザーのログを表示します。

    kubectl -n kube-システムログ-f dnstap-analyser-bbdf879-g ****
    説明

    dnstap-analyser-bbdf879-gpfkmを、前のステップ1で返されたポッドの名前に置き換えます。

ステップ4: ACK CoreDNS DNSTAPアナライザーのログを分析する

ACK CoreDNS DNSTAP Analyserのログでは、各行にDNSセッションに関する集計情報が含まれています。 DNSセッションには、クライアント、CoreDNS、およびアップストリームDNSサーバー間で交換されるすべての要求と応答が含まれます。 DNSセッションには、次のフィールドが含まれます。

  • ステータス: [ステータス] フィールドの値は、シナリオによって異なります。

    ステータス

    説明

    成功

    ドメイン名が解決されました。 応答は、NXDOMAINまたはNOERRORステータスコードを搬送する。

    失敗した

    ドメイン名の解決に失敗しました。 応答にはエラーステータスコードが含まれるか、アップストリームDNSサーバーへの接続がタイムアウトします。

    サンプルロス

    CoreDNSまたはACK CoreDNS DNSTAP Analyserがオーバーロードされ、DNSTAPメッセージがドロップされます。 この場合、CoreDNSまたはACK CoreDNS DNSTAP Analyserを実行するポッドの数を増やして、各ポッドの負荷を軽減する必要があります。 これにより、診断結果の精度が向上します。

  • BitMap: セッションからキャプチャされるDNSTAPメッセージのタイプを示します。 メッセージタイプに基づいて、DNS解決エラーの考えられる原因を特定できます。

    ビットマップ

    説明

    1

    CoreDNSはクライアントからDNSクエリを受信しましたが、クライアントに応答を返しませんでした。

    3

    内部ドメイン名が解決されました。 クライアントから送信されたDNSクエリは、CoreDNSのローカルDNSキャッシュまたはKubernetesクラスターのDNSレコードにヒットします。 結果がクライアントに返されました。

    5

    上流DNSサーバの接続に失敗しました。 CoreDNSは、クライアントから送信されたDNSクエリをアップストリームDNSサーバーに転送しました。 アップストリームDNSサーバは結果を返しませんでした。

    15

    外部ドメイン名が解決されました。 CoreDNSは、クライアントから送信されたDNSクエリをアップストリームDNSサーバーに転送しました。 アップストリームDNSサーバーがドメイン名を解決し、結果をCoreDNSに返しました。 その後、CoreDNSは結果をクライアントに返しました。

  • メッセージ: このフィールドには、元のDNSクエリと応答の内容がJSON形式で記録されます。 dns-parameters-6に基づいてメッセージの内容を分析できます。

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

原因を特定したら、不要なコストを回避するためにACK CoreDNS DNSTAP Analyserをアンインストールすることを推奨します。 ACK CoreDNS DNSTAP Analyserをアンインストールするには、次の手順を実行します。

  1. CoreDNSのConfigMapからdnstapを含む行を削除します。

    1. 次のコマンドを実行して、CoreDNSのConfigMapを変更します。

      kubectl -n kube-system edit cm coredns -o yaml
    2. 次の内容に基づいて、CoreDNSのConfigMapからdnstapを含む行を削除します。

      Corefile: |
              .:53 {
                  # 詳細は示されていません。
                  準備完了
      
                  # 以前に追加した次の行を削除します。
                  dnstap tcp:// 10.10.10.10:6000フル
      
                  kubernetes cluster.local in-addr.arpa ip6.arpa {
                  # 詳細は示されていません。
                  }
                  # 詳細は示されていません。
                  リロード
                  loadbalance
              }
    3. 次のコマンドを実行して、CoreDNSを実行するすべてのポッドを照会します。

      kubectl -n kube-system get pod | grep coredns

      期待される出力:

      coredns-7d56l 1/1ランニング0 30m
      coredns-s7m2t 1/1ランニング0 30m 
    4. 次のコマンドを実行して、CoreDNSログを表示します。

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

      coredns-7d56lを、前のステップcで返されたポッドの名前に置き換えます。

      1分待ちます。 次の出力が返され、例外が発生しない場合、設定は変更されます。

      [情報] リロード完了
  2. ACK CoreDNS DNSTAP Analyserをアンインストールします。

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

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[アプリケーション] > [ヘルム] を選択します。

    3. クラスターの詳細ページの左側のナビゲーションウィンドウで、[アプリケーション] > [ヘルム] を選択します。

    4. Helmページで、ack-coredns-dnstap-analyserを見つけ、[操作] 列の [削除] をクリックします。 画面上の指示に従って、ack-coredns-dnstap-analyserを削除します。