Debugging von Netzverbindungen zwischen Pods
Prüfen Sie die Optionen und Strategien für das Debugging von Verbindungsproblemen zwischen Pods.
Überprüfen Sie den Zustand Ihrer Clusterkomponenten und Netzpods.
Beheben Sie Probleme mit dem Pod-Netzwerk und der Konnektivität.
Führen Sie die folgenden Schritte aus, um den Zustand Ihrer Komponenten zu überprüfen. Netzprobleme können auftreten, wenn Ihre Clusterkomponenten nicht auf dem neuesten Stand sind oder sich nicht in einwandfreiem Zustand befinden.
-
Überprüfen Sie, ob Ihre Cluster-Master-und Workerknoten in einer unterstützten Version ausgeführt werden und sich in einwandfreiem Zustand befinden. Wenn der Cluster-Master oder die Cluster-Worker keine unterstützte Version ausführen, nehmen Sie alle erforderlichen Aktualisierungen vor, damit sie eine unterstützte Version ausführen. Wenn der Status einer Komponente nicht
NormaloderReadyist, überprüfen Sie die Gesundheitszustände des Clustermasters, Zustände des Clusters, Zustände der Arbeitsknoten, oder Schritte zur Fehlerbehebung beiCriticaloderNotReadyArbeitsknoten für weitere Informationen. Stellen Sie sicher, dass alle zugehörigen Probleme behoben wurden, bevor Sie fortfahren.Gehen Sie wie folgt vor, um die Version und den Zustand des Cluster-Masters zu überprüfen:
ibmcloud oc cluster get -c CLUSTER-IDSo überprüfen Sie die Versionen und den Zustand von Workerknoten:
ibmcloud oc workers -c CLUSTER-ID -
Überprüfen Sie für jeden Workerknoten, ob die Calico-und Cluster-DNS-Pods vorhanden sind und in einwandfreiem Zustand ausgeführt werden.
-
Führen Sie den Befehl aus, um Details zu den Pods Ihres Clusters abzurufen.
oc get pods -A -o wide | grep -e calico -e dns-default -
Stellen Sie in der Ausgabe sicher, dass Ihr Cluster die folgenden Pods enthält. Stellen Sie sicher, dass jeder Pod den Status
Runninghat und dass die Pods nicht zu viele Neustarts aufweisen.- Genau ein
calico-node-Pod pro Workerknoten. - Mindestens ein
calico-typha-Pod pro Cluster. Größere Cluster können mehrere haben. - Genau ein
calico-kube-controllers-Pod pro Cluster. - Ein
dns-defaultPod pro Knoten. Einige Knoten haben jedoch möglicherweise nicht dendns-default-Pod, wenn sie mit Etiketten versehen sind. Dies ist normal und verursacht keine Netzwerkprobleme.
Beispielausgabe
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED READINESS GATES calico-system calico-kube-controllers-1a1a1a1 1/1 Running 0 37m 172.17.61.195 10.245.0.5 <none> <none> calico-system calico-node-1a1a1a1 1/1 Running 0 37m 10.245.0.5 10.245.0.5 <none> <none> calico-system calico-node-1a1a1a1 1/1 Running 0 37m 10.245.0.4 10.245.0.4 <none> <none> calico-system calico-typha-1a1a1a1 1/1 Running 0 37m 10.245.0.5 10.245.0.5 <none> <none> openshift-dns dns-default-1a1a1a1 2/2 Running 0 33m 172.17.36.144 10.245.0.4 <none> <none> openshift-dns dns-default-1a1a1a1 2/2 Running 0 33m 172.17.61.210 10.245.0.5 <none> <none> - Genau ein
-
Wenn einer der aufgelisteten Pods nicht vorhanden ist oder sich in einem nicht einwandfreien Zustand befindet, lesen Sie die in den vorherigen Schritten enthaltene Dokumentation zur Fehlerbehebung für Cluster und Workerknoten. Stellen Sie sicher, dass alle Probleme mit den Pods in diesem Schritt behoben sind, bevor Sie fortfahren.
-
Debugging mit Testpods
Um die Ursache von Netzproblemen auf Ihren Pods zu ermitteln, können Sie einen Testpod auf jedem Ihrer Workerknoten erstellen. Anschließend können Sie Tests ausführen und die Netzaktivität im Pod beobachten, um die Ursache des Problems aufzudecken.
Pods einrichten
-
Erstellen Sie einen neuen privilegierten Namensbereich für Ihre Test-Pods. Durch das Erstellen eines neuen Namensbereichs wird verhindert, dass sich angepasste Richtlinien oder Konfigurationen in vorhandenen Namensbereichen auf Ihre Testpods auswirken. In diesem Beispiel heißt der neue Namensbereich
pod-network-test.Erstellen Sie den Namensbereich.
oc create ns pod-network-test -
Fügen Sie dem neuen privilegierten Namensraum Bezeichnungen hinzu.
oc label namespace pod-network-test --overwrite=true \ pod-security.kubernetes.io/enforce=privileged \ pod-security.kubernetes.io/enforce-version=latest \ pod-security.kubernetes.io/audit=privileged \ pod-security.kubernetes.io/audit-version=latest \ pod-security.kubernetes.io/warn=privileged \ pod-security.kubernetes.io/warn-version=latest \ security.openshift.io/scc.podSecurityLabelSync="false" -
Führen Sie den Befehl aus, damit der Namensbereich Pods mit einem privilegierten Sicherheitskontext ausführen kann.
oc adm policy add-scc-to-group privileged system:serviceaccounts:pod-network-test -
Erstellen Sie das folgende Daemonset und wenden Sie es an, um einen Test-Pod auf jedem Knoten zu erstellen.
apiVersion: apps/v1 kind: DaemonSet metadata: labels: name: webserver-test app: webserver-test name: webserver-test spec: selector: matchLabels: name: webserver-test template: metadata: labels: name: webserver-test app: webserver-test spec: tolerations: - operator: "Exists" containers: - name: webserver securityContext: privileged: true image: us.icr.io/armada-master/network-alpine:latest env: - name: ENABLE_ECHO_SERVER value: "true" - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name restartPolicy: Always terminationGracePeriodSeconds: 1 -
Wenden Sie das Daemonset an, um einen Test-Pod auf jedem Arbeitsknoten zu installieren.
oc apply --namespace pod-network-test -f <daemonset-file> -
Überprüfen Sie, ob die Pods erfolgreich gestartet wurden, indem Sie alle Pods im Namespace auflisten.
oc get pods --namespace pod-network-test -o wide
Tests in den Pods ausführen
Führen Sie die Befehle curl, ping und nc aus, um die Netzverbindung jedes Pods und den Befehl dig zum Testen des Cluster-DNS zu testen. Überprüfen Sie jede Ausgabe. Lesen Sie dann Probleme identifizieren,
um herauszufinden, was die Ergebnisse bedeuten könnten.
-
Listen Sie Ihre Testpods auf und notieren Sie den Namen und die IP-Adresse jedes Pods.
oc get pods --namespace pod-network-test -o wideBeispielausgabe
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES webserver-test-2fv7c 1/1 Running 0 68s 172.17.36.169 10.245.0.4 <none> <none> webserver-test-4mktb 1/1 Running 0 68s 172.17.61.240 10.245.0.5 <none> <none> -
Führen Sie den Befehl
execaus, um sich bei einem Pod anzumelden.kubectl exec -it --namespace pod-network-test <pod_name> -- sh -
Führen Sie den Befehl
curlfür den Pod aus und notieren Sie die Ausgabe. Geben Sie die IP eines Testpods an, bei dem Sie sich nicht angemeldet haben. Dadurch wird die Netzverbindung zwischen Pods auf verschiedenen Knoten getestet.curl <pod_ip>:8080Beispiel für eine erfolgreiche Ausgabe
Hostname: webserver-test-4mktb Pod Information: node name: env var NODE_NAME not set pod name: webserver-test-4mktb pod namespace: env var POD_NAMESPACE not set pod IP: env var POD_IP not set Connection Information: remote address: 172.17.36.169 remote port: 56042 local address: 172.17.61.240 local port: 8080 -
Führen Sie den Befehl
pingfür den Pod aus und notieren Sie die Ausgabe. Geben Sie die IP eines Testpods an, bei dem Sie sich nicht mit dem Befehlexecangemeldet haben. Dadurch wird die Netzverbindung zwischen Pods auf verschiedenen Knoten getestet.ping -c 5 <pod_ip>Beispiel für eine erfolgreiche Ausgabe
PING 172.17.61.240 (172.17.61.240) 56(84) bytes of data. 64 bytes from 172.17.61.240: icmp_seq=1 ttl=62 time=0.473 ms 64 bytes from 172.17.61.240: icmp_seq=2 ttl=62 time=0.449 ms 64 bytes from 172.17.61.240: icmp_seq=3 ttl=62 time=0.381 ms 64 bytes from 172.17.61.240: icmp_seq=4 ttl=62 time=0.438 ms 64 bytes from 172.17.61.240: icmp_seq=5 ttl=62 time=0.348 ms --- 172.17.61.240 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4086ms rtt min/avg/max/mdev = 0.348/0.417/0.473/0.046 ms -
Führen Sie den Befehl
ncfür den Pod aus und notieren Sie die Ausgabe. Geben Sie die IP eines Testpods an, bei dem Sie sich nicht mit dem Befehlexecangemeldet haben. Dadurch wird die Netzverbindung zwischen Pods auf verschiedenen Knoten getestet.nc -vzw 5 <pod_ip> 8080Beispiel für eine erfolgreiche Ausgabe
nc -vzw 5 172.17.61.240 8080 172.17.61.240 (172.17.61.240:8080) open -
Führen Sie die
dig-Befehle zum Testen des DNS aus.dig +short kubernetes.default.svc.cluster.localBeispielausgabe
172.21.0.1dig +short ibm.comBeispielausgabe
23.50.74.64 -
Führen Sie
curlBefehle aus, um eine vollständige TCP oder HTTPS Verbindung zum Dienst zu testen. In diesem Beispiel wird die Verbindung zwischen dem Pod und dem Cluster-Master getestet, indem die Versionsinformationen des Clusters abgerufen werden. Der erfolgreiche Abruf der Clusterversion weist auf eine einwandfreie Verbindung hin.curl -k https://kubernetes.default.svc.cluster.local/versionBeispielausgabe
"major": "1", "minor": "34", "emulationMajor": "1", "emulationMinor": "34", "minCompatibilityMajor": "1", "minCompatibilityMinor": "33", "gitVersion": "v1.34.7+IKS", "gitCommit": "67bf12be5abc8e65743a243172693ad1a098a2c4", "gitTreeState": "clean", "buildDate": "2026-04-16T04:24:50Z", "goVersion": "go1.25.9", "compiler": "gc", "platform": "linux/amd64" -
Melden Sie sich vom Pod ab.
exit -
Wiederholen Sie die vorherigen Schritte mit den verbleibenden Pods.
Probleme erkennen
Überprüfen Sie die Ausgaben aus dem vorherigen Abschnitt, um die Ursache für Ihre Probleme beim Pod-Netzbetrieb zu finden. In diesem Abschnitt werden einige allgemeine Ursachen aufgelistet, die im vorherigen Abschnitt angegeben werden können.
-
Wenn die Befehle auf den Testpods normal funktionierten, Sie aber immer noch Netzwerkprobleme mit den Anwendungspods in Ihrem Standard-Namensraum haben, könnte es Probleme geben, die speziell mit Ihrer Anwendung zusammenhängen.
- Möglicherweise sind Netzsicherheitsrichtlinien für Calico oder Kubernetes vorhanden, die Ihren Netzdatenverkehr einschränken. Wenn eine Netzrichtlinie auf einen Pod angewendet wird, wird der gesamte Datenverkehr, der von dieser Richtlinie nicht explizit zugelassen wird, gelöscht. Weitere Informationen zu Netzrichtlinien finden Sie in der Dokumentation zuKubernetes.
- Wenn Sie Istio oder Red Hat OpenShift Service Mesh verwenden, kann es zu Problemen bei der Dienstkonfiguration kommen, die den Datenverkehr zwischen Pods unterbrechen oder blockieren. Weitere Informationen finden Sie in der Dokumentation zur Fehlerbehebung für Istio und Red Hat OpenShift Service Mesh.
- Das Problem kann mit Programmfehlern in der Anwendung und nicht mit Ihrem Cluster zusammenhängen und erfordert möglicherweise eine eigene unabhängige Fehlerbehebung.
-
Wenn die Befehle
curl,pingoderncfür bestimmte Pods fehlgeschlagen sind, ermitteln Sie, auf welchen Workerknoten sich diese Pods befinden. Wenn das Problem nur auf einigen Ihrer Workerknoten auftritt, ersetzen Sie diese Workerknoten oder lesen Sie zusätzliche Informationen zur Fehlerbehebung für Workerknoten. -
Wenn die DNS-Suche über die
dig-Befehle fehlgeschlagen ist, lesen Sie die Red Hat DNS-Fehlerbehebungsinformationen.
Wenn Sie Ihr Problem mit dem Pod-Netzbetrieb weiterhin nicht lösen können, öffnen Sie einen Supportfall und fügen Sie eine detaillierte Beschreibung des Problems, wie Sie versucht haben, es zu lösen, welche Arten von Tests Sie ausgeführt haben und relevante Protokolle für Ihre Pods und Workerknoten hinzu. Weitere Informationen zum Öffnen eines Supportfalls und zu den einzuschließenden Informationen finden Sie im allgemeinen Debugging-Handbuch.