使用Minikube Ingress时直接访问Minikube IP返回404 NotFound问题
问题原因与解决方案
原因
Ingress Controller 通过请求的Host头匹配路由规则。你的Ingress资源http-ingress仅配置了example.com作为匹配主机名,直接curl Minikube IP192.168.49.2时,请求的Host头是该IP地址,Ingress Controller找不到对应路由规则,因此返回404 NotFound。
而curl example.com能正常访问,是因为/etc/hosts的域名映射让curl自动带上Host: example.com请求头,刚好匹配Ingress的路由规则,所以能正确路由到后端服务。
解决方案
方案1:修改Ingress配置,添加IP作为主机名
编辑现有Ingress资源:
kubectl edit ingress http-ingress
在spec.rules中新增针对Minikube IP的路由规则,指向同一后端服务:
spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: 你的后端服务名称 port: number: 你的后端服务端口 # 新增IP对应的路由规则 - host: 192.168.49.2 http: paths: - path: / pathType: Prefix backend: service: name: 你的后端服务名称 port: number: 你的后端服务端口
保存退出后等待配置生效,再次执行curl 192.168.49.2即可正常访问。
方案2:临时测试时手动指定Host头
如果仅需临时验证,无需修改Ingress配置,可直接在curl命令中手动添加Host头:
curl -H "Host: example.com" 192.168.49.2
该请求会被Ingress Controller识别为针对example.com的请求,从而正常路由到后端服务。
内容的提问来源于stack exchange,提问作者Muha-mmad
相关产品推荐
相关产品推荐

