Mad*_*die 6 websocket sticky-session azure-aks nginx-ingress
我在 K8s 集群中有一个 websocket .net 应用程序。我需要使用 nginx 开源为 websocket 实现粘性会话。
我已经阅读了 nginx 和 kubernetes 的文档。 https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#session-affinity
它说我们可以使用以下配置进行粘性会话:
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
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。我在这里尝试了 kubernetes 提供的示例代码https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/affinity/cookie/ingress.yaml。
这对我有用,所以我相信基于 cookie 的会话亲和力似乎不适用于 websocket。
在进一步挖掘文档时,它说我可以使用 IP 哈希算法。所以我尝试使用下面的注释。
nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
Run Code Online (Sandbox Code Playgroud)
这也失败了。请求仍然使用默认算法进行平衡。
如何实现会话持久性?
我知道陈旧的帖子,但可能对其他人有帮助。您是否删除/注释了亲和力和会话注释?
此代码片段对我有用,但如果您将其他注释留在其中,则尤其不起作用(像您一样,我无法使基于 cookie 的亲和力发挥作用 - 并且我需要粘性会话,因为防伪令牌是在我的网络服务本地创建的)。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1463 次 |
| 最近记录: |