为什么gke上的nginx ingress控制器只为我构建的docker映像发送503响应?

为什么gke上的nginx ingress控制器只为我构建的docker映像发送503响应?,docker,ubuntu,nginx,kubernetes,google-kubernetes-engine,Docker,Ubuntu,Nginx,Kubernetes,Google Kubernetes Engine,基于本教程,我在我的google云平台集群上部署了nginx ingress控制器: 所有测试映像都可以正常工作,但每当我部署自己的Dockerfile映像时,都会得到503响应 /您好,/咖啡和/茶有测试图像,工作正常 /鲍勃有一张化装的Dockerfile图片 Dockerfile RUN apt-get update RUN apt-get upgrade -y COPY debconf.selections /tmp/ RUN debconf-set-selections /tm

基于本教程,我在我的google云平台集群上部署了nginx ingress控制器: 所有测试映像都可以正常工作,但每当我部署自己的Dockerfile映像时,都会得到503响应

  • /您好,/咖啡和/茶有测试图像,工作正常
  • /鲍勃有一张化装的Dockerfile图片
Dockerfile


RUN apt-get update
RUN apt-get upgrade -y

COPY debconf.selections /tmp/
RUN debconf-set-selections /tmp/debconf.selections

RUN apt-get install -y zip unzip
RUN apt-get install -y \
    php7.0 \
    php7.0-bz2 \
    php7.0-cgi \
    php7.0-cli \
    php7.0-common \
    php7.0-curl \
    php7.0-dev \
    php7.0-enchant \
    php7.0-fpm \
    php7.0-gd \
    php7.0-gmp \
    php7.0-imap \
    php7.0-interbase \
    php7.0-intl \
    php7.0-json \
    php7.0-ldap \
    php7.0-mbstring \
    php7.0-mcrypt \
    php7.0-mysql \
    php7.0-odbc \
    php7.0-opcache \
    php7.0-pgsql \
    php7.0-phpdbg \
    php7.0-pspell \
    php7.0-readline \
    php7.0-recode \
    php7.0-snmp \
    php7.0-sqlite3 \
    php7.0-sybase \
    php7.0-tidy \
    php7.0-xmlrpc \
    php7.0-xsl \
    php7.0-zip
RUN apt-get install apache2 libapache2-mod-php7.0 -y
RUN apt-get install mariadb-common mariadb-server mariadb-client -y
RUN apt-get install postfix -y
RUN apt-get install git nodejs npm composer nano tree vim curl ftp -y
RUN npm install -g bower grunt-cli gulp

ENV LOG_STDOUT **Boolean**
ENV LOG_STDERR **Boolean**
ENV LOG_LEVEL warn
ENV ALLOW_OVERRIDE All
ENV DATE_TIMEZONE UTC
ENV TERM dumb

COPY app/ /var/www/html/
COPY run-lamp.sh /usr/sbin/

RUN a2enmod rewrite
RUN ln -s /usr/bin/nodejs /usr/bin/node
RUN chmod +x /usr/sbin/run-lamp.sh
RUN chown -R www-data:www-data /var/www/html

VOLUME /var/www/html
VOLUME /var/log/httpd
VOLUME /var/lib/mysql
VOLUME /var/log/mysql
VOLUME /etc/apache2

EXPOSE 80
EXPOSE 3306

CMD ["/usr/sbin/run-lamp.sh"]
ingress-resources.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-resource
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /hello
        backend:
          serviceName: hello-app
          servicePort: 8080
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 8080
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 8080
      - path: /bob
        backend:
          serviceName: bobtest-1
          servicePort: 8080

kubectl描述svc bobtest-1

Name:              bobtest-1
Namespace:         default
Labels:            app=bobtest-1
Annotations:       <none>
Selector:          app=bobtest-1
Type:              ClusterIP
IP:                10.12.5.134
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.8.0.15:80
Session Affinity:  None
Events:            <none>

确保入口中定义的
servicePort
bobtest-1
服务中定义的
port
匹配,且服务的
TargetPort
与pod规范中定义的
containerPort
匹配

这里要注意的另一件事是,路径
/bob
可能没有提供任何服务。但是nginx默认情况下会将流量发送到
路径中定义的
/bob
。为了避免这种情况,您可以在入口资源中添加以下注释

nginx.ingress.kubernetes.io/rewrite-target: /
使用此nginx将流量发送到应用程序的根
/
,这意味着当您点击
/bob
时,请求将转到
bobtest-1
,而不是
bobtest-1/bob

使用另一个pod中的curl直接测试服务

kubectl run curl --image=radial/busyboxplus:curl -i --tty

If you don't see a command prompt, try pressing enter.

[ root@curl:/ ]$ curl bobtest-1

kubectl的共享输出描述svc hello-app3-service。Nginx Ingress controller podI的共享日志已删除服务,但我将添加我拥有的旧数据。同时添加pod yaml。吊舱在80或8080端口监听吗?吊舱在80端口监听,服务在8080上公开,并使用新数据更新workingI,以更简单地解释/hello2。它是一个集群,入口中定义的servicePort与hello-app2中定义的端口匹配,服务的TargetPort与pod规范中定义的containerPort匹配。但仍然存在相同的问题。如果您访问服务你好,它能用吗?如果你直接访问hello2后面的播客,它能工作吗?它是一个集群,因此没有来自浏览器的直接链接。即使我为hello3设置了所有相同的值,我也得到了503响应。使用另一个pod中的curl直接在入口将servicePort从8080更改为80和重写目标注释中测试服务
kubectl run curl --image=radial/busyboxplus:curl -i --tty

If you don't see a command prompt, try pressing enter.

[ root@curl:/ ]$ curl bobtest-1