You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开启Istio Sidecar注入的K8s集群Liveness与Readiness探针失败求助

问题原因

  1. 探针配置被自动修改是Istio默认的HTTP探针重写机制导致:当集群开启Istio Sidecar自动注入时,Istio默认会重写应用容器的HTTP类型存活、就绪探针,将路径、端口替换为Sidecar的健康检查代理端点(端口15020,路径格式为/app-health/<应用名>/<livez/readyz>),由istio-proxy代理转发请求到你原始配置的应用探针地址,避免kubelet直接访问应用时因mTLS策略、Sidecar未完成初始化导致探针误判失败。
  2. 报错的核心原因是你在探针配置中显式指定了host: localhost:Istio的探针重写逻辑对显式设置了host字段的HTTP探针适配存在问题,会导致重写后的代理端点无法正常转发请求,甚至istio-proxy的15020端口还未完成初始化就开始检测,最终出现连接拒绝报错。另外15021端口是istio-proxy自身的就绪探针端口,该端口报错说明Sidecar本身启动异常,也会导致应用探针的代理端点不可用。

解决方法

你可以选择以下任意一种方案修复:

方案1:移除探针配置中的host: localhost字段

Kubernetes的HTTP探针默认就是向Pod的IP发送请求,不需要显式指定host为localhost,移除该字段后Istio的探针重写逻辑就能正常工作,代理会正确转发请求到你配置的9080端口的健康路径。
修改后的Helm Chart探针配置示例:

{{- if .Values.endpoint.liveness }}
          livenessProbe:
            httpGet:
              path: {{ .Values.endpoint.liveness | quote }}
              port: 9080
            initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
            periodSeconds: 5
{{- end }}
{{- if .Values.endpoint.readiness }}
          readinessProbe:
            httpGet:
              path: {{ .Values.endpoint.readiness | quote }}
              port: 9080
            initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
            periodSeconds: 60
{{- end }}

方案2:显式关闭Istio的探针重写功能

如果你不需要Istio代理探针请求,可以在Deployment的Pod模板注解中关闭当前应用的探针重写:
在spec.template.metadata.annotations中添加以下配置:

sidecar.istio.io/rewriteAppHTTPProbers: "false"

关闭后Istio不会修改你的原始探针配置,kubelet会直接访问应用的9080端口进行健康检查,需要注意保证kubelet到Pod 9080端口的网络策略放行、mTLS策略不会拦截kubelet的请求。

方案3:调整Sidecar初始化顺序

如果Sidecar本身启动慢导致探针失败,可以添加注解让istio-proxy优先于应用容器启动:

proxy.istio.io/config: '{ "holdApplicationUntilProxyStarts": true }'

该配置会让应用容器等待Sidecar完全启动后再启动,避免探针检测时Sidecar端口未就绪的问题。

内容的提问来源于stack exchange,提问作者Uma Mahiswari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 01:27:03