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

Minikube集群中NodePort模式应用无法访问问题求助

问题:Minikube中NodePort服务无法访问Python应用

我在Minikube集群中部署了Python应用,配置了NodePort类型的Kubernetes服务,但无法通过浏览器或curl访问该应用,连接超时。已知:

  • Deployment和Service的Selector标签一致(app: sample-python-app)
  • ClusterIP模式下服务可正常访问
  • 无法使用云服务,不想采用LoadBalancer模式
  • 测试命令curl http://192.168.49.2:32000/demo -v返回超时错误

配置文件

deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-python-app
  labels:
    app: sample-python-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: sample-python-app
  template:
    metadata:
      labels:
        app: sample-python-app
    spec:
      containers:
      - name: python-app
        image: vishwask22/python-sample-app-demo:v1
        ports:
        - containerPort: 8000

service.yml

apiVersion: v1
kind: Service
metadata:
  name: sample-python-app
spec:
  type: NodePort
  selector:
    app: sample-python-app

  ports:
    - port: 80
      targetPort: 8000
      nodePort: 32000

错误信息

执行curl http://192.168.49.2:32000/demo -v后的输出:

% Total    % Received % Xferd  Average Speed   Time    Time     Time Current
Dload  Upload   Total   Spent    Left  Speed   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 192.168.49.2:32000...   0     0    0     0    0     0      0      0 --:--:--  0:00:20 --:--:--     0* connect to 192.168.49.2 port 32000 failed: Timed out
- Failed to connect to 192.168.49.2 port 32000 after 21036 ms: Couldn't connect to server   0     0    0     0    0     0      0 0 --:--:--  0:00:21 --:--:--     0
- Closing connection 0 curl: (28) Failed to connect to 192.168.49.2 port 32000 after 21036 ms: Couldn't connect to server

解决方案

1. 使用Minikube专用命令访问NodePort服务

Minikube的网络架构和普通K8s集群不同,直接访问节点IP的NodePort可能被网络隔离。执行以下命令自动生成可访问的URL或直接打开浏览器:

minikube service sample-python-app

2. 验证服务与Pod的关联状态

确认服务已正确绑定到运行中的Pod:

kubectl get endpoints sample-python-app

输出中应包含至少两个Pod的IP(对应Deployment的2个副本)。如果为空,再检查Pod标签是否匹配:

kubectl get pods --show-labels

3. 检查本地防火墙设置

本地防火墙可能拦截了32000端口的入站请求,临时放行该端口:

  • Linux:sudo ufw allow 32000/tcp
  • Windows:在Windows Defender防火墙中添加入站规则允许32000端口
  • macOS:sudo pfctl -t com.apple/250.ApplicationFirewall -a 'allow tcp from any to any port 32000' -f

4. 确认应用监听地址

进入Pod内部,验证应用是否监听0.0.0.0而非仅127.0.0.1(仅监听localhost会导致外部无法访问):

kubectl exec -it <pod-name> -- curl localhost:8000/demo

同时检查应用启动命令,确保绑定地址为0.0.0.0:8000(例如Flask应用需设置app.run(host='0.0.0.0', port=8000))。

5. 检查NodePort配置有效性

确认服务的NodePort已正确分配:

kubectl get service sample-python-app

查看NODE_PORT列是否显示32000。如果显示异常,可删除nodePort: 32000配置,让K8s自动分配端口后再尝试访问。


内容的提问来源于stack exchange,提问作者Vishwa S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:27:46