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 フィードバック コミュニティに製品フィードバックを送信することもできます。