繁体   English   中英

Kubernetes集群中Django应用的Nginx配置

[英]Nginx config for django app in kubernetes cluster

我在为部署在kubernetes中的django应用程序创建nginx配置文件时遇到困难。 Nginx和app是同一集群中的两个单独的容器。 据我了解,容器可以通过127.0.0.1:XX和主机名相互通信。 我为此使用minikube。 我的应用容器是通过以下文件构建的:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: website
  labels:
    name: website
spec:
  template:
    metadata:
      labels:
        name: website
    spec:
      containers:
        - name: website
          image: killabien/web
          ports:
            - containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
  name: website
  labels:
    name: website
spec:
  type: LoadBalancer
  ports:
    - port: 8000
      targetPort: 8000
  selector:
    name: website

和nginx的:

apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: website
    tier: frontend
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: frontend
spec:
  template:
    metadata:
      labels:
        app: website
        tier: frontend
    spec:
      containers:
        - image: killabien/nginx
          name: nginx

我可以访问应用程序本身(在没有静态文件的情况下提供),但是当我尝试访问nginx时,出现502 Bad Gateway错误。 这是nginx配置文件:

upstream website {
    server 127.0.0.1:8000;

}
server {
    listen 80;
    location /static {
        alias /www/davidbien/static;
    }

   location / {
        proxy_pass http://website;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
}

我尝试将127.0.0.1:8000替换为容器名称(网站)和localhost:8000,但没有任何更改。 我究竟做错了什么?

对于您的特定问题:

  • 容器只有在同一个容器中是两个容器时才可以通过localhost引用(127.0.0.1)相互通信,这不是您的情况-503。
  • 容器位于不同的容器中(如您的示例),但共享相同的名称空间(例如,默认),可以使用服务名称(在您的情况下:网站)相互通信
  • 位于不同名称空间的容器可以使用FQDN进行通信,如service-name.namespace-name.svc.cluster.local(在您的情况下为website.default.svc.cluster.local)。

现在,k8s的理念是:吊舱是部署的单位,而容器是包装的单位。 如果您的nginx和网站始终缩放在一起,那么就需要将它们放在同一个pod中并通过localhost进行通信,就好像它们是同一台计算机上的两个进程一样。 如果您的前端要处理多个网站,并且它们分别扩展,则可以选择选项2或3(通过服务名称或FQDN进行通信)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM