С ISTIO много инструментов доступны, чтобы помочь нам легко установить правила маршрутизации. И сегодня мы будем использовать их, чтобы установить правило маршрутизации, чтобы иметь возможность использовать две версии одного и того же приложения.
Сначала нам нужно иметь возможность отличить как версию приложения.
Отличные услуги
Если оба версии приложения имеет определенную услугу, чтобы выставить его, все в порядке, мы можем пойти дальше.
Та же услуга
В противном случае, если они используют тот же сервис, нам нужно добавить что-то, чтобы иметь возможность отличить их.
Здесь мы будем использовать Правило назначения Отказ С этим мы скажем, что для нашего сервиса (здесь определено в элементе хоста) У нас есть несколько подгрупп (подсети) Отказ
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: my-api spec: host: my-api.default.svc.cluster.local trafficPolicy: loadBalancer: simple: ROUND_ROBIN subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2
В этом примере у нас есть 2 подгруппы:
- V1 С всеми стручками My-API с этикеткой версия: V1.
- v2 С всеми стручками My-API с этикеткой версия: V2.
Теперь, когда мы можем различить наши версии, мы можем определить правило маршрутизации с помощью Virtualservice Отказ
Уваживание
Во-первых, мы можем создать правило для перенаправления трафика в зависимости от URI.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-api namespace: default spec: hosts: - my-api.default.svc.cluster.local http: - match: - uri: prefix: "/v1" route: - destination: host: my-api.default.svc.cluster.local subnet: v1 - route: - destination: host: my-api.default.svc.cluster.local subnet: v2
В этом примере, если URI начинается с «/v1», трафик перенаправляется в подсеть V1 Отказ В противном случае он идет к v2 Отказ
ВАЖНЫЙ: Значения подсети здесь должны совпадать с именами подсетей, определенных в Peritionrule.
Заголовок
Затем мы можем обновить VirtualService, чтобы изменить условие и вместо этого использовать заголовок.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-api namespace: default spec: hosts: - my-api.default.svc.cluster.local http: - match: - headers: version: exact: V1 route: - destination: host: my-api.default.svc.cluster.local subnet: v1 - route: - destination: host: my-api.default.svc.cluster.local subnet: v2
С этими маленькими изменениями мы можем перенаправить трафик к V1 подсеть только с заголовком.
- ISTIO — Peritionrule: https://istio.io/v1.1/docs/reference/config/networking/v1alpha3/destination-rule/
- ISTIO — VirtualService: https://istio.io/v1.1/docs/reference/config/networking/v1alpha3/virtual-service/
- ISTIO — пример маршрутизации запроса: https://istio.io/latest/docs/tasks/traffic-management/request-routing/
Если вы хотите пойти дальше, все ссылки здесь, чтобы увидеть все варианты, доступные как:
- Используйте точный URI
- Используйте Regex для URI
- Используйте Regex для заголовка
- Добавьте некоторые попытки
- …
Я надеюсь, что вам понравилось, и это будет полезно! 🍺
Оригинал: «https://dev.to/adaendra/how-to-set-a-routing-rule-between-two-versions-of-the-same-app-in-istio-3ekf»