如何在minikube中直接访问跨命名空间的ingress-nginx服务
问题原因
你遇到的域名解析报错是因为 *.svc.cluster.local 格式的域名是K8s集群内部DNS(CoreDNS)提供解析能力的,仅能在集群内部的Pod网络中访问,你在本地宿主机直接执行curl请求,本地DNS服务无法识别该内部域名,因此抛出无法解析主机的报错。
本地测试Ingress的解决方案
你当前的诉求是本地测试ingress-nginx的规则是否生效,可按以下步骤操作:
步骤1:获取minikube节点IP
执行命令获取minikube的节点地址:
minikube ip
假设输出为 192.168.49.2。
步骤2:临时测试Ingress规则
你的ingress-nginx-controller是NodePort类型,80端口映射到宿主机的30306端口,可直接携带Host头请求测试:
curl -H "Host: ticketing.dev" http://192.168.49.2:30306
如果需要测试HTTPS请求,使用31814端口,加-k参数跳过证书校验:
curl -k -H "Host: ticketing.dev" https://192.168.49.2:31814
步骤3:配置本地hosts实现直接访问
如果需要直接在浏览器输入ticketing.dev访问服务,修改本地hosts文件:
- Linux/macOS:修改
/etc/hosts文件 - Windows:修改
C:\Windows\System32\drivers\etc\hosts文件
在文件末尾添加一行:
192.168.49.2 ticketing.dev
保存后即可直接通过 http://ticketing.dev:30306 访问服务。
可选:无需端口号访问(使用minikube tunnel)
如果不想携带端口号访问,可开启minikube tunnel为Loadbalancer类型服务分配外部IP:
- 新开终端执行命令:
minikube tunnel
- 查看ingress-nginx-controller的EXTERNAL-IP:
kubectl get svc -n ingress-nginx
- 将hosts文件中
ticketing.dev对应的IP修改为上述EXTERNAL-IP,之后即可直接通过http://ticketing.dev访问服务。
集群内部访问Ingress的方案
如果你是需要在集群内部的其他Pod中访问Ingress,直接在Pod内执行请求即可,可使用临时测试Pod验证:
kubectl run -it --rm --image=curlimages/curl curl-test -- curl -H "Host: ticketing.dev" http://ingress-nginx-controller.ingress-nginx.svc.cluster.local
排查校验点
- 执行
kubectl get ingress确认ingress资源状态正常,ADDRESS列有正常输出 - 执行
kubectl get svc确认default命名空间下的auth-srv、client-srv服务正常运行,端口配置为3000
内容的提问来源于stack exchange,提问作者jeepers3327
相关产品推荐
相关产品推荐

