I have a microservice that runs over http/2, my environment is configured with istio and mtls, I am trying to add health checks for the microservice following the guide here: https://istio.io/docs/ops/configuration/mesh/app-health-check/. When i check the logs from the sidecar container i get the message:
error Request to probe app failed: Get http://localhost:8081/health: net/http: HTTP/1.x transport connection broken: malformed HTTP response “\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\b\a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02”, original URL path = /app-health/sample/readyz
initial probes look like this
livenessProbe: httpGet: path: /health port: 8081 ... readinessProbe: httpGet: path: /health port: 8081 ...
I have added the annotation sidecar.istio.io/rewriteAppHTTPProbers: “true” and the re-written values look like this
livenessProbe: httpGet: path: /app-health/sample/livez port: 15020 scheme: HTTP readinessProbe: httpGet: path: /app-health/sample/readyz port: 15020 scheme: HTTP
I know that normally Kubernetes does not support probes over http/2 but I thought that maybe the sidecar can translate the protocol since the traffic already goes through it.
P.S: I keep reading that Envoy has First class HTTP/2 support and can operate as a transparent HTTP/1.1 to HTTP/2 proxy in both directions (see documentation) but I cannot find any guides on how to do so. It would be useful in case I have other 3rd party components that only work with http1.1.