Istio Service Entry配置双fqdn/ip负载均衡及主动健康检查可行性问询
核心结论
完全可以配置包含多个fqdn/ip地址的Istio Service Entry,同时实现外部服务负载均衡 + 每个端点的主动健康检查,不需要依赖你无法控制的自定义健康端点逻辑。
具体配置方案
1. 定义多端点Service Entry
首先通过Service Entry将多个外部服务端点注册为网格内可识别的统一服务,示例配置如下:
apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: external-custom-svc spec: hosts: - my.public.service # 自定义统一访问域名,网格内服务通过该域名访问外部服务 location: MESH_EXTERNAL ports: - number: 80 name: http protocol: HTTP resolution: STATIC # 若端点均为动态FQDN可改为DNS endpoints: - address: 10.0.0.12 # 第一个外部服务IP - address: foo.ext.com # 第二个外部服务FQDN
2. 配置Destination Rule开启主动健康检查
Istio的主动健康检查能力在Destination Rule中配置,支持TCP探测、HTTP探测、gRPC探测三种模式,如果无法使用外部服务的自定义健康端点,直接选择TCP端口探测即可,完全不依赖外部服务的业务逻辑,不会出现异常点检测依赖业务返回码误判的问题。
示例配置如下:
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: external-custom-svc-dr spec: host: my.public.service # 和上述Service Entry的host字段保持一致 trafficPolicy: loadBalancer: simple: ROUND_ROBIN # 可根据需求替换为LEAST_CONN/RANDOM等负载均衡策略 healthCheck: tcpHealthCheck: # 无可用HTTP健康端点时直接用TCP端口探测 port: 80 initialDelaySeconds: 5 # 首次健康检查等待时间 periodSeconds: 10 # 检查间隔 timeoutSeconds: 2 # 检查超时时间 unhealthyThreshold: 3 # 连续多少次失败判定为不健康 healthyThreshold: 2 # 连续多少次成功判定为健康 # 若不需要异常点检测可以直接删除以下outlierDetection配置 outlierDetection: consecutive5xxErrors: 3 interval: 1s baseEjectionTime: 30s
效果验证
配置完成后,网格内部服务访问my.public.service时,Istio会自动在你配置的多个外部端点之间做负载均衡,sidecar会独立对每个端点执行主动健康检查,不健康的端点会被自动剔除出负载均衡池,恢复后自动加回,全程不需要修改外部服务的任何配置。
内容的提问来源于stack exchange,提问作者bhantol
相关产品推荐
相关产品推荐

