Istio: синий / зеленый развертывание
Могу ли я создать стратегию трафика для маршрутизации трафика между службами, работающими в разных пространствах имен kubernetes?
В настоящее время моя служба тестирования находится по адресу staging
Пространство имен. С другой стороны, мой сервис в производстве на production
Пространство имен.
Я хотел бы сбалансировать трафик между сервисами, расположенными в staging
пространство имен и production
Пространство имен. Итак, 10% идет на staging:service
и 90% идет на production:service
,
До сих пор я мог создавать виртуальную службу и правило назначения, но обе службы выполнялись в одном и том же пространстве имен.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
creationTimestamp: null
name: recommendation
namespace: istio-project
spec:
host: recommendation
subsets:
- labels:
version: v1
name: version-v1
- labels:
version: v2
name: version-v2
И VirtualService
:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
creationTimestamp: null
name: recommendation
namespace: istio-project
spec:
hosts:
- recommendation
http:
- route:
- destination:
host: recommendation
subset: version-v1
weight: 75
- destination:
host: recommendation
subset: version-v2
weight: 25
Эта конфигурация является балансом между обоими службами, работающими внутри istio-project
Пространство имен.
Есть идеи?
РЕДАКТИРОВАТЬ
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
creationTimestamp: null
name: recommendation
namespace: istio-project
spec:
hosts:
- recommendation
http:
- route:
- destination:
host: recommendation
weight: 75
- destination:
host: recommendation.istio-project-two.svc.cluster.local
weight: 25
---
1 ответ
Есть идеи?
Вы пытались с полным доменным именем, чтобы покрыть кросс-пространства имен. Это в формате servicename.namespace.svc.cluster.local
, В документации istio для VirtualServices это упоминается в их примере как:
spec:
hosts:
- ratings.prod.svc.cluster.local
где ratings
будет имя службы, prod
будет пространство имен в этом конкретном примере. Также они перечисляют:
...
namespace: foo
spec:
host: reviews # interpreted as reviews.foo.svc.cluster.local
...
с примером перекрестного пространства имен:
...
spec:
hosts:
- productpage.prod.svc.cluster.local # ignores rule namespace
...
В другой части документации они специально предлагают использовать FQDN для пользователей Kubernetes, цитата:
Примечание для пользователей Kubernetes: Когда используются короткие имена (например, "reviews" вместо "reviews.default.svc.cluster.local"), Istio будет интерпретировать короткое имя на основе пространства имен правила, а не службы. Правило в пространстве имен "по умолчанию", содержащее узел "отзывы", будет интерпретироваться как "reviews.default.svc.cluster.local", независимо от фактического пространства имен, связанного со службой отзывов. Чтобы избежать возможных неправильных настроек, рекомендуется всегда использовать полные доменные имена поверх коротких имен.
Если я правильно понимаю вашу конфигурацию, вам потребуется: recommendation.staging.svc.cluster.local
а также recommendation.production.svc.cluster.local
соответственно в качестве хостов для маршрутизации через пространства имен.
Редактировать для комментария:
Если вы хотите проложить маршрут recommendation.istio-project.svc.cluster.local
стручкам, бегущим в этом и recommendation.istio-project-two.svc.cluster.local
услуги в указанных процентах, то да, это выглядит как действительный конфиг.