ACK Pro クラスターにおいて、各名前解決ステージで DNS メッセージをキャプチャし、障害が発生した箇所を特定します。
前提条件
開始する前に、次の条件を満たしていることを確認してください。
ACK Pro クラスターが作成されていること。
クラスターの kubeconfig ファイルを取得し、kubectl で接続できること。
背景
dnstap は DNS メッセージ用のログフォーマットです。CoreDNS には dnstap プラグインが組み込まれており、すべての DNS メッセージをキャプチャします。ACK CoreDNS DNSTAP Analyser は、これらのメッセージを TCP 経由で受信し、セッションごとの診断レコードに集約します。
ログフォーマットの詳細については、「dnstap」をご参照ください。
ステップ 1: ACK CoreDNS DNSTAP アナライザーのインストール
ACK コンソールにログインします。 左側のナビゲーションペインで、[クラスター]をクリックします。
[クラスター] ページで、クラスターを見つけてその名前をクリックします。左側のナビゲーションペインで、[アプリケーション] > [Helm] を選択します。
[Helm] ページで [デプロイ] をクリックします。[基本情報] ステップで次のパラメーターを設定し、ack-coredns-dnstap-analyser を選択して [次へ] をクリックします。
パラメーター
値
[アプリケーション名]
ack-coredns-dnstap-analyser[名前空間]
kube-system[ソース]
[マーケットプレイス] (デフォルト)
[チャート] — 使用シナリオ
すべて
[チャート] — サポートされるアーキテクチャ
amd64
[チャート] — 検索ボックス
ack-coredns-dnstap-analyserパラメーターステップで、[チャートバージョン] を設定し、[OK] をクリックします。
ステップ 2: CoreDNS での dnstap プラグインの設定
CoreDNS には dnstap プラグインが含まれています。このプラグインを有効にし、ACK CoreDNS DNSTAP アナライザーを指定することで、DNS メッセージが自動的に転送されます。
DNSTAP アナライザー Service のクラスター IP アドレスを取得します。次のステップのために、このアドレスをメモしてください。
kubectl -n kube-system get svc dnstap-analyserこの例では、クラスター IP アドレスは
172.21.0.10です。CoreDNS ConfigMap を編集用に開きます。
kubectl -n kube-system edit cm coredns -o yamlCorefile に
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 }CoreDNS が設定を再読み込みしたことを確認します。
すべての CoreDNS Pod を一覧表示します。
kubectl -n kube-system get pod | grep coredns想定される出力:
coredns-7d56l 1/1 Running 0 30m coredns-s7m2t 1/1 Running 0 30mCoreDNS Pod のログをテールします。
coredns-7d56lを前の出力の Pod 名に置き換えてください。kubectl -n kube-system logs -f --tail=500 coredns-7d56l最大 1 分間待ちます。再読み込みが成功すると、次のメッセージが表示されます。
[INFO] Reloading complete
ステップ 3: ACK CoreDNS DNSTAP アナライザーのログの表示
すべての ACK CoreDNS DNSTAP アナライザー Pod を一覧表示します。
kubectl -n kube-system get pod | grep dnstap-analyser想定される出力:
dnstap-analyser-bbdf879-g**** 1/1 Running 0 30mログをストリーミングします。
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 | 説明 |
| DNS クエリが完了しました。レスポンスには |
| 名前解決が失敗しました。レスポンスにエラーステータスコードが含まれるか、アップストリーム接続がタイムアウトしました。 |
| CoreDNS またはアナライザーが過負荷により dnstap メッセージをドロップしました。診断精度を向上させるために、過負荷のコンポーネントをスケールアップしてください。 |
SampleLossエントリは、一部の DNS セッションがキャプチャされなかったことを意味します。SampleLossエントリが頻繁に発生する場合は、続行する前に CoreDNS またはアナライザー Pod をスケールアップしてください。
BitMap フィールド
セッションでキャプチャされたメッセージタイプをエンコードするビットマスクです。名前解決チェーンのどこで障害が発生したかを特定するために使用します。
BitMap | 説明 |
| CoreDNS がクライアントクエリを受信しましたが、レスポンスを返しませんでした。 |
| 内部ドメインが解決されました。クエリは CoreDNS キャッシュまたは Kubernetes DNS レコードにヒットし、結果がクライアントに返されました。 |
| アップストリーム DNS サーバーに到達できませんでした。CoreDNS がクエリを転送しましたが、レスポンスを受信しませんでした。 |
| 外部ドメインが解決されました。CoreDNS がクエリをアップストリームサーバーに転送し、レスポンスを受信してクライアントに返しました。 |
Messages フィールド
Messages フィールドには、JSON 形式の DNS クエリとレスポンスが含まれます。IANA DNS パラメーター参照と照合して解析し、レスポンスコードとレコードタイプを確認してください。
(オプション) ステップ 5: ACK CoreDNS DNSTAP アナライザーのアンインストール
調査が完了したら、不要なコストを回避するためにアナライザーを削除してください。
CoreDNS ConfigMap から
dnstapディレクティブを削除します。ConfigMap を編集用に開きます。
kubectl -n kube-system edit cm coredns -o yamldnstapを含む行を削除します。Corefile: | .:53 { # ... その他のプラグイン ... ready # 次の行を削除します。 dnstap tcp://172.21.0.10:6000 full kubernetes cluster.local in-addr.arpa ip6.arpa { # ... その他の設定 ... } # ... その他のプラグイン ... reload loadbalance }CoreDNS が設定を再読み込みしたことを確認します。すべての CoreDNS Pod を一覧表示します。
kubectl -n kube-system get pod | grep coredns想定される出力:
coredns-7d56l 1/1 Running 0 30m coredns-s7m2t 1/1 Running 0 30mCoreDNS Pod のログをテールします。
coredns-7d56lを前の出力の Pod 名に置き換えてください。kubectl -n kube-system logs -f --tail=500 coredns-7d56l最大 1 分間待ちます。再読み込みが成功すると、次のメッセージが表示されます。
[INFO] Reloading complete
ACK CoreDNS DNSTAP アナライザーの Helm リリースを削除します。
ACK コンソールにログインします。左側のナビゲーションペインで、[クラスター]をクリックします。
[クラスター] ページで、クラスターを見つけてその名前をクリックします。 左側のナビゲーションペインで、[アプリケーション] > [Helm] を選択します。
[Helm] ページで ack-coredns-dnstap-analyser を探し、[アクション] 列の [削除] をクリックします。