Виртуальная служба Istio работает не очень хорошо

Я обнаружил, что функция перезаписи моей виртуальной службы работает не очень хорошо. Вот мой yaml-файл Virtual Service и DestinationRule:

      apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: leads-http
  namespace: seldon
spec:
  gateways:
  - istio-system/seldon-gateway
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /seldon/seldon/leads/
    rewrite:
      uri: /
    route:
    - destination:
        host: leads-leads
        port:
          number: 8000
        subset: leads
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: leads-leads
  namespace: seldon
spec:
  host: leads-leads
  subsets:
  - labels:
      version: leads
    name: leads
  trafficPolicy:
    connectionPool:
      http:
        idleTimeout: 60s

Когда я отправляю http-запрос :

      curl --location --request POST 'http://localhost/seldon/seldon/leads/v2/models/leads-lgb/versions/v0.1.0/infer'

Я обнаружил, что служба istio-proxy выводит сообщение 404, которого нет в журналах:

      "POST /seldon/seldon/leads/v2/models/leads-lgb/versions/v0.1.0/infer HTTP/1.1" 404

хотя я ожидаю:

      POST /v2/models/leads-lgb/versions/v0.1.0/infer HTTP/1.1

Я не уверен, что происходит. Есть у кого-нибудь идеи? Спасибо!

1 ответ

Я думаю, что ваша проблема неправильно настроена DestinationRuleили имя службы.

Правило назначения :

Эти правила определяют конфигурацию для балансировки нагрузки, размер пула соединений из sidecar и параметры обнаружения выбросов для обнаружения и исключения неработоспособных хостов из пула балансировки нагрузки.

Политики для конкретной версии можно указать, определив именованное подмножество и переопределив параметры, указанные на уровне службы.

Примечание. Политики, указанные для подмножеств, не вступят в силу до тех пор, пока правило маршрутизации явно не направит трафик в это подмножество.

DestinationRule-Subset:

Мне кажется, что nameдолжен идти первым в структуре. По крайней мере, я не видел/не встречал других примеров. Итак, в вашем случае правильный (по крайней мере, я надеюсь) DR:

      apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: leads-leads
  namespace: seldon
spec:
  host: leads-leads
  subsets:
  - name: leads
    labels:
      version: leads

Однако, если это не поможет, я рекомендую вам проверить этот самостоятельный вопрос :

Разве у вас не такая же ситуация с именованным сервисным портом? Я имею в виду, что в соответствии с явным выбором протокола вы должны добавить суфикс в имя службы... name: <protocol>[-<suffix>]

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