Куки CSRF не установлены - возможно, заблокированы kubernetes ingress

Я использую Axios в React и Django Rest Framework с dj-rest-auth. После миграции с GCP на Azure и удаления не поддерживаемых django-rest-auth у меня появились новые проблемы с CSRF. Первоначально я удалил django-rest-auth и создал свой собственный LoginView из Django.contrib.auth.views. Заметил, что это также давало ошибку CSRF в разработке. Поэтому я добавил dj-rest-auth, что решило мою проблему локально. Вывел на AKS, но там куки по-прежнему не отображаются. Я подозреваю, что проблема в моем ингрессе, который может установить INGRESSCOOKIE как для бэкенда, так и для фронтенда, но CSRF нет.

Я знаю, что есть миллион тикетов на эту тему, мои настройки Django в порядке, заголовок set-cookie resopnse установлен. Также использую правильные настройки axios, чтобы убедиться, что если куки есть, то они используются для запросов. Проблема на самом деле в том, что set-cookie не проходит, так как он создается в Django.

Я использую контроллер Nginx с TLS на статическом IP и мой ингресс определен следующим образом:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: basic-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.allow-http: "true"
spec:
  tls:
  - hosts:
    - XXXXX
    secretName: tls-secret
  rules:
  - host: XXXXXXXX
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80
      - path: /api/
        pathType: Prefix
        backend:
          service:
            name: backend
            port:
              number: 8080

Проблемы действительно были на входе, но не столько с настройками, сколько с маршрутизацией. Маршрутизация, используемая выше, переписывает цели в / для всех запросов. На моем бэкенде на самом деле есть страница, которая защищена CSRF. Запрос перешел на эту страницу вместо страницы входа. Изменение ингресса на приведенный ниже дало лучшие результаты.


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: basic-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    kubernetes.io/ingress.allow-http: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - XXXXXXXXXX
    secretName: tls-secret
  rules:
  - host: XXXXXX
    http:
      paths:
      - path: /?(.*)
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80
      - path: /api/?(.*)
        pathType: Prefix
        backend:
          service:
            name: backend
            port:
              number: 8080
Вернуться на верх