Контейнер Django отклоняет трафик контейнеров nginx

У меня довольно простая установка, один контейнер django в pod и контейнер nginx в другом pod. Я использую nginx, потому что я хочу переместить приложение django в продакшн и мне нужен настоящий веб-сервер, такой как nginx, чтобы поставить ssl-сертификат на сайт.

Проблема в том, что кажется, что django отклоняет весь трафик из контейнера nginx, так как веб-браузер получает ошибку 502 bad gateway error при просмотре localhost, а журналы nginx показывают:

*3 recv() failed (104: Connection reset by peer) while reading response header from upstream

У меня уже есть 127.0.0.1 и localhost, добавленные в разрешенные хосты в настройках django.

Ниже представлен файл kubernetes с конфигурацией nginx, которую я загружаю через config map. Я пробовал около 30 различных конфигураций nginx.conf, это только самая последняя и самая простая.

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
          - containerPort: 80
          volumeMounts:
          - name: test-vol
            mountPath: /etc/nginx/conf.d
            readOnly: True
      volumes: 
      - name: test-vol
        configMap:
          name: nginx-conf
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
  labels:
    app: config
data:
  nginx.conf: |
    server {
      server_name               my-django-svc;
      listen                    80;
      location / {
        proxy_pass              http://my-django-svc:8000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
      }
    }

---
apiVersion: v1
kind: Service
metadata:
  name: my-django-svc
  labels:
    app: web
spec:
  type: LoadBalancer
  ports:
  - port: 8000
  selector:
    app: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  selector:
    matchLabels:
      app: web
      tier: backend
      track: stable
  replicas: 1
  template:
    metadata:
      labels:
        app: web
        tier: backend
        track: stable
    spec:
      containers:
        - name: web
          image: localhost:5000/kubernetes/web
          ports:
            - name: http
              containerPort: 8000
          imagePullPolicy: Always

У меня нет идей, как сузить эту проблему дальше. Я видел, что некоторые другие люди используют wsgi поверх контейнера django, но я не уверен, нужно ли это или какие преимущества.

У меня уже есть 127.0.0.1 и localhost, добавленные к разрешенным хостам

Это неправильная конфигурация для данной установки, поскольку соединение не осуществляется с помощью 127.0.0.1 - оно осуществляется с помощью имени хоста, настроенного в NGINX, например my-django-svc, поэтому вы должны добавить это в параметр allowed_hosts.

ALLOWED_HOSTS = ['my-django-svc']

Вы пытаетесь получить доступ к этому приложению nginx, используя домен my-django-svc, если нет, то уточните, пожалуйста, как server_name example.com в nginx.conf. Если вы не уверены, опустите server_name в nginx.conf файл.

Вернуться на верх