Контейнер 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
файл.