Липкая сессия для ASP.NET Core при развертывании в Kubernetes - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь портировать приложение ASP.NET Core 1 с удостоверением на Kubernetes.Логин не работает, и я получил разные ошибки, такие как Не удалось расшифровать маркер защиты от подделки .Проблема в том, что я использую развертывание с тремя наборами реплик, чтобы последующие запросы обслуживались разными модулями, которые не знают о маркере защиты от подделки.Используя replicas: 3, он работает.

В том же вопросе я нашел липкую сессионную документацию , которая кажется решением моей проблемы.Название 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

Что требуется, чтобы разрешить липкие сеансы в Kubernetes с ASP.NET Core?

1 Ответ

1 голос
/ 14 марта 2019

Обнаружил, что я допустил две логические ошибки:

  1. Липкие сессии не работают таким образом

Я предполагал, что Kubernetes посмотрит в cookie и создаст некоторыеотображение хэшей печенья в стручки.Но вместо этого генерируется другой сеанс и добавляется к нашему заголовку http.nginx.ingress.kubernetes.io/session-cookie-name - это только имя сгенерированного куки.Таким образом, по умолчанию их не нужно менять.

Область действия до правого объекта

Аннотации должны присутствовать на входе, а НЕ при развертывании (глупая ошибка 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

Это работает, как и ожидалось.

...