Ваша проблема в том, что вы создали VirtualService
с 3 правилами. Поэтому первое правило, которое не имеет конкретных критериев соответствия, всегда вызывается. Когда у вас есть несколько правил в VirtualService
, вы должны быть осторожны, чтобы правильно их упорядочить, как описано здесь .
Тем не менее, в вашем случае вам действительно не нужно несколько правил, а скорее одно правило с несколькими взвешенными адресатами, например:
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
. Вам нужны только метки, которые однозначно определяют разницу между подмножествами веб-службы.