Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;在上游找不到主机…”;使用';kubectl apply-f';但在';docker compose up';_Docker_Nginx_Docker Compose_Kubectl_Nginx Upstreams - Fatal编程技术网

&引用;在上游找不到主机…”;使用';kubectl apply-f';但在';docker compose up';

&引用;在上游找不到主机…”;使用';kubectl apply-f';但在';docker compose up';,docker,nginx,docker-compose,kubectl,nginx-upstreams,Docker,Nginx,Docker Compose,Kubectl,Nginx Upstreams,我在docker中有四个图像,它们是两个服务,一个前端和一个反向Proxy 当我使用docker compose up时,它工作正常,服务正在运行 但是当我想使用kubectl应用-f在pod中运行时。日志中/etc/nginx/nginx.conf:11的上游“后端用户:8080”中未找到[emerg]1:host。我对此一无所知 这是我的图片: bmjlearntocode/reverseproxy latest bmjlearntocode/udacity-fronte

我在docker中有四个图像,它们是两个服务,一个前端和一个反向Proxy

当我使用docker compose up时,它工作正常,服务正在运行

但是当我想使用
kubectl应用-f
在pod中运行时。日志中/etc/nginx/nginx.conf:11的上游“后端用户:8080”中未找到[emerg]1:host。我对此一无所知

这是我的图片

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"
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.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
时,它可以工作

下面是反向Proxy部署.ymal

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"
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

我不确定为什么当pod启动时,nginx找不到“后端”,但可以在docker compose up中运行,我认为这是因为后端用户对docker网络而言才有意义。在docker compose文件中定义服务时,您可以通过其名称访问它。显然,您无法访问kubernetes集群中的后端用户:8080,因为它未定义

在kubernetes中,这种访问需要服务资源。此外,您需要其类型为nodeport的入口资源或服务,以便从kubernetes群集外部(例如从您的浏览器)访问应用程序

您可以查看此资源。他们写得很好


您还可以将nginx和后端服务放在同一个pod中,并使用localhost而不是hostname/servicename。所以nginx可以找到上游服务器

当我构建bmjlearntocode/reverseproxy时,这个图像的Dockerfile是
COPY nginx.conf/etc/nginx/nginx.conf
,所以我认为我已经定义了后端服务。但是reverseproxy不知道“后端”是什么。这就是问题所在?不,您没有定义任何类型的服务。后端用户是仅在docker网络中可用的域名。因为它是从docker compose文件自动创建的。当nginx尝试访问后端用户时,它找不到它,因为kubernetes网络没有解析backedn用户名cat。你说得对!没有后端用户pod正在运行,因此reverseproxy服务器找不到它。现在我运行后端用户pod及其服务来使用8080,然后运行reverseproxy pod,它可以工作了。非常感谢你!