Может ли istio поддерживать маршрут к другому сервису по динамической части пути uri? - PullRequest
0 голосов
/ 03 февраля 2019

Я знаю, что istio поддерживает маршрут к другому сервису по статическому правилу, как показано ниже:

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-virtualservice
spec:
  hosts:
  - "*"
  gateways:
  - my-gateway
  http:
  - match:
    - uri:
        prefix: /applications/app-a
    route:
    - destination:
        host: app-a
        port:
          number: 9080

Но у меня есть требование, чтобы я динамически создавал сервисы, когда появляется новый пользователь или приходит новая конфигурация.Если я использую «статический» способ, то мне приходится каждый раз создавать новый виртуальный сервис или обновлять существующий виртуальный сервис.

Я не нахожу никакой документации, упоминающей этот вид использования, но могу ли я использовать что-то вроде "regex" или какой-то другой способ создать одно правило, которое будет применяться ко всем этим вновь создаваемым сервисам без обновления виртуальной службы каждый раз?Ниже что-то не работает, но попробуйте продемонстрировать мою идею:

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-virtualservice
spec:
  hosts:
  - "*"
  gateways:
  - my-gateway
  http:
  - match:
    - uri:
        regex: /applications/(?<appname>.*)
    route:
    - destination:
        host: $('appname')--svc
        port:
          number: 9080

Конечно, любое предложение будет с благодарностью.Благодарю.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Я не уверен, но на github они используют регулярное выражение в VirtualService:

  - match:
    - headers:
        cookie:
          regex: "^(.*?;)?(user=dev-123)(;.*)?"

, поэтому вы можете попробовать использовать что-то вроде:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: my-virtualservice
spec:
 hosts:
 - "*"
 gateways:
 - my-gateway
 http:
 - match:
   - uri:
       prefix:
         regex: "/applications/(?<appname>.*)"
   route:
   - destination:
       host: match_group['appname']
       port:
         number: 9080

вместо regix

0 голосов
/ 04 февраля 2019

Я не думаю, что Истио может делать то, что вы просите.Хорошей стороной этого является то, что вы должны контролировать все точки входа в ваш кластер - какое приложение доступно и как оно доступно - меньше дыр в безопасности.

...