Kubernetes 通过K8s集群的Istio内部路由加权流量
我有2个应用程序(Web和Api),分别有2个服务和2个Istio VirtualService。每个服务也有两个版本(v1和v2) 我想做三件事-Kubernetes 通过K8s集群的Istio内部路由加权流量,kubernetes,google-kubernetes-engine,istio,amazon-eks,Kubernetes,Google Kubernetes Engine,Istio,Amazon Eks,我有2个应用程序(Web和Api),分别有2个服务和2个Istio VirtualService。每个服务也有两个版本(v1和v2) 我想做三件事- 对于Web,除测试用户之外的所有流量将仅路由到版本v1 对于Web,对于测试用户而言,流量将仅路由100%到版本v2(第1点反之亦然)。在上线之前,QA团队将对版本v2进行测试,一旦QA团队验证,将为每个用户将流量移动到100%至v2,并删除版本v1 对于Api,流量将为版本v1(稳定)分配95%,为版本v2(发布)分配5% Web清单文件: ap
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: web-vs
spec:
hosts:
- web.example.com
http:
- match:
- headers:
end-user:
exact: test-user
route:
- destination:
host: web-svc
subset: v2
- route:
- destination:
host: web-svc
subset: v1
---
apiVersion: v1
kind: Service
metadata:
name: web-svc
labels:
app: web
spec:
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: web
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: api-vs -------------> #1
spec:
hosts:
- api-svc
http:
- route:
- destination:
host: api-svc
subset: v1
weight: 95
- destination:
host: api-svc
subset: v2
weight: 5
---
apiVersion: v1
kind: Service
metadata:
name: api-svc -------------> #2
labels:
app: api
spec:
ports:
- name: http
port: 8000
targetPort: 8000
selector:
app: api
API清单文件:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: web-vs
spec:
hosts:
- web.example.com
http:
- match:
- headers:
end-user:
exact: test-user
route:
- destination:
host: web-svc
subset: v2
- route:
- destination:
host: web-svc
subset: v1
---
apiVersion: v1
kind: Service
metadata:
name: web-svc
labels:
app: web
spec:
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: web
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: api-vs -------------> #1
spec:
hosts:
- api-svc
http:
- route:
- destination:
host: api-svc
subset: v1
weight: 95
- destination:
host: api-svc
subset: v2
weight: 5
---
apiVersion: v1
kind: Service
metadata:
name: api-svc -------------> #2
labels:
app: api
spec:
ports:
- name: http
port: 8000
targetPort: 8000
selector:
app: api
流量路由策略-
我认为问题在于缩进和主机。从中,尝试如下操作:
编辑:目标主机。我认为问题在于缩进和主机。从中,尝试如下操作:
已编辑:目标主机。来自服务“web svc”(仅暴露于internet)的用户希望在内部调用服务“api svc”,以便-1。web svc-->95%的次数将在v1 2上调用api svc。web svc-->05%次将在v2上调用api svc注意:请忽略yaml代码段中的缩进。主机在目标中不匹配。根据参考编辑答案。我已用标记-#1和#2更新了我的案例。当k8s服务“web svc”在内部调用k8s服务“api svc”时会发生什么?流量将直接从k8s服务“api svc”(即跳数=1)提供服务,或流量将通过istio virtualService“api vs”路由到k8服务“api svc”(即跳数=2)?据我所知,根据您提供的信息,我认为它应该是这样工作的:如果流量是外部的:Istio ingressgateway转到->网关->VS->服务,最后转到Pod。希望这有助于澄清一些问题。从服务“WebSVC”(仅暴露于internet)开始,希望在内部调用服务“APISVC”,以便-1。web svc-->95%的次数将在v1 2上调用api svc。web svc-->05%次将在v2上调用api svc注意:请忽略yaml代码段中的缩进。主机在目标中不匹配。根据参考编辑答案。我已用标记-#1和#2更新了我的案例。当k8s服务“web svc”在内部调用k8s服务“api svc”时会发生什么?流量将直接从k8s服务“api svc”(即跳数=1)提供服务,或流量将通过istio virtualService“api vs”路由到k8服务“api svc”(即跳数=2)?据我所知,根据您提供的信息,我认为它应该是这样工作的:如果流量是外部的:Istio ingressgateway转到->网关->VS->服务,最后转到Pod。希望这有助于澄清一些问题。