我在为kubernetes部署的django应用程序创建nginx配置文件时遇到了困难。 Nginx和app是同一群集中的两个独立容器。根据我的理解,容器可以通过127.0.0.1:XX和主机名相互通信。我正在使用minikube。 我的app容器是从这个文件构建的:
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;
}
}
我尝试用容器名称(网站)和localhost:8000替换127.0.0.1:8000,但没有改变。我做错了什么?
答案 0 :(得分:2)
针对您的具体问题:
现在,k8s的理念是pod是部署的单位,容器是包装的单位。如果您的nginx和网站总是按比例缩放,那么就可以将它们放在同一个pod中并通过localhost进行通信,就好像它们是同一台机器上的两个进程一样。如果您的前端将处理多个网站并且它们单独扩展,则选项2或3(通过服务名称或FQDN进行通信)是有序的。