我有2个集群。在一个群集中,knative服务正在运行,而在另一群集中,则配置了istio。 多个提供商会将请求发送给knative,并应相应地获得响应。 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服务执行命令。我也可以从邮递员或浏览器进行测试。
[root @ svpod7mgmt001〜]#curl -X POST --header“ Host:example.com” http://10.0.41.121/ping -d'{“ ip”:“ 10.0.41.96”}' {“状态”:“成功”,“信息”:“主机正在pinging”,“ ip”:“ 10.0.41.96”}