阻止虚拟服务路由到空/不健康的目标?



有没有办法防止虚拟服务路由到空/不健康的目的地?
例如,考虑以下虚拟服务和目标规则:

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"标签的健康 Pod,因为 A( 零个 Pod 具有isCanary: "true"标签或 B( 所有 Canary Pod 都未就绪/运行状况不佳。 这将导致 10% 的httpy请求返回"上游不正常"响应。

有没有避免这种情况的好方法? 是否有可能使VirtualService"更智能",并且不会将流量路由到明显无法使用的目的地?

如果要自己尝试此操作,请应用以下要点,然后删除httpy-canary部署:https://gist.github.com/llamasoft/aaca58fda0ec2e06f2fee4f272691460

是的,在目标规则中,您可以使用LocalityLoadBalancerSetting配置failover

根据 istio 文档:

如果操作员的目标不是跨区域和区域分配负载,而是限制故障转移的区域性以满足其他操作要求,则操作员可以设置"故障转移"策略而不是"分发"策略。

以下示例为区域设置本地故障转移策略。假设服务驻留在美国东部、美国西部和欧洲西部的区域中,此示例指定当美国东部的终结点变得不正常时,流量应故障转移到欧洲西部任何区域或子区域中的终结点,同样,美国西部应故障转移到美国东部。

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

故障转移需要进行异常值检测才能正常工作。

希望对您有所帮助。

最新更新