Ubuntu 18.04部署minikube后无法访问外部服务与Ingress求助
问题排查与解决方案
核心原因
你本地服务器curl能通是因为minikube的网络仅默认对宿主机(你的Ubuntu服务器)开放路由,公网/局域网外部请求到达你的服务器后,没有被转发到minikube内部的服务入口,所以无法访问。
分场景解决
场景1:使用Ingress方式访问
- 先确认Ingress组件已启用
执行命令检查:minikube addons list | grep ingress
如果输出为disabled,执行启用:minikube addons enable ingress - 配置公网流量转发
你之前单独用Nginx可以正常访问,优先推荐用Nginx做反向代理,配置方式如下:
在你的服务器Nginx配置中新增虚拟主机:
server { listen 80; server_name my-host.com; # 替换成你的实际域名 location / { proxy_pass http://192.168.47.2; # 你的minikube Ingress IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
配置完成后重载Nginx即可,外部访问域名就会被转发到minikube的Ingress入口。
如果不想用Nginx,也可以用iptables做端口转发:
# 开启IP转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p # 配置80端口转发到minikube Ingress IP iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.47.2:80 iptables -t nat -A POSTROUTING -j MASQUERADE
- 确认服务器防火墙/安全组已开放80、443端口。
场景2:使用LoadBalancer/NodePort方式访问
- minikube默认不会给LoadBalancer类型服务分配对外可用的公网IP,需要先启动minikube tunnel:
minikube tunnel --bind-address 0.0.0.0 & - 你已经指定了nodePort为30000,需要确认服务器的30000端口已在防火墙/安全组放行,同时配置端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 30000 -j DNAT --to-destination $(minikube ip):30000 - 外部访问时直接访问
http://你的服务器公网IP:30000即可。
验证步骤
配置完成后,先在本地电脑执行telnet 你的服务器公网IP 对应端口确认端口可达,再用浏览器访问即可。
内容的提问来源于stack exchange,提问作者Yury Aniskou
相关产品推荐
相关产品推荐

