解决 Ingress “default backend – 404” 问题

162次阅读
没有评论

问题描述

在运行一个较小的 K3S 集群,使用 Ingress (HAProxy) 配置时,遇到了 “default backend – 404” 错误。他已经设置了 Pods 和 Service,但访问 Ingress 时仍然出现问题。

解决方案

请注意以下操作可能因版本差异而有所不同,务必备份配置文件。

步骤 1:添加 IngressClass

首先,您需要为 Ingress 添加一个 IngressClass。这可以帮助 Kubernetes 识别哪个 Ingress Controller 负责处理特定的 Ingress 规则。

  1. 打开一个文本编辑器,并创建一个名为 haproxy-ingress-class.yaml 的文件。
  2. 将以下内容复制到文件中:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: haproxy
spec:
  controller: haproxy.org/ingress-controller
  1. 保存文件并应用配置:kubectl apply -f haproxy-ingress-class.yaml

步骤 2:更新 Ingress 规则

接下来,您需要更新 Ingress 规则,以便使用正确的 IngressClass。

  1. 打开您的 Ingress 文件(在您的示例中为 notesncrap.yaml)。
  2. 添加一个 annotations 部分,指定正确的 IngressClass。确保 IngressClass 的名称与上一步创建的一致。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: notesncrap
  annotations:
    kubernetes.io/ingress.class: "haproxy"
spec:
  rules:
    - host: k8scrap.selea.se
      http:
        paths:
          - path: /
            backend:
              serviceName: notesncrap
              servicePort: 80
  1. 保存文件并应用配置:kubectl apply -f notesncrap.yaml

步骤 3:验证配置

现在,您的 Ingress 规则应该已经更新并且具有正确的 IngressClass。

  1. 使用 kubectl get ingress 命令检查 Ingress 状态。确保 CLASS 列显示为 haproxy
  2. 确保 HAProxy Ingress Controller 正在运行,并监视日志以查看是否有任何错误。

步骤 4:测试 Ingress

在完成上述步骤后,您可以尝试通过浏览器或 curl 命令访问您的 Ingress 地址。确保您的 DNS 配置正确,将 k8scrap.selea.se 映射到集群的正确 IP 地址。

如果一切正确,您应该能够正确访问您的应用程序。

总结

通过创建适当的 IngressClass 并更新 Ingress 规则的 annotations 部分,您可以解决 “default backend – 404” 错误,确保您的 Ingress 配置被正确地路由到 HAProxy Ingress Controller。

请注意,HAProxy Ingress Controller 配置可能因版本和环境而异,因此如果出现问题,请查阅相关文档以获取更多帮助。

希望这个解决方案能够帮助您解决问题。如有更多疑问,请随时询问!

正文完