AKS クラスター内の Linux ノードから TCP ダンプをキャプチャする
ネットワークの問題は、Microsoft Azure Kubernetes Service (AKS) クラスターを使用しているときに発生する可能性があります。 これらの問題を調査するために、この記事では、AKS クラスター内の Linux ノードから TCP ダンプをキャプチャし、そのキャプチャをローカル コンピューターにダウンロードする方法について説明します。
前提条件
- Kubernetes kubectl ツール。 Azure CLI を使用して kubectl をインストールするには、az aks install-cli コマンドを実行します。
- AKS クラスター。 AKS クラスターがない場合は、Azure CLI を使用 作成するか Azure portal を します。
- linux ノードにインストールされている tcpdump コマンドライン ツール。
Note
TCP キャプチャは、 Helm グラフを使用して自動化できます。これはバックグラウンドで DaemonSet として実行できます。 詳細については、この コマンド GitHub ツールを参照して TCP ダンプをキャプチャするか次のセクションの手順を使用します。
手順 1: トラブルシューティングするノードを見つける
TCP ダンプをプルするノードを決定する方法 最初に、Kubernetes コマンド ライン クライアント kubectl を使用して、AKS クラスター内のノードの一覧を取得します。 指示に従ってクラスターに接続し、Azure portal Azure CLI 使用して kubectl get nodes --output wide
コマンド実行。 次の出力のようなノード リストが表示されます。
$ kubectl get nodes --output wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
aks-agentpool-34796016-vmss000000 Ready agent 45h v1.20.9 10.240.1.81 <none> Ubuntu 18.04.6 LTS 5.4.0-1062-azure containerd://1.4.9+azure
aks-agentpool-34796016-vmss000002 Ready agent 45h v1.20.9 10.240.2.47 <none> Ubuntu 18.04.6 LTS 5.4.0-1062-azure containerd://1.4.9+azure
手順 2: Linux ノードに接続する
次の手順では、ネットワーク トレースをキャプチャする AKS クラスター ノードへの接続を確立します。 詳細については、「Linux ノードへの対話型シェル接続を作成する」を参照してください。
手順 3: tcpdump がインストールされていることを確認する
AKS Linux ノードへの接続を確立したら、 tcpdump --version
を実行して、tcpdump ツールがノードに以前にインストールされていることを確認します。 tcpdump がインストールされていない場合は、次のエラー テキストが表示されます。
# tcpdump --version
bash: tcpdump: command not found
次に、Advanced Package Tool のパッケージ処理ユーティリティ apt-get を実行して、ポッドに tcpdump をインストールします:
apt-get update && apt-get install tcpdump
tcpdump がインストールされている場合は、次のようなテキストが表示されます。
# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1 11 Sep 2018
手順 4: パケット キャプチャを作成する
ダンプをキャプチャするには、次のように tcpdump コマンド を実行します。
# tcpdump --snapshot-length=0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 6
Note
フィルター 処理パラメーターを使用せずに tcpdump を実行すると、パケット キャプチャ (PCAP) ファイルのサイズが大幅に増える可能性があります(特に長時間実行の場合)。 そのため、ソース、宛先、ポートなどのフィルターを追加することをお勧めします。 例えば次が挙げられます。
tcpdump dst 192.168.1.100
tcpdump dst host.mydomain.com
tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet
トレースの実行中に、問題を何度もレプリケートします。 このアクションにより、TCP ダンプ内で問題が確実にキャプチャされます。 問題をレプリケートするときにタイムスタンプをメモします。 完了したらパケット キャプチャを停止するには、Ctrl キーを押しながら C キーを押します。
# tcpdump -s 0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C526 packets captured
526 packets received by filter
0 packets dropped by kernel
手順 5: キャプチャをローカルに転送する
パケット キャプチャが完了したら、ローカルでダンプをコピーできるようにヘルパー ポッドを特定します。 2 つ目のコンソールを開き、次に示すように、 kubectl get pods
を実行してポッドの一覧を取得します。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
azure-vote-back-6c4dd64bdf-m4nk7 1/1 Running 0 3m29s
azure-vote-front-85b4df594d-jhpzw 1/1 Running 0 3m29s
node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2 1/1 Running 0 60s
ヘルパー ポッドには、3 番目の行に示すように、 node-debugger-aks
のプレフィックスがあります。 ポッド名を置き換え、次の kubectl コマンドを実行します。 これらのコマンドは、Linux ノードのパケット キャプチャを取得します。
kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap
Note
デバッグ ポッドの入力時に chroot /host
コマンドを使用した場合は、ソース ファイルの/capture.cap
前に/host
を追加します。
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。