Правила маршрутизации Istio Basic не могут заставить его работать

Я пытаюсь установить правила маршрутизации, но не могу заставить их работать.

версия istioctl: 1.0.2 версия kubectl: клиент 1.10.3 / сервер 1.9.6

У меня есть следующие развертывания (файлы конфигурации ниже): 1. Два простых модуля фляг 2. Одна служба NodePort 3. Одно правило назначения 4. Одна виртуальная служба

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

Пакет 1:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: flask-v1
spec:
  selector:
    matchLabels:
      app: flask
  replicas: 1
  template:
    metadata:
      labels:
        app: flask
        version: v1
    spec:
      containers:
      - name: flask
        image: simple-flask-example:1.0.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000

Модуль 2:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: flask-v2
spec:
  selector:
    matchLabels:
      app: flask
  replicas: 1
  template:
    metadata:
      labels:
        app: flask
        version: v2
    spec:
      containers:
      - name: flask
        image: simple-flask-example:2.0.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000

Порт узла службы:

apiVersion: v1
kind: Service
metadata:
  name: flask
  labels:
    app: flask
spec:
  type: NodePort
  ports:
  - port: 80
    name: http
    targetPort: 5000
  selector:
    app: flask

DestinationRule:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: flask
spec:
  host: flask
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

VirtualService:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: flask
spec:
  hosts:
  - flask
  http:
  - route:
    - destination:
        host: flask
        subset: v1

Проверка запросов:

>>> for x in range(10) : requests.request('GET','http://10.200.167.223').text
...
'{\n    "hello": "world v2"\n}\n'
'{\n    "hello": "world v2"\n}\n'
'{\n    "hello": "world v2"\n}\n'
'{\n    "hello": "world v1"\n}\n'
'{\n    "hello": "world v1"\n}\n'
'{\n    "hello": "world v2"\n}\n'
'{\n    "hello": "world v2"\n}\n'
'{\n    "hello": "world v1"\n}\n'
'{\n    "hello": "world v2"\n}\n'
'{\n    "hello": "world v1"\n}\n'

person Ben    schedule 02.10.2018    source источник
comment
Вы использовали автоматическое впрыскивание коляски или добавляли коляску вручную? Не могли бы вы проверить, есть ли коляски в контейнерах для фляжек? Похоже, что Istio не участвует в распределении трафика.   -  person VASャ    schedule 03.10.2018
comment
Привет, @ Бен, у тебя все заработало!   -  person Sumit Murari    schedule 14.01.2019


Ответы (1)


Правила маршрутизации Istio (правила VirtualService) выполняются на клиентском прокси, а не в целевой службе, поэтому, если вы вызываете службу напрямую через NodePort, она не будет выполнять никакой маршрутизации Istio. Вам нужно вызвать его либо из другой службы Istio, либо через шлюз Istio.

Простой способ проверить маршрутизацию сервисов - использовать образец сна в качестве клиент.

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

person Frank B    schedule 03.10.2018