Как устранить ошибку маршрутизации трафика 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 подмножества. Вам нужны только метки, которые однозначно определяют разницу между подмножествами веб-сервиса.

Были некоторые проблемы с отступами. Я решил, ссылаясь на следующие ссылки

https://raw.githubusercontent.com/istio/istio/release-1.0/samples/bookinfo/networking/destination-rule-all-mtls.yaml

Я думаю, что проблема в том, что для всех версий у вас одинаковый ярлык app: web поэтому istio направляет трафик на модули с этими метками, они просто оказались одним и тем же модулем. Вы должны указать разные метки для разных версий, например vor v2 метка version: v1, для v2 - version: v2 и вам также нужно создать стручки с этими метками.

Другие вопросы по тегам