【问题标题】:Django, Nginx, uwsgi, Kubernetes: unable to connect nginx to uwsgi streamDjango、Nginx、uwsgi、Kubernetes:无法将 nginx 连接到 uwsgi 流
【发布时间】:2019-03-03 05:53:48
【问题描述】:

我有一个 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 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;
    }
}

# Uwsgi file
module          = site_module.wsgi

master          = true
processes       = 5
socket          = :8001
enable-threads  = true
vacuum=True

# 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_name $host 代替 server_name server localhost my-website-domain.de - 将 admin-api-app 替换为 localhost(您的容器可以从 Pod 中的本地主机看到) - 强制使用 0.0.0.0:8001 上的套接字:8001 的 - 删除 uwsgi 容器定义中的 ports 部分
  • 谢谢。我会试试的。我最终将 nginx 和应用程序放在同一个容器中。这工作正常
  • 这是不好的做法,但我想你已经知道了 ;)
  • 我一直这么认为,但是在谷歌搜索之后,从我读过的某些来源来看,这似乎并不是一个坏习惯。我介于两者之间,最终意识到这真的很糟糕。我的容器最后会有 app + nginx。这听起来不像是反模式或不好的做法。除非你能说服我否则

标签: django docker kubernetes uwsgi


【解决方案1】:

您可能需要更改 django 上游的主机,因为据我了解,您想连接到位于 nginx 所在 pod 中的 django 应用程序,因此请尝试更改:

server admin-api-app:8001 max_fails=20 fail_timeout=10s;

server localhost:8001 max_fails=20 fail_timeout=10s;

编辑: 要使其正常工作,您需要将套接字更改为 http-socket,但这可能会很痛苦/毫无意义,如下所述:Should I have separate containers for Flask, uWSGI, and nginx?

【讨论】:

  • 是的,我想连接到容器,但应用程序没有暴露任何端口。它更像是一个 Unix 套接字,这就是两个容器应该如何通信的方式。至少这就是我所知道的uwsgi
猜你喜欢
  • 1970-01-01
  • 2015-12-29
  • 2014-05-31
  • 2011-10-10
  • 2011-11-25
  • 2017-04-12
  • 2015-04-30
  • 2020-04-29
  • 2014-02-01
相关资源
最近更新 更多