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

Istio环境下Pod不可用时请求转至Service的配置需求

解决方案:Istio TLS透传下Pod故障自动切换至Service

我们在Kubernetes集群中通过headless service实现特定Pod的内部路由,同时利用Istio Virtual Service+Gateway的TLS透传模式,将p{i}.service.domain.com这类外部请求直接路由到指定Pod(例如p0.service.domain.com对应pod-2.myservice.mynamespace),当前运行正常。现在需要实现:当目标Pod不可用时,自动将请求转发至Service地址myservice.mynamespace,直至Pod恢复可用。

核心思路

Istio的故障转移依赖于对目标端点的健康检测,直接指定Pod的FQDN时默认不会启用健康检查,因此需要通过Destination Rule为Pod配置健康检测规则,同时在Virtual Service中配置主备路由,让Istio在Pod不健康时自动切换到Service路由。

1. 配置Destination Rule(实现Pod健康检测)

创建DestinationRule,为目标Pod的FQDN定义子集,并配置健康检查规则(根据服务协议选择HTTP/TCP检查):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: myservice-pod-dr
  namespace: mynamespace
spec:
  host: pod-2.myservice.mynamespace
  subsets:
  - name: pod-subset
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
      outlierDetection:
        consecutive5xxErrors: 2
        interval: 5s
        baseEjectionTime: 30s
      healthCheck:
        # 若为TCP服务,替换为healthCheck.tcp: {}即可
        http:
          path: /healthz  # 替换为你的Pod实际健康检查路径
          port: 8080
        interval: 5s
        timeout: 2s
        unhealthyThreshold: 2
        healthyThreshold: 2

2. 修改Virtual Service(配置主备路由策略)

更新Virtual Service,添加两个路由条目:主路由指向Pod子集(权重100),备用路由指向Service(权重0)。当Pod被检测为不健康时,Istio会自动跳过主路由,将流量转发至可用的备用路由:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myservice-vs
  namespace: mynamespace
spec:
  tls:
    - match:
      - port: 8080
        sniHosts:
        - p0.service.domain.com
      route:
      - destination:
          host: pod-2.myservice.mynamespace
          subset: pod-subset
          port:
            number: 8080
        weight: 100
      - destination:
          host: myservice.mynamespace
          port:
            number: 8080
        weight: 0

关键说明

  • 健康检测的作用:Destination Rule中的healthCheck会让Istio代理定期检测Pod状态,当Pod连续失败达到阈值时,会被标记为不健康,Istio将停止向其转发流量。
  • 权重配置逻辑:正常情况下流量全走权重100的Pod路由;当Pod不可用时,Istio会自动忽略该路由,将流量切换到权重为0的备用Service路由(权重0仅表示无主动流量分配,当主路由不可用时仍会被选中)。
  • TLS透传兼容性:该配置完全兼容TLS透传模式,Istio仅根据SNI做路由决策,不会解密流量,健康检测直接针对Pod端口发起(若为HTTPS服务,需确保健康检查路径支持HTTPS,或单独开放HTTP健康端口)。

验证方法

  1. 手动停止目标Pod,查看Istio代理日志,确认流量已切换至Service。
  2. 恢复Pod后,等待健康检测通过,流量会自动切回原Pod。

内容的提问来源于stack exchange,提问作者kushal agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:05:08