Это, вероятно, не работает, потому что ваше приложение прослушивает /
и с вашей первой виртуальной службой, которая работает, istio отправляет запросы на /
, чего не происходит с вашей второй виртуальной службой.
Ответом здесь будет добавление rewrite к вашей второй виртуальной службе.
HTTPRewrite можно использовать для перезаписи определенных c частей HTTP-запроса перед его пересылкой к месту назначения. Примитив перезаписи можно использовать только с HTTPRouteDestination. В следующем примере показано, как переписать префикс URL-адреса для вызова API (/ rating) в службу оценок перед выполнением фактического вызова API.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings-route
spec:
hosts:
- ratings.prod.svc.cluster.local
http:
- match:
- uri:
prefix: /ratings
rewrite:
uri: /v1/bookRatings
route:
- destination:
host: ratings.prod.svc.cluster.local
subset: v1
, чтобы он выглядел так
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-virtual-svc
spec:
hosts:
- "*"
gateways:
- my-gateway
http:
- name: "my-grpc-1"
match:
- uri:
prefix: "/my-grpc-1"
rewrite:
uri: "/"
route:
- destination:
port:
number: 9090
host: my-grpc-1-svc
- name: "my-grpc-2"
match:
- uri:
prefix: "/my-grpc-2"
rewrite:
uri: "/"
route:
- destination:
port:
number: 9090
host: my-grpc-2-svc
Соответствующая документация об этом здесь .
Я думаю, вы могли бы попытаться сделать это с помощью FQN служб gRP C, как указано в этом github комментарий к проблеме
Другая идея - использовать nginx, как упоминалось здесь .