11# JavaHttpClient – Projektdokumentation
22
3- ## Zweck
4-
53Diagnose-Tool für HTTP-Konnektivitätsprobleme in Kubernetes-Clustern mit Istio Service Mesh.
64Läuft als Pod im Cluster und ermöglicht:
5+
76- HTTP-Requests über einen Java-HTTP-Client an beliebige Ziel-URLs zu senden
87- Istio-Sidecar (Envoy) Konfiguration und Fehler-Metriken auszuwerten
98- VirtualService/DestinationRule/ServiceEntry-Konfiguration mit einer Ziel-URL zu korrelieren
@@ -27,7 +26,7 @@ Läuft als Pod im Cluster und ermöglicht:
2726
2827## Architektur
2928
30- ```
29+ ``` txt
3130Browser
3231 │
3332 ├─ POST /client → HttpClientController → ClientService
@@ -52,6 +51,7 @@ Browser
5251## Backend – Klassen
5352
5453### ` ClientService `
54+
5555Sendet HTTP-Requests über ` java.net.http.HttpClient ` .
5656
5757- ** HTTP/2** aktiv (` Version.HTTP_2 ` ), fällt automatisch auf HTTP/1.1 zurück (ALPN)
@@ -69,6 +69,7 @@ Gefilterte Request-Header (werden nie weitergeleitet):
6969` host ` , ` content-length ` , ` connection ` , ` accept-encoding ` , ` upgrade `
7070
7171Fehlermeldungen (502):
72+
7273| Exception | Meldung |
7374| -----------| ---------|
7475| ` UnknownHostException ` | DNS Fehler: Host nicht gefunden |
@@ -81,6 +82,7 @@ Fehlermeldungen (502):
8182### ` K8sDiagnosticService `
8283
8384** Envoy Admin API** (Standard: ` http://127.0.0.1:15000 ` , konfigurierbar via ` ENVOY_ADMIN_URL ` ):
85+
8486- ` /config_dump ` → vollständige Envoy-Konfiguration
8587- ` /clusters ` → aktive Upstream-Cluster
8688- ` /stats ` → ** alle** Metriken (kein serverseitiger Filter), nur Werte ≥ 0 (non-zero)
@@ -110,6 +112,7 @@ Fehlermeldungen (502):
110112** ` correlateUrl(url, namespace) ` ** – URL-Korrelation gegen Istio-Ressourcen:
111113
112114* Host-Matching-Logik* (VS-Host vs. URL-Hostname):
115+
113116- Exakter Match
114117- Wildcard: ` *.namespace ` matcht ` foo.namespace `
115118- Short-Name: ` my-svc ` matcht ` my-svc.ns.svc.cluster.local `
@@ -130,6 +133,7 @@ Fehlermeldungen (502):
130133### ` TlsInspectorService `
131134
132135Separater ` SSLSocket ` -basierter TLS-Probe (unabhängig vom Haupt-Request):
136+
133137- Eigener ` SSLContext ` mit ` X509ExtendedTrustManager ` der ** alles akzeptiert** (auch self-signed, expired) → Chain immer sichtbar
134138- SNI korrekt gesetzt via ` SSLParameters `
135139- Gibt zurück:
@@ -161,13 +165,15 @@ Separater `SSLSocket`-basierter TLS-Probe (unabhängig vom Haupt-Request):
161165## Frontend – Tabs & Features
162166
163167### Hauptbereich (linke Spalte)
168+
164169- HTTP-Method-Dropdown + URL-Feld
165170- Dynamische Custom-Header (Key/Value, add/remove)
166171- Body-Textarea (JSON)
167172- Option: Browser-Header kopieren
168173- Buttons: ** K8s/Istio Diagnose** | ** Send Request**
169174
170175** Response-Bereich** nach jedem Request:
176+
171177- ` HTTP {status} ` -Badge (grün/rot)
172178- ` HTTP/2 ` / ` HTTP/1.1 ` -Badge (blau/grau) – tatsächlich verwendetes Protokoll
173179- Resolved-IP-Badge (alle aufgelösten IPs)
@@ -176,6 +182,7 @@ Separater `SSLSocket`-basierter TLS-Probe (unabhängig vom Haupt-Request):
176182- ** TLS-Panel** (nur HTTPS): TLS-Version, Cipher Suite, mTLS/SPIFFE-Badge, aufklappbare Cert-Cards pro Zertifikat (leaf/intermediate/root) mit Ablauf-Countdown
177183
178184### Historie (rechte Spalte)
185+
179186- Bis zu 50 Einträge in ` localStorage `
180187- Grüner/roter Rand je nach Status
181188- Klick stellt Formular wieder her
@@ -184,16 +191,19 @@ Separater `SSLSocket`-basierter TLS-Probe (unabhängig vom Haupt-Request):
184191### Istio-Panel (nach Diagnose-Klick)
185192
186193** Tab A – Config & Erreichbarkeit**
194+
187195- Envoy Config JSON (aufklappbar)
188196- Cluster-Suche mit Zähler
189197- Aktive Endpoints als scrollbares Konsolen-Output
190198
191199** Tab B – Aktive Fehler-Metriken**
200+
192201- Ziel-URL-Korrelation: hebt Metriken hervor die den Hostnamen der URL enthalten
193202- Diagnose-Karten (KRITISCH/WARNUNG/INFO) mit Beschreibung + Empfehlung + betroffene Metriken
194203- Vollständige Metriken-Tabelle (alle Werte inkl. 0)
195204
196205** Tab C – Pod Kontext & Istio**
206+
197207- Navbar-Badges: Pod-Name, Namespace, Istio ON/OFF
198208- Kontext-Tabelle: podName, namespace, istioSidecar
199209- Istio Sidecar Details (clusterSummary, networkStats)
@@ -222,7 +232,7 @@ Namespace wird primär aus `/var/run/secrets/kubernetes.io/serviceaccount/namesp
222232
223233## Deployment
224234
225- ```
235+ ``` txt
226236Namespace: clients
227237Service: ClusterIP :8080
228238Istio: Gateway in istio-ingress
@@ -231,6 +241,7 @@ Hosts: javahttpclient.tp.lan / javahttpclient.gmk.lan
231241```
232242
233243** Docker-Builds:**
244+
234245- ` Dockerfile25 ` – Java 25 mit JRE
235246- ` Dockerfile25Jlink ` – Java 25 mit JLink Custom Image (~ 295MB vs ~ 510MB)
236247- AOT aktiv: ` spring-boot:process-aot ` im Build, ` -Dspring.aot.enabled=true ` zur Laufzeit
0 commit comments