AKS クラスター内のポッドまたはサービスへの接続の問題のトラブルシューティング (内部トラフィック)
この記事では、同じ Microsoft Azure Kubernetes Services (AKS) クラスター内からの内部トラフィックとしてポッドまたはサービスへの接続の問題をトラブルシューティングする方法について説明します。
前提条件
Kubernetes kubectl ツール、またはクラスターに接続するための同様のツール。 Azure CLI を使用して kubectl をインストールするには、az aks install-cli コマンドを実行します。
パッケージを処理するための apt-get コマンド ライン ツール。
クライアント URL (cURL) ツール、または同様のコマンド ライン ツール。
TCP 接続用 の Netcat (
nc
) コマンド ライン ツール。
トラブルシューティング チェックリスト
手順 1: テスト ポッドとリモート サーバー ポートを設定する
テスト ポッドを設定し、必要なポートがリモート サーバーで開いていることを確認します。 ソース ポッド (またはソース ポッドと同じ名前空間にあるテスト ポッド) 内から、次の手順を実行します。
kubectl run コマンドを実行して、クラスター内のテスト ポッドを開始します。
kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
ポッドにアクセスしたら、次
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
パッケージがインストールされたら、次のcURL コマンドを実行して、ポッドの IP アドレスへの接続をテストします。
curl -Iv http://<pod-ip-address>:<port>
Netcat コマンドを実行して、リモート サーバーが必要なポートを開いたかどうかをチェックします。
nc -z -v <endpoint> <port>
手順 2: ポッド、コンテナー、Kubernetes サービス、エンドポイントに関する運用情報を表示する
コマンド ラインで kubectl とcURLを使用して、次の手順に従って、すべてが期待どおりに動作することをチェックします。
宛先ポッドが稼働していることを確認します。
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
アクセス エラーのポッド ログをSearchします。
kubectl logs <pod-name> -n <namespace-name>
マルチコンテナー ポッド内の個々のコンテナーのポッド ログをSearchします。
kubectl logs <pod-name> -n <namespace-name> -c <container-name>
ポッド内のアプリケーションが繰り返し再起動する場合は、前の
stdout
コンテナー インスタンスのダンプ ポッド ログを表示して終了メッセージを取得します。 マルチコンテナーの場合は、前のコンテナー インスタンスのダンプ ポッド コンテナー ログをstdout
表示して終了メッセージを取得します。kubectl logs <pod-name> --previous
kubectl logs <pod-name> -c <container-name> --previous
トラフィックをブロックする可能性があるネットワーク ポリシーがあるかどうかを確認します。
kubectl get networkpolicies -A
次の表のような出力が表示されます。
NAMESPACE NAME POD-SELECTOR AGE kube-system konnectivity-agent app=konnectivity-agent 4d1h
カスタム作成された他のネットワーク ポリシーが表示される場合は、そのポリシーがポッドとの間のアクセスをブロックしているかどうかをチェックします。
サービス 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
サービスに関する詳細情報を取得します。
kubectl describe services <service-name> -n <namespace-name>
ポッドの 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
ポッドの 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
エンドポイントを直接確認します。
kubectl get endpoints
NAME ENDPOINTS AGE my-cluster-ip-service 10.244.0.15:80 14m
サービスへの接続が機能しない場合は、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
ノードが過剰に使用されていないことを確認します。
kubectl top nodes
注:
Azure Monitor を使用 して、クラスターの使用状況データを取得することもできます。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。