我使用Flask在python中创建了一个简单的API。
Api用于观看电影,它充当代理,即:
Api从用户那里获得一个包含mp4的页面链接。使用链接,它从用户链接页面下载带有web请求的mp4,并将mp4返回给用户,但这些mp4(链接(被分配给了IP,因此为了让用户观看电影,一切都必须通过API,API必须进行另一个查询并将查询返回给用户。
这就是我的API的一部分,它负责发出观看电影的请求。
@WatchBp.route("/stream", methods=["GET"])
def stream():
print(request.headers)
try:
link = html.unescape(request.args.get("link"))
origin = html.unescape(request.args.get("origin"))
referer = html.unescape(request.args.get("referer"))
r = requests.get(link, headers={"Range": request.headers["Range"], "referer": referer, "origin": origin}, stream=True)
res = Response(r.iter_content(chunk_size=10 * 1024),mimetype=r.headers["Content-Type"],direct_passthrough=True,status=r.status_code)
res.headers["Content-Range"] = r.headers["Content-Range"]
res.headers["Accept-Ranges"] = 'bytes'
res.headers["Content-Length"] = r.headers["Content-Length"]
return res
except:
pass
return ('',501)
整个Api使用kubernetes和Digitalocean负载平衡器站在Digitalocean上。
包含api的容器使用docker镜像tiangolo/uwsgi nginx-flack:python3.8.
目前,该应用程序基于1个kubernetes节点
现在有更多的用户,我想添加第二个节点
但第二个节点是第二台计算机,如果从节点1获取到mp4的链接,并且下一个负载均衡器查询重定向到节点2,则应用程序将无法下载mp4,因为它将不是同一个ip
我的应用程序使用kubernetes的配置使用Ingress,Ingress提要连接到Loadbalancer,Ingress feed将流量重定向到我的API。
现在的问题是,观看电影的用户是否可能总是被重定向到下载mp4的节点?谢谢你的帮助
我不确定它实际上是如何将流量移动到节点的。
由于您的流量或请求理想情况下每次都希望转到同一POD。
Nginx入口的粘性会话可能会有所帮助
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "hello-cookie"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/affinity-mode: persistent
nginx.ingress.kubernetes.io/session-cookie-hash: sha1
spec:
rules:
- host: DOMAIN.NAME
http:
paths:
- path: /
backend:
serviceName: hello-service
servicePort: hello-port
您可以在以下位置阅读更多信息:https://zhimin-wen.medium.com/sticky-sessions-in-kubernetes-56eb0e8f257d