Django、Nginx、uwsgi、Kubernetes:无法将Nginx连接到uwsgi流
我有一个django容器和一个Ngix容器。它们与docker compose配合得很好,现在我正在尝试使用kubernetes的图像。除了nginx容器无法连接到uwsgi上游之外,一切正常。未返回任何响应 以下是我的配置:Django、Nginx、uwsgi、Kubernetes:无法将Nginx连接到uwsgi流,django,docker,kubernetes,uwsgi,Django,Docker,Kubernetes,Uwsgi,我有一个django容器和一个Ngix容器。它们与docker compose配合得很好,现在我正在尝试使用kubernetes的图像。除了nginx容器无法连接到uwsgi上游之外,一切正常。未返回任何响应 以下是我的配置: # Nginx congifuration upstream django { server admin-api-app:8001 max_fails=20 fail_timeout=10s; # for a web port socket (we'll use
# Nginx congifuration
upstream django {
server admin-api-app:8001 max_fails=20 fail_timeout=10s; # for a web port socket (we'll use this first),
}
server {
# the port your site will be served on
listen 80;
server_name server localhost my-website-domain.de;
charset utf-8;
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
}
您可能需要更改django upstream中的主机,因为据我所知,您希望连接到与nginx位于同一pod中的django应用程序,因此请尝试更改:
server admin-api-app:8001 max_fails=20 fail_timeout=10s;
到
编辑:
要使其正常工作,您需要将socket更改为http socket,但这可能会很痛苦/毫无意义,如此处所述:是的,我想连接到容器,但应用程序没有公开任何端口。它更像是一个Unix套接字,这是两个容器通信的方式。至少这是我所知道的关于
uwsgi
你试过登录到那些容器并检查它们是否能够相互连接吗?一些建议:-使用server\u name$host
而不是server\u name server localhost我的网站域。de
-用localhost
替换admin api app
(从Pod中的localhost可以看到您的容器)-强制将您的套接字设置为0.0.0:8001
而不是:8001
-删除uwsgi容器定义中的端口部分。我会尝试一下。我最终将nginx和应用程序放在同一个容器中。这很好,这是一种不好的做法,但我想您已经知道;)我一直这么认为,但在谷歌搜索之后,从我读到的某些来源来看,这似乎并不是一个坏习惯。我介于两者之间,最后意识到这真的很糟糕。我的容器最后会有app+nginx。这听起来不像是一种反模式或糟糕的做法。除非你能试着说服我
# Kubernetes
# Backend Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: container-backend
labels:
app: backend
spec:
replicas: 1
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: container-backend
image: my-djangoimage:latest
command: ["./docker/entrypoint.sh"]
ports:
- containerPort: 8001
name: uwsgi
- name: nginx
image: my-nginx-image:latest
imagePullPolicy: Always
ports:
- containerPort: 80
name: http
---
# Backend Service
kind: Service
apiVersion: v1
metadata:
name: admin-api-app
spec:
selector:
app: backend
ports:
- port: 80
targetPort: 80
type: LoadBalancer
server admin-api-app:8001 max_fails=20 fail_timeout=10s;
server localhost:8001 max_fails=20 fail_timeout=10s;