如何配置Istio实现service-2仅访问service-1的v2 Pod、其余服务仅访问v1
要实现service-2调用service-1时仅访问v2版本、其余服务调用service-1仅访问v1版本,可通过Istio的VirtualService源标签匹配规则+Destination Rule子集定义实现,具体配置如下:
前提确认
确保service-1对应的Destination Rule已经定义好v1、v2两个版本子集,示例配置如下:
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: service-1 spec: host: service-1 # 对应service-1的服务名 subsets: - name: v1 labels: version: v1 # 匹配pod-v1的version标签 - name: v2 labels: version: v2 # 匹配pod-v2的version标签
配置针对service-1的流量路由规则
创建VirtualService,通过sourceLabels匹配调用方的Pod标签,为不同来源分配不同路由目标:
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: service-1 spec: hosts: - service-1 # 匹配service-1的服务名,服务调用时用这个域名触发规则 http: # 匹配来自service-2的请求,路由到v2版本 - match: - sourceLabels: app: service-2 # 对应service-2 Pod上的app标签值 route: - destination: host: service-1 subset: v2 # 默认路由规则:所有其他来源请求路由到v1版本 - route: - destination: host: service-1 subset: v1
注意事项
- 确保所有服务的Pod都已打上对应的
app标签,比如service-2的Pod必须存在app: service-2的标签,否则Istio无法正确识别调用来源 - 配置下发后可进入对应Pod验证:在service-2中调用service-1返回v2版本响应,其余服务调用返回v1版本响应即为配置生效
服务架构图

内容的提问来源于stack exchange,提问作者Yeahia Md Abid
相关产品推荐
相关产品推荐

