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

如何从本地网络访问Kubernetes NodePort服务?Minikube环境问题求助

问题描述

我是Kubernetes新手,在CentOS 9上运行Minikube时,无法从本地网络中的其他机器访问已运行的服务。相关配置及信息如下:

1. mongo-express.yaml配置文件

kind: Deployment
metadata:
  name: mongo-express
  labels:
    app: mongo-express
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo-express
  template:
    metadata:
      labels:
        app: mongo-express
    spec:
      containers:
        - name: mongo-express
          image: mongo-express
          ports:
            - containerPort: 8081
          env:
            - name: ME_CONFIG_MONGODB_ADMINUSERNAME
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongo-root-username
            - name: ME_CONFIG_MONGODB_ADMINPASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret
                  key: mongo-root-password
            - name: ME_CONFIG_MONGODB_SERVER
              valueFrom:
                configMapKeyRef:
                  name: mongodb-configmap
                  key: database_url
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-express-service
spec:
  selector:
    app: mongo-express
  type: NodePort
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 30000

2. 命令输出

执行minikube service mongo-express-service的输出:

|-----------|-----------------------|-------------|---------------------------|
| NAMESPACE |         NAME          | TARGET PORT |            URL            |
|-----------|-----------------------|-------------|---------------------------|
| default   | mongo-express-service |        8081 | http://192.168.49.2:30000 |
|-----------|-----------------------|-------------|---------------------------|

执行kubectl get service的输出:

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes              ClusterIP   10.96.0.1        <none>        443/TCP          4d13h
mongo-express-service   NodePort    10.100.148.37    <none>        8081:30000/TCP   3s
mongodb-service         ClusterIP   10.105.122.101   <none>        27017/TCP        2m30s

3. 网络接口信息

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: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 94:de:80:b8:24:30 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 94:de:80:b8:24:30 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.80/24 brd 192.168.0.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 2601:2c2:502:2f40:d188:581e:2837:cfe7/64 scope global dynamic noprefixroute
       valid_lft 345587sec preferred_lft 345587sec
    inet6 fe80::8763:4506:5db7:afaa/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
4: br-a8f04f55d768: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:f1:0f:7d:cb brd ff:ff:ff:ff:ff:ff
    inet 192.168.49.1/24 brd 192.168.49.255 scope global br-a8f04f55d768
       valid_lft forever preferred_lft forever
    inet6 fe80::42:f1ff:fe0f:7dcb/64 scope link
       valid_lft forever preferred_lft forever

Minikube主机的本地IP为192.168.0.80,主机上可以ping通服务地址192.168.49.2,但本地网络中的其他机器无法ping通或访问该服务。

原因分析

Minikube默认使用Docker驱动时,会创建一个独立的内部网桥(br-a8f04f55d768),对应的网段是192.168.49.0/24,Minikube节点的IP192.168.49.2属于这个内部网段。本地局域网的机器(192.168.0.0/24)没有路由指向这个内部网段,因此无法直接访问192.168.49.2:30000。

解决方案

方法1:使用Minikube Tunnel暴露服务

Minikube Tunnel可以将NodePort服务转发到主机的公网IP,执行以下命令:

minikube tunnel

执行后,服务会绑定到主机的192.168.0.80IP上,其他机器可以通过http://192.168.0.80:30000访问mongo-express服务。注意这个命令需要保持运行,关闭后转发会停止。

方法2:配置主机端口转发(持久化)

在CentOS 9上使用firewalld配置端口转发,将主机的30000端口转发到Minikube节点的30000端口:

  1. 启用firewalld的端口转发功能:
sudo firewall-cmd --add-masquerade --permanent
  1. 添加端口转发规则:
sudo firewall-cmd --add-forward-port=port=30000:proto=tcp:toaddr=192.168.49.2:toport=30000 --permanent
  1. 重新加载firewalld规则:
sudo firewall-cmd --reload

配置完成后,其他机器可以通过http://192.168.0.80:30000访问服务,这个规则是持久化的,重启后依然有效。

方法3:切换Minikube网络驱动为Bridge

如果希望Minikube节点直接加入本地局域网,可以切换到bridge驱动:

  1. 先停止当前Minikube集群:
minikube stop
  1. 删除现有集群(可选,若需保留数据则跳过):
minikube delete
  1. 用bridge驱动启动Minikube:
minikube start --driver=docker --network=bridge

启动后,Minikube节点会获取本地局域网的IP,此时其他机器可以直接通过该IP的30000端口访问服务。


内容的提问来源于stack exchange,提问作者Hasan Humbatov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:35:02