Nginx 入口控制器返回 404 Kubernetes

Posted

技术标签:

【中文标题】Nginx 入口控制器返回 404 Kubernetes【英文标题】:Nginx Ingress Controller Returns 404 Kubernetes 【发布时间】:2020-12-05 11:49:09 【问题描述】:

我正在尝试创建一个入口控制器,该控制器指向我通过 NodePort 公开的服务。

这是入口控制器的 yaml 文件(取自 https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/):

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: hello-world.info
    http:
      paths:
      - path: /
        backend:
          serviceName: appName
          servicePort: 80

我可以直接连接到节点端口并显示前端。

请注意,我这样做是因为前端应用程序无法连接到我创建的其他部署,并且我读到入口控制器将能够解决该问题。我还需要添加 nginx 反向代理吗?如果是这样,我会怎么做?我尝试将其添加到 nginx 配置文件中,但没有成功。

location /middleware/ 
      proxy_pass http://middleware/;
   

【问题讨论】:

你得到 404 的 URL 是什么? 感谢您的回复!我从 minikube ip 地址得到 404。我在运行kubectl get ingress 时得到这样的网址 您是否更新了您的hosts 文件? hello-world.info 不起作用,因为它不会被主机解析。 感谢您的回复!我决定跳过使用实际名称,直接进入 ip。会不会是这个问题? 是的。如果是 IP,您需要捕获所有 Ingress。在下面添加我的答案 【参考方案1】:

您必须使用正确的主机名才能到达Ingress 对象中定义的路由。更新您的/etc/hosts 文件或使用curl -H "hello-world.info" localhost 类型命令。或者,您可以删除 host 映射并将所有流量重定向到一个默认服务。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: appName
          servicePort: 80

【讨论】:

成功了!非常感谢!但是,我仍然无法允许此 pod 访问其他 pod。我还需要使用 Nginx 反向代理吗?我该怎么做?谢谢。编辑:作为参考,我的代码中有http://middleware 和其他类似的参考。谢谢您的帮助。我还在学习 K8s。 您需要将其他 pod 暴露为服务,并使用该服务进行通信。就像在这个例子中一样,入口控制器能够与appName 服务通信。将middleware 公开为服务对象,http://middleware 将起作用。 HTH 嗯。我已经设置了一个中间件服务,并且可以从另一个 pod 卷曲(curl http://middleware)它。但是当我在网站上有服务名称时,它说错误名称未解析 我读到这是因为此代码正在浏览器中执行,因此无法访问服务。它是否正确?我该如何解决这个问题? 如果您需要从外部访问服务,例如从您的浏览器,您需要添加另一个 Ingress 路由。您可以使用路径或主机创建另一个 Ingress 对象。检查这个例子:kubernetes.io/docs/concepts/services-networking/ingress/…。获得路径路由后,您可以访问该路径上的服务,例如 localhost/middleware 。不要忘记添加重写注释。

以上是关于Nginx 入口控制器返回 404 Kubernetes的主要内容,如果未能解决你的问题,请参考以下文章

带有证书管理器和 Nginx 入口的 404 质询响应

入口控制器与 api 网关

为啥 nginx 位置返回 404 错误?

nginx 404 返回404 状态码 (非200)

我Nginx服务器设置了404,也能跳转到404但是返回状态码是200?

Nginx:404错误时返回301重定向