问题描述
在运行一个较小的 K3S 集群,使用 Ingress (HAProxy) 配置时,遇到了 “default backend – 404” 错误。他已经设置了 Pods 和 Service,但访问 Ingress 时仍然出现问题。
解决方案
请注意以下操作可能因版本差异而有所不同,务必备份配置文件。
步骤 1:添加 IngressClass
首先,您需要为 Ingress 添加一个 IngressClass。这可以帮助 Kubernetes 识别哪个 Ingress Controller 负责处理特定的 Ingress 规则。
- 打开一个文本编辑器,并创建一个名为
haproxy-ingress-class.yaml
的文件。 - 将以下内容复制到文件中:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: haproxy
spec:
controller: haproxy.org/ingress-controller
- 保存文件并应用配置:
kubectl apply -f haproxy-ingress-class.yaml
步骤 2:更新 Ingress 规则
接下来,您需要更新 Ingress 规则,以便使用正确的 IngressClass。
- 打开您的 Ingress 文件(在您的示例中为
notesncrap.yaml
)。 - 添加一个
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
- 保存文件并应用配置:
kubectl apply -f notesncrap.yaml
步骤 3:验证配置
现在,您的 Ingress 规则应该已经更新并且具有正确的 IngressClass。
- 使用
kubectl get ingress
命令检查 Ingress 状态。确保CLASS
列显示为haproxy
。 - 确保 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 配置可能因版本和环境而异,因此如果出现问题,请查阅相关文档以获取更多帮助。
希望这个解决方案能够帮助您解决问题。如有更多疑问,请随时询问!
正文完