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