у меня 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 "}