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 услуги в указанных процентах, то да, это выглядит как действительный конфиг.

Другие вопросы по тегам