Minikube下Nginx Ingress路径规则配置及主机浏览器访问问题
Kubernetes Ingress控制器问题解答
问题1:curl --resolve的作用及端口匹配逻辑
curl --resolve的作用:强制curl跳过DNS解析步骤,直接将指定的[主机名]:[端口]映射到目标IP地址。你使用的命令--resolve "nr-demo.com:80:$(minikube ip)",就是告诉curl:当访问nr-demo.com的80端口时,直接连接minikube节点的IP(192.168.64.2),无需查询DNS服务器获取域名对应的IP。- 无需指定端口30691的原因:
你的Ingress控制器通过NodePort暴露服务(端口30691对应容器内的80端口),若你使用了minikube tunnel命令,它会创建负载均衡器,将Ingress控制器的80端口直接映射到minikube节点的80端口。此时curl访问http://nr-demo.com/api(默认使用80端口),会通过tunnel转发到Ingress控制器的容器80端口,因此无需手动指定30691。 - 直接访问
http://192.168.64.2:30691/api返回404的原因:你的Ingress规则明确指定了host: nr-demo.com,Ingress控制器会根据请求的Host头匹配路由规则。直接访问IP时,请求的Host头是192.168.64.2:30691,与规则中的nr-demo.com不匹配,因此无法找到对应后端服务,返回404。
问题2:浏览器中测试的替代方案及同域名多路径可行性
替代curl --resolve的浏览器测试方法
有两种常用方法可以让浏览器模拟curl的--resolve行为:
- 修改本地hosts文件
- 找到本地hosts文件(Windows路径为
C:\Windows\System32\drivers\etc\hosts,Linux/macOS路径为/etc/hosts),添加一行配置:192.168.64.2 nr-demo.com - 若使用了
minikube tunnel,直接在浏览器地址栏输入http://nr-demo.com/api或http://nr-demo.com/即可访问,此时请求的Host头为nr-demo.com,能匹配Ingress规则。 - 未使用
tunnel的话,需要输入http://nr-demo.com:30691/api,通过NodePort访问,hosts文件的映射保证了请求Host头为nr-demo.com。
- 找到本地hosts文件(Windows路径为
- 利用浏览器开发者工具修改请求头
- 打开浏览器开发者工具(快捷键F12),切换到
Network面板,先发起一个测试请求(比如访问http://192.168.64.2:30691/api)。 - 右键该请求,选择“修改并重新发送”(不同浏览器名称可能略有差异),在请求头中添加
Host: nr-demo.com后重新发送,即可匹配Ingress规则。
- 打开浏览器开发者工具(快捷键F12),切换到
同域名多路径测试的可行性
这种方式完全可行。你只需在Ingress规则中添加前端服务的路由配置,示例如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nr-demo-mean-ing spec: rules: - host: nr-demo.com http: paths: - path: /api pathType: Prefix backend: service: name: nr-demo-mean-api-1-svc-np port: number: 8080 - path: / pathType: Prefix backend: service: name: nr-demo-mean-frontend-svc port: number: 80
配置完成后,前后端服务分别对应nr-demo.com/api和nr-demo.com/,属于同一源(域名+端口相同),浏览器不会触发CORS校验,完全符合你的需求。
内容的提问来源于stack exchange,提问作者notaorb
相关产品推荐
相关产品推荐

