Основные правила маршрутизации Istio не могут заставить его работать - PullRequest
0 голосов
/ 02 октября 2018

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

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

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

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

Pod 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

Pod 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'

1 Ответ

0 голосов
/ 04 октября 2018

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

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

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

...