You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Microk8s让Nginx Pod可被同网络其他主机访问?

解决Microk8s NodePort跨网络访问失败的问题

1. 先搞清楚实际分配的NodePort端口

你执行的expose命令里指定的--port 80是集群内部的端口,NodePort会自动分配30000-32767范围内的随机端口,先查清楚这个实际端口:

microk8s kubectl get svc nginx-webserver

看输出里的NODEPORT列,比如30080,后续访问必须用这个端口,不是80。

2. 检查Multipass VM的网络模式

Multipass默认用NAT网络,这种模式下外部机器根本连不上VM,必须改成桥接网络:

2.1 先删旧VM重建

multipass delete <你的VM名称>
multipass purge

2.2 用桥接模式新建VM

找你Windows上的物理网卡名称(控制面板→网络连接里看,比如以太网或Wi-Fi),然后执行:

multipass launch --name microk8s-vm --network "你的物理网卡名称" --mem 4G --disk 20G

2.3 验证VM内部访问正常

进VM里测一下NodePort能不能通:

multipass shell microk8s-vm
curl localhost:<实际NodePort>

能返回Nginx页面就说明VM内部没问题,问题在外部网络或防火墙。

3. 给Windows防火墙加放行规则

Windows防火墙大概率把NodePort端口挡住了,手动加规则:

  • 打开「Windows Defender防火墙」→「高级设置」→「入站规则」→「新建规则」
  • 选「端口」→ 下一步,输入你的NodePort(比如30080),选TCP
  • 允许连接,下一步,按需勾选「域」「专用」「公网」
  • 给规则起个名,比如「放行Microk8s NodePort 30080」,完成

4. 确认Microk8s的NodePort插件已启用

虽然默认是开的,但还是查一下:

microk8s status

看已启用插件里有没有node-port,没有的话执行:

microk8s enable node-port

5. 正确的跨网络访问方式

  • 用VM的IP + NodePort访问:比如http://192.168.1.100:30080(VM IP用multipass list查)
  • 要是想用主机IP访问,得在Windows上加端口转发:
    开管理员PowerShell,执行:
    netsh interface portproxy add v4tov4 listenaddress=<你的主机IP> listenport=<你想对外用的端口> connectaddress=<VM的IP> connectport=<实际NodePort>
    
    比如netsh interface portproxy add v4tov4 listenaddress=192.168.1.50 listenport=8080 connectaddress=192.168.1.100 connectport=30080,这样外部机器访问http://192.168.1.50:8080就到Nginx了。

6. 检查HyperV虚拟交换机设置

如果HyperV用的是自定义虚拟交换机,确保它是外部类型:

  • 打开Hyper-V管理器→虚拟交换机管理器
  • 找到Multipass用的交换机,确认类型是「外部」,并且勾了「允许管理操作系统共享此网络适配器」

内容的提问来源于stack exchange,提问作者Amarnath Jena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:55:27