跨多个 pods 处理服务器发送的事件

Handling server sent events across multiple pods

我正在开发一个基于 NodeJS 的服务器,该服务器公开 /events 端点,通过 sse 将事件发送到客户端。除了这个端点,我还有多个用于 POST 请求处理的路由。

我正在尝试弄清楚如何以适用于多个 pods 的方式设置所有这些。现在我有负载平衡器设置来保持用户和 pod 之间的连接,直到客户端断开连接,但是当客户端发出 post 请求时,这些可以路由到不同的 pods.

我需要确保每个 pod 都可以发出一条带有用户 ID 的消息,并且该事件被与用户打开连接并发送到客户端的正确 pod 捕获。

我已经为此考虑过 redis,但我想知道 NodeJS 或 Kubernetes 是否公开了一些不需要它的东西。

您应该可以使用服务或通过负载均衡器来完成。

通过服务,您可以使用会话亲和力:

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
  sessionAffinity: ClientIP

使用负载均衡器粘性会话:

https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/