Сервис istio должен маршрутизироваться на основе заголовка ответа, отправленного родным сервисом, запущенным в другом облаке.Как этого добиться - PullRequest
0 голосов
/ 28 мая 2019

у меня 2 кластера.В одном кластере работает служба knative и в другом кластере настроен istio.Несколько провайдеров отправят запрос в knative и должны получить соответствующий ответ.Родная служба работает правильно и возвращает ответ.

Проблема -> Istio должен прослушать соблазнительный ответ и направить пакет внешнему провайдеру на основе заголовка ответа.

Я знаю, мы можем настроить вход службы и виртуальную службу, чтобы разрешить пакетвне.Но как я могу сделать прослушивание службы istio для заголовка ответа и извлечения.Создайте общую запись службы и виртуальную службу на основе этого заголовка

Собственный код службы ping

import os
import json
import time
from flask import Flask , request

app = Flask(__name__)

@app.route('/ping',methods=['POST'])

def ping():
    req_data = request.get_json(force=True)
    ip = req_data["ip"]
    #validate whether user has passed IP string
    if not ip.strip():
        data = {
                 'status': 'ERROR',
                 'msg': 'IP string is empty. Pass the Json with IP value',
                 'ip': ip
        }
        resp = json.dumps(data)
        return '{}\n'.format(resp)
    res = os.system("ping -c 2 " + ip)
    if res == 0:
        data = {
                 'status': 'SUCCESS',
                 'msg': 'HOST is pinging',
                 'ip': ip
        }
        resp = json.dumps(data)
        time.sleep(5)
        return '{}\n'.format(resp)
    else:
        data = {
                 'status': 'ERROR',
                 'msg': 'HOST is not reachable',
                 'ip': ip
        }
        resp = json.dumps(data)
        return '{}\n'.format(resp)

if __name__ == "__main__":
    app.run(debug=True,host='0.0.0.0',port=int(os.environ.get('PORT', 8080)))

Исключение -> Кластер Istio, я вызываю команду curl для службы ping, работающей в кластере knative.То же самое я могу протестировать и из почтальона или из браузера.

[root @ svpod7mgmt001 ~] # curl -X POST --header "Host: example.com" http://10.0.41.121/ping -d '{"ip":" 10.0.41.96 "} '{" status ":" SUCCESS "," msg ":" HOST is pinging "," ip ":" 10.0.41.96 "}

...