AKS クラスター内のポッドまたはサービスへの接続の問題のトラブルシューティング (内部トラフィック)

この記事では、同じ Microsoft Azure Kubernetes Services (AKS) クラスター内からの内部トラフィックとしてポッドまたはサービスへの接続の問題をトラブルシューティングする方法について説明します。

前提条件

  • Kubernetes kubectl ツール、またはクラスターに接続するための同様のツール。 Azure CLI を使用して kubectl をインストールするには、az aks install-cli コマンドを実行します。

  • パッケージを処理するための apt-get コマンド ライン ツール。

  • クライアント URL (cURL) ツール、または同様のコマンド ライン ツール。

  • TCP 接続用 の Netcat (nc) コマンド ライン ツール。

トラブルシューティング チェックリスト

手順 1: テスト ポッドとリモート サーバー ポートを設定する

テスト ポッドを設定し、必要なポートがリモート サーバーで開いていることを確認します。 ソース ポッド (またはソース ポッドと同じ名前空間にあるテスト ポッド) 内から、次の手順を実行します。

  1. kubectl run コマンドを実行して、クラスター内のテスト ポッドを開始します。

    kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
    
  2. ポッドにアクセスしたら、次apt-getのコマンドを実行して、DNS Utils、cURL、Netcat パッケージをインストールします。

    apt-get update -y
    apt-get install dnsutils -y
    apt-get install curl -y
    apt-get install netcat -y
    
  3. パッケージがインストールされたら、次のcURL コマンドを実行して、ポッドの IP アドレスへの接続をテストします。

    curl -Iv http://<pod-ip-address>:<port>
    
  4. Netcat コマンドを実行して、リモート サーバーが必要なポートを開いたかどうかをチェックします。

    nc -z -v <endpoint> <port>
    

手順 2: ポッド、コンテナー、Kubernetes サービス、エンドポイントに関する運用情報を表示する

コマンド ラインで kubectl とcURLを使用して、次の手順に従って、すべてが期待どおりに動作することをチェックします。

  1. 宛先ポッドが稼働していることを確認します。

    kubectl get pods -n <namespace-name>
    

    ターゲット ポッドが正しく動作している場合、ポッドの状態は として Running表示され、ポッドは として READY表示されます。

    NAME           READY   STATUS    RESTARTS   AGE
    my-other-pod   1/1     Running   0          44m
    my-pod         1/1     Running   0          44m
    
  2. アクセス エラーのポッド ログをSearchします。

    kubectl logs <pod-name> -n <namespace-name>
    
  3. マルチコンテナー ポッド内の個々のコンテナーのポッド ログをSearchします。

    kubectl logs <pod-name> -n <namespace-name> -c <container-name>
    
  4. ポッド内のアプリケーションが繰り返し再起動する場合は、前の stdout コンテナー インスタンスのダンプ ポッド ログを表示して終了メッセージを取得します。 マルチコンテナーの場合は、前のコンテナー インスタンスのダンプ ポッド コンテナー ログを stdout 表示して終了メッセージを取得します。

    kubectl logs <pod-name> --previous                      
    
    kubectl logs <pod-name> -c <container-name> --previous  
    
  5. トラフィックをブロックする可能性があるネットワーク ポリシーがあるかどうかを確認します。

    kubectl get networkpolicies -A
    

    次の表のような出力が表示されます。

    NAMESPACE     NAME                 POD-SELECTOR             AGE
    kube-system   konnectivity-agent   app=konnectivity-agent   4d1h
    

    カスタム作成された他のネットワーク ポリシーが表示される場合は、そのポリシーがポッドとの間のアクセスをブロックしているかどうかをチェックします。

  6. サービス IP アドレスからアプリケーションに到達できるかどうかを確認します。 まず、次のコマンドを実行して、外部 IP アドレスやポートなどのサービス リソースに関する詳細を kubectl get services 表示します。

    kubectl get services -n <namespace-name>
    
    NAME         TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)        AGE
    my-service   LoadBalancer   10.0.21.43   20.119.121.232   80:31773/TCP   28s
    

    次に、サービス IP アドレスとポートを使用してcURLを実行して、アプリケーションに到達できるかどうかをチェックします。

    curl -Iv http://20.119.121.232:80
    .
    .
    .
    < HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    
  7. サービスに関する詳細情報を取得します。

    kubectl describe services <service-name> -n <namespace-name>
    
  8. ポッドの IP アドレスを確認します。

    kubectl get pods -o wide  
    
    NAME            READY   STATUS        RESTARTS   AGE   IP            NODE                                
    my-pod          1/1     Running       0          12m   10.244.0.15   aks-agentpool-000000-vmss000000  
    
  9. ポッドの IP アドレスがサービスのエンドポイントとして存在することを確認します。

    kubectl describe services my-cluster-ip-service
    
    Name:              my-cluster-ip-service
    Namespace:         default
    Selector:          app=my-pod
    Type:              ClusterIP
    IP Family Policy:  SingleStack
    IP Families:       IPv4
    IP:                10.0.174.133
    IPs:               10.0.174.133
    Port:              <unset>  80/TCP
    TargetPort:        80/TCP
    Endpoints:         10.244.0.15:80     # <--- Here
    
  10. エンドポイントを直接確認します。

    kubectl get endpoints
    
    NAME                      ENDPOINTS           AGE
    my-cluster-ip-service     10.244.0.15:80      14m
    
  11. サービスへの接続が機能しない場合は、CoreDNS ポッドと CoreDNS ポッドを再起動 kube-proxy します。

    kubectl delete pods -n kube-system -l component=kube-proxy
    kubectl delete pods -n kube-system -l k8s-app=kube-dns
    
  12. ノードが過剰に使用されていないことを確認します。

    kubectl top nodes
    

    注:

    Azure Monitor を使用 して、クラスターの使用状況データを取得することもできます。

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

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