Rancher默认Ingress访问gvm-gsad服务返回404错误排查求助
Rancher内置Ingress Controller转发返回404问题排查方案
最高概率根因:路径未重写导致后端路由匹配失败
当前Ingress配置的path: /gvm为Prefix匹配规则,Ingress Controller会将完整请求路径(包含/gvm前缀)直接转发给后端gvm-gsad服务,而gvm-gsad默认仅响应根路径/下的请求,收到/gvm路径请求时无对应路由,就会返回404。
修复方案
在Ingress配置中增加路径重写注解,修改后的配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: # 新增路径重写注解,将/gvm前缀后的路径转发到后端根路径 nginx.ingress.kubernetes.io/rewrite-target: /$2 field.cattle.io/publicEndpoints: '[{"addresses":["172.16.12.53"],"port":443,"protocol":"HTTPS","serviceName":"gvm:gvm-gsad","ingressName":"gvm:gvm","hostname":"dtl.miproad.ad","path":"/gvm","allNodes":true}]' creationTimestamp: "2021-11-16T19:22:45Z" generation: 10 name: gvm namespace: gvm resourceVersion: "3508472" uid: e99271a8-8553-45c8-b027-b259a453793c spec: rules: - host: domain.company http: paths: - backend: service: name: gvm-gsad port: number: 80 # 路径规则同步修改,匹配/gvm、/gvm/xxx等形式的请求 path: /gvm(/|$)(.*) pathType: Prefix tls: - hosts: - domain.company status: loadBalancer: ingress: - ip: x.x.x.53 - ip: x.x.x.54 - ip: x.x.x.55 - ip: x.x.x.56
修改后访问https://domain.company/gvm即可正常转发到后端gvm-gsad服务的根路径。
其他异常场景排查
- 校验Ingress Controller流量可达性:你的域名
domain.company解析到的是Rancher服务器x.x.x.51,需确认该节点是否部署了Ingress Controller实例,或是否将K8s集群Ingress Controller的80/443端口映射到x.x.x.51节点,避免请求未到达K8s集群的Ingress Controller。 - 校验TLS配置:确认Ingress中配置的TLS证书和
domain.company匹配,证书对应的Secret已正确创建在gvm命名空间下。 - 校验后端服务路径匹配规则:可执行
kubectl -n gvm port-forward svc/gvm-gsad 8080:80,本地访问http://127.0.0.1:8080/gvm,如果同样返回404即可直接确认是后端服务路径匹配问题。 - 查看Ingress Controller日志:Rancher默认Ingress Controller部署在
cattle-system命名空间下,执行kubectl -n cattle-system logs -l app=nginx-ingress即可查看转发日志,确认请求是否匹配到对应Ingress规则、转发的目标路径是否正确。
内容的提问来源于stack exchange,提问作者Viet Nguyen
相关产品推荐
相关产品推荐

