この記事では、ポッドまたはサービスへの接続の問題を、同じ 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-openbsd -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
ポッド ログでアクセス エラーを検索します。
kubectl logs <pod-name> -n <namespace-name>
ポッド ログで、マルチコンテナー ポッド内の個々のコンテナーを検索します。
kubectl logs <pod-name> -n <namespace-name> -c <container-name>
ポッド内のアプリケーションが繰り返し再起動する場合は、前のコンテナー インスタンスのポッド ログを表示して終了メッセージを取得します。
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 アドレスからアプリケーションに到達できるかどうかを確認します。 最初に、
kubectl get services
コマンドを実行して、外部 IP アドレスやポートなどのサービス リソースに関する詳細を表示します。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
サービスへの接続が機能しない場合は、
kube-proxy
ポッドと CoreDNS ポッドを再起動します。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 コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。