次の方法で共有


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

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

前提条件

  • Azure CLI バージョン 2.0.59 以降。 Web ブラウザーで Azure Cloud Shell を開いて、Azure CLI コマンドを入力できます。 または ローカル コンピューターに Azure CLI をインストールまたはアップグレードします。 コンピューターにインストールされているバージョンを見つけるには、 az --version実行します。
  • AKS クラスター。 AKS クラスターがない場合は、Azure CLI を使用 作成するか Azure portal を します

手順 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
akswin000000                        Ready    agent   3m8s    v1.20.9   10.240.0.4     <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6
akswin000001                        Ready    agent   3m50s   v1.20.9   10.240.0.115   <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6
akswin000002                        Ready    agent   3m32s   v1.20.9   10.240.0.226   <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6

手順 2: Windows ノードに接続する

次の手順では、AKS クラスター ノードへの接続を確立します。 認証には、Secure Shell (SSH) キーを使用するか、リモート デスクトップ プロトコル (RDP) 接続で Windows 管理者パスワードを使用します。 現在、AKS Windows ノードに直接接続できないため、どちらの方法でも中間接続を作成する必要があります。 SSH または RDP を使用してノードに接続する場合でも、AKS ノードのユーザー名を指定する必要があります。 既定では、このユーザー名は azureuser です。 SSH または RDP 接続を使用するだけでなく、HostProcess コンテナーから Windows ノードに接続することもできます。

  1. 次の内容 hostprocess.yaml を作成します。 AKSWINDOWSNODENAMEを AKS Windows ノード名に置き換えます。

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        pod: hpc
      name: hpc
    spec:
      securityContext:
        windowsOptions:
          hostProcess: true
          runAsUserName: "NT AUTHORITY\\SYSTEM"
      hostNetwork: true
      containers:
        - name: hpc
          image: mcr.microsoft.com/windows/servercore:ltsc2022 # Use servercore:1809 for WS2019
          command:
            - powershell.exe
            - -Command
            - "Start-Sleep 2147483"
          imagePullPolicy: IfNotPresent
      nodeSelector:
        kubernetes.io/os: windows
        kubernetes.io/hostname: AKSWINDOWSNODENAME
      tolerations:
        - effect: NoSchedule
          key: node.kubernetes.io/unschedulable
          operator: Exists
        - effect: NoSchedule
          key: node.kubernetes.io/network-unavailable
          operator: Exists
        - effect: NoExecute
          key: node.kubernetes.io/unreachable
          operator: Exists
    
  2. kubectl apply -f hostprocess.yaml コマンドを実行して、指定した Windows ノードに Windows HostProcess コンテナーをデプロイします。

  3. kubectl exec -it [HPC-POD-NAME] -- powershell コマンドを実行します。

  4. HostProcess コンテナー内で PowerShell コマンドを実行して、Windows ノードにアクセスします。

    Note

    Windows ノード内のファイルにアクセスするには、ルート フォルダーを HostProcess コンテナー内の C:\ に切り替えます。

手順 3: パケット キャプチャを作成する

SSH または RDP 経由で、または HostProcess コンテナーから Windows ノードに接続すると、Windows コマンド プロンプトの形式が表示されます。

azureuser@akswin000000 C:\Users\azureuser>

次に、コマンド プロンプトを開き、トレースをキャプチャするための Network Shell (netsh) コマンド (netsh トレースの開始) を入力します。 このコマンドは、パケット キャプチャ プロセスを開始します。

netsh trace start capture=yes tracefile=C:\temp\AKS_node_name.etl

次のテキストのような出力が表示されます。

Trace configuration:
-------------------------------------------------------------------
Status:             Running
Trace File:         AKS_node_name.etl
Append:             Off
Circular:           On
Max Size:           250 MB
Report:             Off

トレースの実行中に、問題を何度もレプリケートします。 このアクションにより、TCP ダンプ内で問題が確実にキャプチャされます。 問題をレプリケートするときにタイムスタンプをメモします。 完了したらパケット キャプチャを停止するには、「 netsh trace stop」と入力します。

azureuser@akswin000000 C:\Users\azureuser>netsh trace stop
Merging traces ... done
Generating data collection ... done
The trace file and additional troubleshooting information have been compiled as "C:\temp\AKS_node_name.cab".
File location = C:\temp\AKS_node_name.etl
Tracing session was successfully stopped.

手順 4: キャプチャをローカルに転送する

パケット キャプチャが完了したら、HostProcess ポッドを特定して、ダンプをローカルにコピーできるようにします。

  1. ローカル コンピューターで 2 つ目のコンソールを開き、 kubectl get pods コマンドを実行してポッドの一覧を取得します。

    kubectl get pods
    NAME                                                    READY   STATUS    RESTARTS   AGE
    azure-vote-back-6c4dd64bdf-m4nk7                        1/1     Running   2          3d21h
    azure-vote-front-85b4df594d-jhpzw                       1/1     Running   2          3d21h
    hpc                                                     1/1     Running   0          3m58s
    

    HostProcess ポッドの既定の名前は、3 行目に示すように hpc です。

  2. 次のコマンドを実行して、TCP ダンプ ファイルをローカルにコピーします。 ポッド名を hpcに置き換えます。

    kubectl cp -n default hpc:/temp/AKS_node_name.etl ./AKS_node_name.etl
    tar: Removing leading '/' from member names
    kubectl cp -n default hpc:/temp/AKS_node_name.etl ./AKS_node_name.cab
    tar: Removing leading '/' from member names
    

    .etlファイルと.cabファイルがローカル ディレクトリに存在するようになります。

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

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