ACK Pro マネージドクラスター内で障害が発生している段階を特定するために、名前解決の各ステージで DNS メッセージをキャプチャします。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
-
クラスターの kubeconfig ファイルおよび kubectl 接続性。
背景情報
dnstap は DNS メッセージ用のログフォーマットです。CoreDNS には組み込みの dnstap プラグインが含まれており、すべての DNS メッセージをキャプチャします。ACK CoreDNS DNSTAP Analyser はこれらのメッセージを TCP 経由で受信し、セッションごとの診断レコードに集約します。
ログフォーマットの詳細については、dnstap をご参照ください。
ステップ 1:ACK CoreDNS DNSTAP Analyser のインストール
-
ACK コンソールにログインします。左側のナビゲーションウィンドウで クラスター をクリックします。
-
クラスター ページで対象のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで アプリケーション > Helm を選択します。
-
Helm ページで デプロイ をクリックします。基本情報 ステップで、次のパラメーターを設定します。ack-coredns-dnstap-analyser を選択し、次へ をクリックします。
パラメーター 値 アプリケーション名 ack-coredns-dnstap-analyserNamespace kube-systemソース マーケットプレイス(デフォルト) Chart — 利用シーン All Chart — サポートされるアーキテクチャ amd64 Chart — 検索ボックス ack-coredns-dnstap-analyser -
パラメーター ステップで、Chart バージョン を設定し、OK をクリックします。
ステップ 2:CoreDNS での dnstap プラグインの構成
CoreDNS には dnstap プラグインが含まれています。このプラグインを有効化し、ACK CoreDNS DNSTAP Analyser を指すように設定することで、DNS メッセージが自動的に転送されます。
-
DNSTAP Analyser サービスのクラスター IP アドレスを取得します。このアドレスは次のステップで使用するため、メモしておいてください。
kubectl -n kube-system get svc dnstap-analyserこの例では、クラスター IP アドレスは
172.21.0.10です。 -
CoreDNS ConfigMap を編集モードで開きます。
kubectl -n kube-system edit cm coredns -o yaml -
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 } -
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 -
CoreDNS Pod のログを末尾から表示します。前の出力の Pod 名に応じて
coredns-7d56lを置き換えてください。kubectl -n kube-system logs -f --tail=500 coredns-7d56l最大 1 分間待機します。正常に再読み込みが完了すると、次のメッセージが出力されます。
[INFO] Reloading complete
-
ステップ 3:ACK CoreDNS DNSTAP Analyser のログの表示
-
すべての ACK CoreDNS DNSTAP Analyser Pod を一覧表示します。
kubectl -n kube-system get pod | grep dnstap-analyser期待される出力:
dnstap-analyser-bbdf879-g**** 1/1 Running 0 30m -
ログをストリーム表示します。前の出力の 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 のアンインストール
調査が完了したら、不要なコストを回避するためにアナライザーを削除してください。
-
CoreDNS ConfigMap から
dnstapディレクティブを削除します。-
ConfigMap を編集モードで開きます。
kubectl -n kube-system edit cm coredns -o yaml -
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 } -
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 -
CoreDNS Pod のログを末尾から表示します。前の出力の Pod 名に応じて
coredns-7d56lを置き換えてください。kubectl -n kube-system logs -f --tail=500 coredns-7d56l最大 1 分間待機します。正常に再読み込みが完了すると、次のメッセージが出力されます。
[INFO] Reloading complete
-
-
ACK CoreDNS DNSTAP Analyser Helm リリースを削除します。
-
ACK コンソールにログインします。左側のナビゲーションウィンドウで クラスター をクリックします。
-
クラスター ページで対象のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで アプリケーション > Helm を選択します。
-
Helm ページで ack-coredns-dnstap-analyser を見つけ、操作 列の 削除 をクリックします。
-