Как устранить ошибку маршрутизации трафика 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

Может ли кто-нибудь помочь в этом?


person Subit Das    schedule 19.11.2018    source источник
comment
Есть ли у вас другие VS / DR, кроме этих? Может быть, некоторые противоречат друг другу.   -  person Joel    schedule 19.11.2018
comment
Не могли бы вы добавить информацию о ваших развертываниях (или о том, что у вас есть) вашего приложения   -  person Artem Golenyaev    schedule 19.11.2018


Ответы (3)


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

person Frank B    schedule 20.11.2018

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

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

person Subit Das    schedule 20.11.2018

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

person Anna Slastnikova    schedule 19.11.2018
comment
Ярлыки: app = web app.kubernetes.io/managed-by=spinnaker app.kubernetes.io/name=web pod-template-hash = 2895261194 version = canary - person Subit Das; 19.11.2018