【问题标题】:Sticky session for ASP.NET Core on Kubernetes deployment用于 Kubernetes 部署的 ASP.NET Core 的粘性会话
【发布时间】:2019-08-05 15:43:25
【问题描述】:

我尝试将带有 Identity 的 ASP.NET Core 1 应用程序移植到 Kubernetes。登录不起作用,我收到了不同的错误,例如 The anti-forgery token could not be decrypted。问题是我正在使用具有三个副本集的部署,以便进一步的请求由不知道防伪令牌的不同 pod 提供服务。使用replicas: 3 就可以了。

在同一个问题中,我找到了sticky session documentation,这似乎是我的问题的解决方案。 cookie 名称.AspNetCore.Identity.Application 来自我的浏览器工具。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-k8s-test
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: ".AspNetCore.Identity.Application"
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: myapp-k8s
    spec:
      containers:
      - name: myapp-app
        image: myreg/myapp:0.1
        ports:
        - containerPort: 80
        env:
        - name: "ASPNETCORE_ENVIRONMENT"
          value: "Production"
      imagePullSecrets:
      - name: registrypullsecret

这不起作用,无论是否在 cookie 名称中使用前导点。我还尝试添加以下注释

kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/session-cookie-hash: sha1

使用 ASP.NET Core 在 Kubernetes 上允许粘性会话需要什么?

【问题讨论】:

    标签: nginx asp.net-core kubernetes kubernetes-ingress kubernetes-deployment


    【解决方案1】:

    发现我犯了两个逻辑错误:

    1. 粘性会话不能以这种方式工作

    我假设 Kubernetes 会查看 cookie 并创建一些 cookie 哈希到 pod 的映射。但相反,会生成另一个会话并将其附加到我们的 http 标头中。 nginx.ingress.kubernetes.io/session-cookie-name 只是那些生成的 cookie 的名称。因此,默认情况下,不需要更改它们。

    1. 正确对象的范围

    注解必须存在于入口,而不是部署(愚蠢的 c&p 错误)

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: myapp-k8s-ingress
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/affinity: "cookie"
        nginx.ingress.kubernetes.io/session-cookie-hash: sha1
    
    spec:
      tls:
      - hosts:
        - myapp-k8s.local
      rules:
      - host: myapp-k8s.local
        http:
          paths:
          - path: /
            backend:
              serviceName: myapp-svc
              servicePort: 80
    

    这按预期工作。

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 2020-04-03
      • 2020-02-25
      • 2021-07-16
      • 1970-01-01
      • 2021-06-03
      • 2021-10-19
      • 2020-11-07
      • 1970-01-01
      相关资源
      最近更新 更多