Runbook Netzwerk
Runbook: Netzwerk
Diagnose und Behebung von Netzwerkproblemen: HTTP-Fehler, TLS-Zertifikate, DNS und WebSocket.
502 Bad Gateway¶
Symptom: Browser zeigt 502 Bad Gateway.
Diagnose:
# Ingress-Controller Logs
kubectl logs -f deployment/inovetra-ingress-nginx-controller -n inovetra-platform
# Backend-Pod Status
kubectl get pods -n inovetra-platform
Ursachen:
- Backend-Pod nicht bereit → Pod prüfen, siehe Runbook Pod-Fehler
- Ingress-Controller überlastet → Ressourcen prüfen:
kubectl top pods -n inovetra-platform | grep ingress
Lösung: Backend-Pod neustarten oder zugrunde liegende Ursache beheben.
Verifikation:
curl -s -o /dev/null -w "%{http_code}" https://<domain>/api/customer/health
→ Erwartete Antwort: 200
503 Service Unavailable¶
Symptom: Service antwortet mit 503 Service Unavailable.
Diagnose:
# Wie bei 502, zusätzlich Readiness-Probe prüfen
kubectl describe pod <pod-name> -n inovetra-platform | grep -A5 "Readiness"
kubectl get endpoints -n inovetra-platform
Lösung:
kubectl rollout restart deployment/<name> -n inovetra-platform
Verifikation: Service antwortet mit 200.
TLS-Zertifikat abgelaufen¶
Symptom: Browser zeigt Zertifikatsfehler, NET::ERR_CERT_DATE_INVALID.
Diagnose:
kubectl get certificates -n inovetra-platform
kubectl describe certificate <name> -n inovetra-platform
Lösung (Let's Encrypt):
# Zertifikat löschen → cert-manager erstellt automatisch ein neues
kubectl delete certificate <name> -n inovetra-platform
# cert-manager Logs prüfen
kubectl logs -f deployment/cert-manager -n cert-manager
Lösung (eigenes Zertifikat): Siehe Wartung → Zertifikats-Erneuerung.
Verifikation:
echo | openssl s_client -connect <domain>:443 2>/dev/null | openssl x509 -noout -dates
→ notAfter muss in der Zukunft liegen.
DNS-Problem¶
Symptom: Domain ist nicht erreichbar.
Diagnose:
dig <domain>
nslookup <domain>
Lösung: DNS A-Record muss auf die öffentliche IP der VM zeigen. Beim DNS-Provider den Eintrag prüfen und ggf. korrigieren.
Verifikation:
dig <domain>
→ Zeigt die korrekte IP-Adresse.
WebSocket-Verbindungsfehler¶
Symptom: Chat funktioniert nicht, Echtzeit-Updates fehlen, Nachrichten werden nicht gestreamt.
Diagnose: Browser-Entwicklertools öffnen → Konsole auf WebSocket-Fehler prüfen (z.B. WebSocket connection failed).
Lösung: Ingress Controller prüfen — WebSocket-Support muss aktiviert sein (ist standardmäßig der Fall bei nginx-ingress). Falls deaktiviert:
kubectl get configmap inovetra-ingress-nginx-controller -n inovetra-platform -o yaml | grep proxy-read-timeout
Verifikation: Chat-Nachrichten werden in Echtzeit gestreamt.
TLS-Zertifikat: ACME Challenge schlägt fehl (502)¶
Symptom: Neues TLS-Zertifikat wird nicht ausgestellt. In den cert-manager Logs erscheinen 502-Fehler bei der ACME HTTP-01 Validierung.
Diagnose:
# Challenges prüfen
kubectl get challenges -n inovetra-platform
# cert-manager Logs
kubectl logs -f deployment/cert-manager -n cert-manager
# NetworkPolicies prüfen
kubectl get networkpolicy -n inovetra-platform | grep acme
Ursache: Die default-deny-ingress NetworkPolicy blockiert Ingress-Traffic zu den ACME HTTP-01 Solver-Pods auf Port 8089. Dieses Problem tritt auf Charts vor 0.72.6 auf.
Lösung:
- Chart ≥ 0.72.6: Die
allow-acme-solverNetworkPolicy ist automatisch enthalten. Prüfen, ob sie existiert:kubectl get networkpolicy allow-acme-solver -n inovetra-platform - Chart < 0.72.6: Update auf ≥ 0.72.6 durchführen.
Verifikation:
kubectl get certificates -n inovetra-platform
→ Status True und gültiges Ablaufdatum.
Helm Install: "failed calling webhook"¶
Symptom: helm install oder helm upgrade schlägt bei der Erstinstallation mit failed calling webhook "webhook.cert-manager.io" fehl.
Diagnose:
# cert-manager Webhook-Pod Status prüfen
kubectl get pods -n cert-manager
kubectl describe pod -n cert-manager -l app.kubernetes.io/component=webhook
Ursache: Der cert-manager Webhook-Pod ist noch nicht bereit, wenn Helm versucht, den ClusterIssuer zu erstellen. Tritt häufig auf langsameren VMs auf.
Lösung:
# Auf Webhook-Readiness warten
kubectl wait --namespace cert-manager \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=webhook \
--timeout=120s
# Dann Helm erneut ausführen
Ab Chart
0.72.6führtdeploy-platform.shdiesen Wait-Schritt automatisch durch.
Verifikation: helm install / helm upgrade läuft ohne Webhook-Fehler durch.
NetworkPolicies unter K3s: Pod nicht erreichbar / DNS-Ausfälle¶
Symptom: Ein neuer Workload ist trotz READY 1/1 von anderen Pods nicht erreichbar (Connection refused), oder nach dem Anlegen zusätzlicher NetworkPolicies treten Readiness-Flaps und Portal-Aussetzer auf.
Hintergrund (K3s / kube-router): Auf K3s-Instanzen wird das Ingress-Enforcement der NetworkPolicies korrekt durchgesetzt (default-deny-ingress + Allow-Policy je Komponente). Das Egress-Enforcement ist de facto inert — Egress-Regeln haben keine schützende Wirkung.
Keine Egress-Policies an Plattform-Pods hängen
Niemals zusätzliche Egress-NetworkPolicies an Plattform-Pods anhängen: kube-router bricht dabei die DNS-Auflösung der Quell-Pods (Folge: Readiness-Flaps, Portal-Aussetzer — per A/B-Test verifiziert).
Diagnose:
# Bestehende NetworkPolicies prüfen
kubectl get networkpolicy -n inovetra-platform
# Erreichbarkeit aus einem anderen Pod testen (nicht nur READY-Status!)
kubectl exec -n inovetra-platform deploy/inovetra-customer-api -- \
curl -s -o /dev/null -w "%{http_code}" http://<service>:<port>/
Ursache: Der Namespace hat eine default-deny-ingress-Policy. Neue Workloads brauchen daher eine eigene Ingress-Allow-Policy am Pod — sonst ist der Pod von anderen Pods aus nicht erreichbar.
Falle: kubelet-Probes sind gewhitelistet
Liveness-/Readiness-Probes des kubelet sind vom Default-Deny ausgenommen. Ein Pod kann also READY 1/1 melden, während Pod-zu-Pod-Verbindungen mit Connection refused scheitern. Der READY-Status ist kein Beleg für Erreichbarkeit.
Lösung: Für den neuen Workload eine Ingress-Allow-NetworkPolicy anlegen, die die zugreifenden Pods erlaubt. Keine Egress-Policies ergänzen.
Verifikation: Pod-zu-Pod-Test (siehe Diagnose) liefert den erwarteten HTTP-Code bzw. eine TCP-Verbindung.
LDAP: Zertifikats- und Bind-Fehler¶
Symptom: LDAP-Verbindungstest oder Login schlägt fehl.
| Fehlermeldung | Ursache und Lösung |
|---|---|
unable to verify the first certificate |
Das DC-Zertifikat stammt von einer internen CA → CA-Zertifikat (PEM) im Customer Portal beim LDAP-Provider hinterlegen. LDAP-URL muss den FQDN enthalten (Hostname-Prüfung gegen Zertifikat-SAN). Siehe SSO-Einrichtung. |
SASLprep error: ASCII control character present |
Unsichtbares Steuerzeichen (z. B. Tabulator) im Bind-Passwort — typisch beim Kopieren. Ab Chart 0.82.0 werden Steuerzeichen automatisch bereinigt; bei älteren Versionen den Wert von Hand neu eingeben. |
Weiterführende Seiten¶
- Troubleshooting Übersicht — Allgemeine Diagnoseschritte
- Netzwerk und Kommunikation — Netzwerkarchitektur
- Netzwerksicherheit — Network Policies und Firewall