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

树莓派4运行Minikube时Ingress局域网及公网暴露配置咨询

问题场景

我在树莓派4设备上运行Minikube,执行$ minikube addons enable ingress命令启用Ingress组件后,参考公开的YAML配置文件为kubernetes-dashboard创建了对应的Ingress资源,配置内容如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: dashboard.com
    http:
      paths:
      - path: /
        pathType: Exact  
        backend:
          service:
            name: kubernetes-dashboard
            port: 
              number: 80

配置生效后Ingress资源正常创建,分配到的外部IP地址为192.168.49.2。按照公开教程指引,我修改了树莓派的/etc/hosts文件,添加域名解析规则192.168.49.2 dashboard.com。在树莓派本机执行curl dashboard.com可返回预期响应,由于树莓派未安装图形浏览器无法直接查看页面,返回的HTML为Kubernetes Dashboard的标准首页代码。

我的MacBook与树莓派连接在同一台ISP提供的家用路由器下,处于同一局域网,但在MacBook上执行curl dashboard.com、ping 192.168.49.2均请求失败。树莓派与其他局域网设备默认处于192.168.1.x/24网段,已知可能需要配置iptables规则才能允许其他设备访问Ingress服务,在树莓派上执行ip addr show返回的网络接口信息如下:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTIPLE,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:a0:5b:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.x/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::dea6:32ff:fea0:5b17/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTIPLE> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether dc:a6:32:a0:5b:18 brd ff:ff:ff:ff:ff:ff
5: docker0: <NO-CARRIER,BROADCAST,MULTIPLE,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:66:3d:68:77 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:66ff:fe3d:6877/64 scope link 
       valid_lft forever preferred_lft forever
6: br-982a6fd0200b: <BROADCAST,MULTIPLE,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:dd:e3:e1:66 brd ff:ff:ff:ff:ff:ff
    inet 192.168.49.1/24 brd 192.168.49.255 scope global br-982a6fd0200b
       valid_lft forever preferred_lft forever
    inet6 fe80::42:ddff:fee3:e166/64 scope link 
       valid_lft forever preferred_lft forever
54: vetha0ba61f@if53: <BROADCAST,MULTIPLE,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-982a6fd0200b state UP group default 
    link/ether aa:33:e5:14:69:e3 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::a833:e5ff:fe14:69e3/64 scope link 
       valid_lft forever preferred_lft forever
78: veth8ae0efb@if77: <BROADCAST,MULTIPLE,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-982a6fd0200b state UP group default 
    link/ether 6e:7b:d8:21:79:21 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::6c7b:d8ff:fe21:7921/64 scope link 
       valid_lft forever preferred_lft forever
问题解答

1. 同一局域网内其他计算机访问Ingress服务的配置方法

访问失败的核心原因是192.168.49.2是Minikube创建的内部网桥br-982a6fd0200b所属网段的地址,仅在树莓派本机的Minikube网络命名空间内可达,局域网其他设备没有到这个网段的路由,自然无法直接连通。按以下步骤配置即可实现局域网访问:

  • 第一步:在树莓派上开启内核IP转发,执行如下命令:
sysctl -w net.ipv4.ip_forward=1
# 写入配置实现重启永久生效
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  • 第二步:添加iptables转发规则,将树莓派物理网卡eth0(对应192.168.1.x局域网段的接口)收到的80、443端口请求,转发到Ingress控制器的实际监听地址192.168.49.2的对应端口,执行命令:
# 转发HTTP端口流量
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.49.2:80
# 转发HTTPS端口流量
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.49.2:443
# 配置源地址转换保证回包正常
iptables -t nat -A POSTROUTING -d 192.168.49.2/24 -j MASQUERADE

如果需要永久保存iptables规则,安装iptables-persistent包后执行netfilter-persistent save即可。

  • 第三步:在局域网内其他访问设备(比如你的MacBook)上修改本地hosts文件,添加解析规则[树莓派eth0的实际局域网IP] dashboard.com,例如树莓派eth0地址为192.168.1.100,则添加192.168.1.100 dashboard.com。
    配置完成后,局域网设备即可正常访问Kubernetes Dashboard页面。

2. 将Ingress服务暴露到路由器层面实现跨网段访问的操作

跨网段访问不需要直接暴露Minikube内部的192.168.49.2网段,核心是让所有接入路由器的设备都能将访问请求转发到树莓派节点,有两种可落地的方案:

  • 首选方案:直接在路由器后台配置端口映射,将路由器LAN口网关IP(或跨网段可达的IP)的80、443端口,映射到树莓派eth0的局域网IP的80、443端口,配合前面配置的iptables转发规则,所有能连通路由器的设备都可以正常访问服务。如果需要统一域名解析,可以在路由器后台配置本地自定义DNS记录,将dashboard.com解析到路由器LAN口IP,这样所有接入路由器的设备不需要单独修改hosts即可访问。
  • 备选方案:如果路由器支持自定义静态路由,可以添加路由规则将192.168.49.0/24网段的下一跳地址设置为树莓派的eth0 IP,同时放开树莓派iptables的转发过滤规则,所有接入路由器的设备即可直接访问192.168.49.2这个Ingress地址。但部分家用ISP定制路由器没有静态路由配置功能,且该方案会将Minikube内部网段直接暴露到整个局域网,安全性较低,不推荐优先使用。

3. 将Ingress地址加入DMZ实现公网暴露的可行性

直接将192.168.49.2这个Minikube内部地址加入DMZ是完全不可行的。这个IP属于树莓派本地的Docker网桥网段,路由器和该地址不在同一个二层网络,无法直接将流量转发到这个IP上。
可行的公网暴露方案操作如下:

  1. 先按照第一部分的配置,确保树莓派eth0的IP可以正常将80、443端口流量转发到内部Ingress服务
  2. 在路由器后台配置DMZ主机时,直接填写树莓派eth0的局域网IP(192.168.1.x),而非Minikube内部的192.168.49.2。配置完成后所有发送到路由器公网IP的流量都会被转发到树莓派,再通过树莓派上的iptables规则转到Ingress控制器,即可实现公网访问。

注意:直接将服务暴露到公网存在极高安全风险,Kubernetes Dashboard默认没有强认证机制,务必配置身份认证、访问控制规则,不要长期无防护暴露在公网。


内容的提问来源于stack exchange,提问作者Giacomo Gagliano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:30:22