说我有三个服务,即ServiceA,ServiceB和ServiceC。 ServiceA和ServiceB都调用ServiceC。我想部署新版本的ServiceC,但只想从ServiceB发送流量进行测试。是否有将“呼叫服务”考虑在内的路由配置?
答案 0 :(得分:1)
您可以使用virtual service或虚拟服务和destination rule来做到这一点。
带有标签,例如here
带有应用和版本标签的部署:我们建议为部署添加明确的应用标签和版本标签。将标签添加到使用Kubernetes Deployment部署的Pod的部署规范中。应用和版本标签将上下文信息添加到Istio收集的指标和遥测中。
应用标签:每个部署规范都应有一个具有有意义值的不同应用标签。应用标签用于在分布式跟踪中添加上下文信息。
版本标签:此标签指示与特定部署相对应的应用程序的版本。
每个路由规则都与一个或多个服务版本关联(请参阅文档开头的词汇表)。与版本关联的权重决定了它接收的流量比例。例如,以下规则会将“评论”服务的25%流量路由到带有“ v2”标签的实例,而其余流量(即75%)路由到“ v1”。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews-route
spec:
hosts:
- reviews.prod.svc.cluster.local
http:
- route:
- destination:
host: reviews.prod.svc.cluster.local
subset: v2
weight: 25
- destination:
host: reviews.prod.svc.cluster.local
subset: v1
weight: 75
以及相关的DestinationRule
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews-destination
spec:
host: reviews.prod.svc.cluster.local
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
OR
流量也可以分为两个完全不同的服务,而不必定义新的子集。例如,以下规则将25%的流量转发到reviews.com,将75%的流量转发到dev.reviews.com
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews-route-two-domains
spec:
hosts:
- reviews.com
http:
- route:
- destination:
host: dev.reviews.com
weight: 25
- destination:
host: reviews.com
weight: 75
编辑
因此,实际上您必须在serviceC 1.0和2.0中添加标签,虚拟服务将如下所示。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews-route-two-domains
spec:
hosts:
- reviews.com
http:
- match:
- sourceLabels:
svc: A
- route:
- destination:
host: serviceC
label: v1
- match:
- sourceLabels:
svc: B
- route:
- destination:
host: serviceC
label: v2
在使用sourceLabels here
的地方检查我的另一个答案让我知道您是否还有其他问题。