Kubernetes部署上ASP.NET Core的粘性会话

时间:2019-03-14 16:33:49

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

我尝试将具有身份的ASP.NET Core 1应用程序移植到Kubernetes。登录无法正常工作,我遇到了其他错误,例如 The anti-forgery token could not be decrypted 。问题是我正在使用具有三个副本集的部署,以便进一步的请求由不了解反伪造令牌的不同Pod服务。使用$var = '.txt' # [regex]::Escape() yields '\.txt', which ensures # that '.txt' doesn't also match '_txt" 'a_txt a.txt' -replace ('a' + [regex]::Escape($var)), 'a.csv' 可以正常工作。

在同一问题中,我发现了sticky session documentation,似乎可以解决我的问题。 Cookie名称replicas: 3来自我的浏览器工具。

.AspNetCore.Identity.Application

无论在cookie名称上是否带有前导点,该操作均不起作用。我也尝试添加以下注释

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

在具有ASP.NET Core的Kubernetes上允许粘性会话需要什么?

1 个答案:

答案 0 :(得分:0)

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

  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

这按预期工作。

相关问题