次の方法で共有


AKS クラスター内の Linux ノードから TCP ダンプをキャプチャする

ネットワークの問題は、Microsoft Azure Kubernetes Service (AKS) クラスターを使用しているときに発生する可能性があります。 これらの問題を調査するために、この記事では、AKS クラスター内の Linux ノードから TCP ダンプをキャプチャし、キャプチャをローカル コンピューターにダウンロードする方法について説明します。

前提条件

注:

Helm チャートを使用して TCP キャプチャを自動化できます。これは、バックグラウンドで DaemonSet として実行できます。 詳細については、 TCP ダンプをキャプチャするためのこのカスタム GitHub ツールを参照するか、次のセクションの手順を使用します。

手順 1: トラブルシューティングするノードを見つける

TCP ダンプをプルするノードを決定するにはどうすればよいですか? 最初に、Kubernetes コマンド ライン クライアント kubectl を使用して、AKS クラスター内のノードの一覧を取得します。 指示に従ってクラスターに接続し、Azure portalまたは Azure CLIkubectl 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

トレースの実行中に、問題を何度もレプリケートします。 このアクションにより、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

ヘルパー ポッドのプレフィックス node-debugger-aksは、3 行目に示すように です。 ポッド名を置き換え、次の kubectl コマンドを実行します。 これらのコマンドは、Linux ノードのパケット キャプチャを取得します。

kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。