防止VirtualService路由到空的不健康的目的地?

问题描述 投票:0回答:1

有什么方法可以防止VirtualService路由到空的不健康的目的地?例如,考虑以下VirtualService和DestinationRule。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpy
spec:
  hosts:
    - httpy
  http:
    - route:
      - destination:
          host: httpy
          subset: prod
        weight: 90
      - destination:
          host: httpy
          subset: canary
        weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: httpy
spec:
  host: httpy
  subsets:
  - name: prod
    labels:
      isCanary: "false"
  - name: canary
    labels:
      isCanary: "true"

想象一下,没有健康的豆荚在里面 httpy 的服务。isCanary: "true" 标签,要么是因为A)零个豆荚具有 isCanary: "true" 标签或B)所有的金丝雀豆荚都是未准备好的不健康的。 这将导致10%的请求到 httpy 返回 "无健康上行 "的响应。

有没有什么好的方法可以避免这种情况? 有没有可能让VirtualService变得更 "聪明",让它不把流量路由到一个明显不可用的目的地?

如果你想自己尝试一下,应用下面的要领,然后删去 httpy-canary 部署。https:/gist.github.comllamasoftaaca58fda0ec2e06f2fee4f272691460。

kubernetes istio
1个回答
0
投票

是的,在目标规则中,您可以配置为 failoverLocalityLoadBalancerSetting.

根据 同义词 文档。

如果运营商的目标不是在区域和地区之间分配负载,而是限制故障切换的区域性以满足其他运营需求,运营商可以设置一个 "故障切换 "策略而不是 "分配 "策略。

下面的例子为区域设置了一个区域性故障转移策略。假设一个服务驻留在 us-east、us-west & eu-west 的区域内,这个例子指定,当 us-east 内的端点变得不健康时,流量应故障转移到 eu-west 内任何区域或子区域的端点,同样地,us-west 应故障转移到 us-east。

 failover:
   - from: us-east
     to: eu-west
   - from: us-west
     to: us-east

故障切换需要 异常值检测 要到位才行。

希望对大家有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.