将用户平衡到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