Как устранить ошибку маршрутизации трафика Istio?
Для приведенных ниже файлов 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
Может ли кто-нибудь помочь в этом?
3 ответа
Ваша проблема в том, что вы создали 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
подмножества. Вам нужны только метки, которые однозначно определяют разницу между подмножествами веб-сервиса.
Были некоторые проблемы с отступами. Я решил, ссылаясь на следующие ссылки
Я думаю, что проблема в том, что для всех версий у вас одинаковый ярлык app: web
поэтому istio направляет трафик на модули с этими метками, они просто оказались одним и тем же модулем. Вы должны указать разные метки для разных версий, например vor v2 метка version: v1
, для v2 - version: v2
и вам также нужно создать стручки с этими метками.