对于以下文件,ISTIO仅在第一个v1应用程序中显示输出。如果更改v1的版本,则输出将更改。因此,流量根本不会转移到其他版本。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sampleweb
namespace: default
spec:
hosts:
- "web.xyz.com"
gateways:
- http-gateway
http:
- route:
- destination:
port:
number: 8080
host: web
subset: v1
weight: 30
- route:
- destination:
port:
number: 8080
host: web
subset: v2
weight: 30
- route:
- destination:
port:
number: 8080
host: web
subset: v3
weight: 40
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: samplewebdr
namespace: default
spec:
host: web
subsets:
- name: v1
labels:
app: web
version: prod
- name: v2
labels:
app: web
version: baseline
- name: v3
labels:
app: web
version: canary
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
有人可以帮忙吗?
答案 0 :(得分:1)
您的问题是您创建了一个包含3条规则的VirtualService
。因此,没有特定匹配条件的第一个规则始终是被调用的规则。当VirtualService
中有多个规则时,您需要注意按here所述正确地排序它们。
也就是说,在您的情况下,您实际上并不需要多个规则,而是一个具有多个加权目标的单个规则,如下所示:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sampleweb
namespace: default
spec:
hosts:
- "web.xyz.com"
gateways:
- http-gateway
http:
- route:
- destination:
port:
number: 8080
host: web
subset: v1
weight: 30
- destination:
port:
number: 8080
host: web
subset: v2
weight: 30
- destination:
port:
number: 8080
host: web
subset: v3
weight: 40
顺便说一句,尽管无害,但您不需要在app: web
子集中包含DestinationRule
标签。您只需要用于唯一标识Web服务子集之间差异的标签。
答案 1 :(得分:0)
存在一些缩进问题。我通过以下链接解决了该问题
答案 2 :(得分:-1)
我认为问题在于,对于所有版本,您都具有相同的标签app: web
,因此istio将流量引导到带有这些标签的Pod,而它们恰好是同一Pod。您需要为vor v2等不同版本指定不同的标签,对于v2-version: v1
,标签为version: v2
,并且还需要使用这些标签创建广告连播。