将用户平衡到kubernetes中的同一节点
Balancing users to same node in kubernetes
我使用 Flask 在 python 中创建了一个简单的 API。
Api用于看电影,作为代理使用,即:
Api 从包含 mp4 的页面的用户处获得 link。使用 link,它使用来自用户 link 页面的 Web 请求下载 mp4 和 returns mp4 给用户,但是这些 mp4 (links) 被分配给IP,所以为了让用户看电影一切都必须经过 API,API 必须再次查询和 return 向用户查询。
这是我的 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 loadbalancer站在Digitalocean上。
包含 api 的容器使用 docker 镜像 tiangolo / uwsgi-nginx-flask: python3.8 .
目前应用基于1个kubernetes节点
现在有更多的用户,我想添加第二个节点。
但是第二个节点是第二台电脑,如果link到mp4取自节点1,下一个loadbalancer查询重定向到节点2,应用会下载失败mp4因为不会是同一个ip.
我使用 kubernetes 的应用程序配置使用 Ingress,入口提要连接到 Loadbalancer,Ingress 提要将流量重定向到我的 API。
现在的问题是,看电影的用户是否可以一直被重定向到下载mp4的节点?
感谢您的帮助。
我不确定它实际上是如何将流量转移到节点的。
理想情况下,您的流量或请求每次都希望转到同一个 POD。
来自 Nginx ingress 的粘性会话可能会有所帮助
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
我使用 Flask 在 python 中创建了一个简单的 API。
Api用于看电影,作为代理使用,即:
Api 从包含 mp4 的页面的用户处获得 link。使用 link,它使用来自用户 link 页面的 Web 请求下载 mp4 和 returns mp4 给用户,但是这些 mp4 (links) 被分配给IP,所以为了让用户看电影一切都必须经过 API,API 必须再次查询和 return 向用户查询。
这是我的 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 loadbalancer站在Digitalocean上。
包含 api 的容器使用 docker 镜像 tiangolo / uwsgi-nginx-flask: python3.8 .
目前应用基于1个kubernetes节点
现在有更多的用户,我想添加第二个节点。
但是第二个节点是第二台电脑,如果link到mp4取自节点1,下一个loadbalancer查询重定向到节点2,应用会下载失败mp4因为不会是同一个ip.
我使用 kubernetes 的应用程序配置使用 Ingress,入口提要连接到 Loadbalancer,Ingress 提要将流量重定向到我的 API。
现在的问题是,看电影的用户是否可以一直被重定向到下载mp4的节点? 感谢您的帮助。
我不确定它实际上是如何将流量转移到节点的。
理想情况下,您的流量或请求每次都希望转到同一个 POD。
来自 Nginx ingress 的粘性会话可能会有所帮助
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