default-http-backend 阻止我点击创建的入口规则

default-http-backend is stopping me to hit the ingress rule created

正在安装 nginx-controller 以公开服务,在安装入口资源后无法访问所需的端口。我说下面的内容失败了,

[root@k8-m smartrem]# kubectl describe ingress ingress-svc
Name:             ingress-svc
Namespace:        default
Address:
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host          Path  Backends
  ----          ----  --------
  auditmee.com
                /swagger-ui.html   springboot-service:8080 (192.168.157.76:8080,192.168.157.77:8080,192.168.250.8:8080)
Annotations:    <none>
Events:         <none>

我看到错误与 default-http-backend 有关,如何创建 default-http-backend 服务。

任何帮助将不胜感激

这个问题有几个部分,我认为需要解决:


  1. 有多个 NGINX Ingress Controllers 可以在 Kubernetes 环境中使用。指定确切使用哪一个肯定有助于故障排除过程,因为它们的内部工作可能存在细微差异,可能会影响您的工作量。

您可以通过以下线程阅读有关此主题(NGINX 基于 Ingress 控制器)的更多信息:

A side note!

I saw you're using this specific Ingress controller as per previous question asked on Whosebug:


  1. 什么是 default-backend

default-backend 简而言之是一个“地方”(Deployment 带有 PodService 那里所有的流量都没有t 匹配 Ingress 资源已发送 (例如未知 path)。

您的 Ingress 资源显示以下消息:

default-http-backend:80 (<error: endpoints "default-http-backend" not found>)

因为它找不到名为 default-http-backendEndpoint(关联的 Service 同名)。要解决此问题,您需要提供此类资源。

此类 default-backend 实施示例:


  1. Ingress 资源,它是 path

至于你的 Ingress 资源。为您正在部署的资源包含 YAML 清单至关重要。其他社区成员更容易看到整体情况和您面临的潜在问题。

由部分:$ kubectl describe ingress ingress-svc可见:

Rules:
  Host          Path  Backends
  ----          ----  --------
  auditmee.com
                /swagger-ui.html   springboot-service:8080 (192.168.157.76:8080,...) 

有一个主机:HOST.com 有一个真正特定的路径(确切地说是文件)。 这样的设置将允许您的客户端只能访问 swagger-ui.html。如果你有一些其他的文件,就没有了:

  • curl http://HOST/swagger-ui.html <-- 200
  • curl http://HOST/super-awesome-icon.png <-- 404

A side note!

Also please check on which protocol HTTP/HTTPS are you serving your resources.

由于我们不知道您的工作量,您可以尝试将 path 设置为 path: /。此规则将允许 HOST 的所有资源请求传递给您的 springboot-service.


我鼓励您查看可用文档以获取更多资源:

我还发现显示 Ingress 控制器的日志在故障排除方面非常有效:

  • $ kubectl logs -n NAMESPACE INGRESS-POD-NAME