“在上游没有找到主机...”,在使用'kubectl apply -f'时可以在'docker-compose up'中使用]] << [

问题描述 投票:1回答:1
我在docker中有四个映像,这是两个服务,一个前端和一个反向代理。

当我使用docker-compose up时,它可以工作并且服务正在运行。

但是当我想使用kubectl apply -f在pod中运行时。在日志中有

[emerg] 1#1:在/etc/nginx/nginx.conf:11]的上游“ backend-user:8080”中找不到主机。我对此一无所知。

这是我的

图像

bmjlearntocode/reverseproxy latest bmjlearntocode/udacity-frontend local bmjlearntocode/udacity-restapi-user latest bmjlearntocode/udacity-restapi-feed latest
这里是

docker-compose.yaml

version: "3" services: reverseproxy: image: bmjlearntocode/reverseproxy ports: - 8080:8080 restart: always depends_on: - backend-user - backend-feed backend-user: image: bmjlearntocode/udacity-restapi-user volumes: - $HOME/.aws:/root/.aws environment: POSTGRESS_USERNAME: $POSTGRESS_USERNAME POSTGRESS_PASSWORD: $POSTGRESS_PASSWORD POSTGRESS_DB: $POSTGRESS_DB POSTGRESS_HOST: $POSTGRESS_HOST AWS_REGION: $AWS_REGION AWS_PROFILE: $AWS_PROFILE AWS_BUCKET: $AWS_BUCKET JWT_SECRET: $JWT_SECRET URL: "http://localhost:8100" backend-feed: image: bmjlearntocode/udacity-restapi-feed volumes: - $HOME/.aws:/root/.aws environment: POSTGRESS_USERNAME: $POSTGRESS_USERNAME POSTGRESS_PASSWORD: $POSTGRESS_PASSWORD POSTGRESS_DB: $POSTGRESS_DB POSTGRESS_HOST: $POSTGRESS_HOST AWS_REGION: $AWS_REGION AWS_PROFILE: $AWS_PROFILE AWS_BUCKET: $AWS_BUCKET JWT_SECRET: $JWT_SECRET URL: "http://localhost:8100" frontend: image: bmjlearntocode/udacity-frontend:local ports: - "8100:80"
这里是

nginx.conf

worker_processes 1; events { worker_connections 1024; } error_log /dev/stdout debug; http { sendfile on; upstream user { server backend-user:8080; } upstream feed { server backend-feed:8080; } proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; server { listen 8080; location /api/v0/feed { proxy_pass http://feed; } location /api/v0/users { proxy_pass http://user; } } }
当我使用docker-compose up时,它可以工作。

这里是

reverseproxy-deployment.ymal

apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: service: reverseproxy name: reverseproxy spec: replicas: 2 template: metadata: labels: service: reverseproxy spec: containers: - image: bmjlearntocode/reverseproxy name: reverseproxy imagePullPolicy: Always resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "1024Mi" cpu: "500m" ports: - containerPort: 8080 restartPolicy: Always
我不确定为什么Nginx在pod启动时为什么找不到'后端',但是可以在docker-compose up中运行

我在docker中有四个映像,这是两个服务,一个前端和一个反向代理。当我使用docker-compose up时,它可以工作并且服务正在运行。但是当我想使用kubectl时,请应用-...

docker nginx docker-compose kubectl nginx-upstreams
1个回答
0
投票
我认为是因为后端用户仅对docker网络有意义。在docker-compose文件中定义服务时,可以使用其名称访问它。显然,您无法在kubernetes集群中访问backend-user:8080,因为其未定义。

在kubernetes中,您需要使用Service资源进行此类访问。另外,您需要Ingress资源或Service,其类型为nodeport,以便从kubernetes集群外部访问应用程序(例如,从浏览器访问)。

© www.soinside.com 2019 - 2024. All rights reserved.