websocket - 用于 websocket 应用程序的 nginx-ingress 粘性 session

标签 websocket nginx-ingress azure-aks sticky-session

我在 K8s 集群中有一个 websocket .net 应用程序。我需要使用 nginx 开源为 websocket 实现粘性 session 。

我已经阅读了 nginx 和 kubernetes 的文档。
https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#session-affinity

它说我们可以使用以下配置进行粘性 session :

nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "ingresscoookie"
nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800

但这似乎不起作用。我在这里尝试了 kubernetes 提供的示例代码 https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/affinity/cookie/ingress.yaml .

这对我有用,所以我相信基于 cookie 的 session 亲和力似乎不适用于 websocket。

在进一步挖掘文档时,它说我可以使用 IP 散列
算法。所以我尝试使用下面的注释。
nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"


这也失败了。请求仍然使用默认算法进行平衡。

如何实现 session 持久性?

最佳答案

我知道过时的帖子,但可能会帮助其他人。您是否删除/注释掉了亲缘关系和 session 注释?

此代码段对我有用,但如果您将其他注释保留在(像您一样,我无法获得基于 cookie 的亲和力来工作,我需要粘性 session ,因为防伪 token 是在我的网络服务本地创建的) )。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-world-ingress
  namespace: nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.org/ssl-services: "hello-world-svc"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/upstream-hash-by: $remote_addr
spec:
  tls:
    - hosts:
      - nginx.mydomain.co.uk
      secretName: tls-certificate
  rules:
  - host: nginx.mydomain.co.uk
    http:
      paths:
      - path: /web1(/|$)(.*)      
        backend:
          serviceName: hello-world-svc
          servicePort: 80

关于websocket - 用于 websocket 应用程序的 nginx-ingress 粘性 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328481/

相关文章:

java - org.eclipse.jetty.util.ssl.SslContextFactory$Client ClassNotFoundException 升级到 Jetty Server 9.4.16

websocket - 如何优化Tornado?

kubernetes - 带有Nginx入口的负载均衡Pod

azure - 为什么 AKS 无法从 ACR 中提取镜像?

azure - 使用 azure secret 提供者类进行 kustomize

azure - Istio Ingress 不起作用 - 仅端口转发起作用

maven - websocket 不能在 tomcat 8 上工作

WebSocket 和 Origin header 字段

Kubernetes nginx ingress + oauth2 外部身份验证超时

kubernetes - nginx 入口 Controller 忽略 css 和 js 文件 - google kuberenetes 引擎