Проблема соответствия заголовка HTTP Istio VirtualService - PullRequest
0 голосов
/ 04 июня 2018

Следующая версия Istio 0.8 VirtualService не соответствует заголовку HTTP.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - match:
    - headers:
        foo:
          exact: bar
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v3

Я следовал https://github.com/istio/issues/issues/38 и Istio RouteRule на основе заголовков user-agent не работает .Однако я не могу заставить его работать.

Указатели были бы очень полезны, поскольку служба сна возвращает страницу продукта, аналогичную POSTMAN, без каких-либо последствий для условия соответствия!

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Вам необходимо позвонить в службу отзывов через ingressgateway.Если вы этого не делаете, есть два способа решить проблему:

  1. Если вы звоните на страницу продукта (curl <ingress url>/productpage -H "foo: bar"), нет никакой логики для распространенияfoo: bar шапка от страницы товара до сервиса отзывов.Пример с user-agent работает, потому что user-agent распространяется автоматически (особый случай).Если вы хотите использовать foo: bar, вам потребуется добавить логику в службу страницы продукта, чтобы получить заголовок foo и отправить его в службу отзывов.

  2. Вы звонитесервис отзывов напрямую (например, вы предоставили сервису обзоров порт узла).Это может не сработать, поскольку ваш запрос не направляется прокси-сервером Istio - вместо этого он обрабатывается балансировщиком нагрузки службы k8s.Вам нужно вызвать Istio прокси, например ingressgateway.

0 голосов
/ 06 июня 2018

Этот VirtualService сам по себе не будет работать, если у вас нет DestinationRule для определения ваших подмножеств (версий).

Я продемонстрирую, как это должно быть сделано с упакованным образцом HelloWorld.с выпуском 0.8:

Шаг 1: Развертывание samples/helloworld/helloworld.yaml

Шаг 2: Определение DestinationRule для двух доступных версий:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: helloworld
spec:
  host: helloworld
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

Шаг 3: Заменить значение по умолчанию VirtualService на значение, соответствующее атрибуту заголовка для маршрутизации:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: helloworld
spec:
  hosts:
  - "*"
  gateways:
  - helloworld-gateway
  http:
  - match:
    - headers:
        foo:
          exact: bar
    route:
    - destination:
        host: helloworld
        subset: v2
  - route:
    - destination:
        host: helloworld
        subset: v1

Шаг 4: Проверьте это:

  • Без заголовка: curl http://$INGRESS_GATEWAY/hello

    Вывод:

    Привет версия: v1, экземпляр: helloworld-v1-fd9b784bb-wcnj9

  • С заголовком: curl -H "foo: bar" http://$INGRESS_GATEWAY/hello

    Вывод:

    Привет версия: v2, экземпляр:helloworld-v2-56694b7d6d-gbhqb

...