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

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

最終更新日:Nov 12, 2024

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

前提条件

背景情報

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

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

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

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

  3. [Helm] ページで、[デプロイ] をクリックします。 [基本情報] ステップで、次の表に基づいてパラメーターを設定します。

    パラメーター

    アプリケーション名

    ack-coredns-dnstap-analyser

    名前空間

    kube-system

    ソース

    デフォルト値: Marketplace

    チャート

    • Use Scenariosパラメータに [すべて] を選択します。

    • サポートされるアーキテクチャパラメーターにamd64を選択します。

    • 検索ボックスにack-coredns-dnstap-analyserと入力します。

    [ack-coredns-dnstap-analyser] を選択し、[次へ] をクリックします。

  4. [パラメーター] ステップで、[グラフバージョン] パラメーターを設定し、[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 {
                #Details are omitted.
                ready
    
                # Add the code. Replace 172.21.0.10 with the actual cluster IP address of CoreDNS DNSTAP Analyser. 
                dnstap tcp://172.21.0.10:6000 full
    
                kubernetes cluster.local in-addr.arpa ip6.arpa {
                #Details are omitted.
                }
                #Details are omitted.
                reload
                loadbalance
            }
  4. 次のコマンドを実行して、CoreDNSを実行するすべてのポッドを照会します。

    kubectl -n kube-system get pod | grep coredns

    期待される出力:

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

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

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

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

    [INFO] Reloading complete

ステップ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     Running   0          30m
  2. 次のコマンドを実行して、ACK CoreDNS DNSTAPアナライザーのログを表示します。

    kubectl -n kube-system logs -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 {
                  #Details are omitted.
                  ready
      
                  # Delete the following line that you added.
                  dnstap tcp://10.10.10.10:6000 full
      
                  kubernetes cluster.local in-addr.arpa ip6.arpa {
                  #Details are omitted.
                  }
                  #Details are omitted.
                  reload
                  loadbalance
              }
    3. 次のコマンドを実行して、CoreDNSを実行するすべてのポッドを照会します。

      kubectl -n kube-system get pod | grep coredns

      期待される出力:

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

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

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

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

      [INFO] Reloading complete
  2. ACK CoreDNS DNSTAP Analyserをアンインストールします。

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

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

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

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