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

无法从Kubernetes主节点访问Pod NodePort服务,寻求技术支持

问题描述

虚拟机环境中全新部署Kubernetes集群,包含2台CentOS Stream 8节点:

  • 主节点:master-server26(IP:192.168.1.26)
  • 工作节点:worker-server27(IP:192.168.1.27)
    网络配置为桥接模式,Kubernetes版本v1.21.9,Docker版本23.0.0。

部署了Node.js Hello World应用Pod,对应Service为NodePort类型,nodePort设为31500。当前可通过http://192.168.1.27:31500/访问服务,但无法通过http://192.168.1.26:31500/访问。已确认:

  • Kubernetes网络组件无重启记录
  • kube-proxy Pod无报错信息

现有资源状态

Pod列表

NAMESPACE      NAME                                              READY   STATUS    RESTARTS   AGE   IP             NODE              NOMINATED NODE   READINESS GATES
default        helloworldnodejsapp-deployment-86966cfcc5-85dgm   1/1     Running   0          17m   10.244.1.2     worker-server27   <none>           <none>
kube-flannel   kube-flannel-ds-226w7                             1/1     Running   0          24m   192.168.1.27   worker-server27   <none>           <none>
kube-flannel   kube-flannel-ds-4cdhn                             1/1     Running   0          63m   192.168.1.26   master-server26   <none>           <none>
kube-system    coredns-558bd4d5db-ht6sp                          1/1     Running   0          63m   10.244.0.3     master-server26   <none>           <none>
kube-system    coredns-558bd4d5db-wq774                          1/1     Running   0          63m   10.244.0.2     master-server26   <none>           <none>
kube-system    etcd-master-server26                              1/1     Running   0          64m   192.168.1.26   master-server26   <none>           <none>
kube-system    kube-apiserver-master-server26                    1/1     Running   0          64m   192.168.1.26   master-server26   <none>           <none>
kube-system    kube-controller-manager-master-server26           1/1     Running   0          64m   192.168.1.26   master-server26   <none>           <none>
kube-system    kube-proxy-ftsmp                                  1/1     Running   0          63m   192.168.1.26   master-server26   <none>           <none>
kube-system    kube-proxy-xhccg                                  1/1     Running   0          24m   192.168.1.27   worker-server27   <none>           <none>
kube-system    kube-scheduler-master-server26                    1/1     Running   0          64m   192.168.1.26   master-server26   <none>           <none>

节点详情

NAME              STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE          KERNEL-VERSION          CONTAINER-RUNTIME
master-server26   Ready    control-plane,master   70m   v1.21.9   192.168.1.26   <none>        CentOS Stream 8   4.18.0-448.el8.x86_64   docker://23.0.0
worker-server27   Ready    <none>                 30m   v1.21.9   192.168.1.27   <none>        CentOS Stream 8   4.18.0-448.el8.x86_64   docker://23.0.0

Docker配置(/etc/docker/daemon.json)

{
  "exec-opts": ["native.cgroupdriver=systemd"],"dns": ["8.8.8.8", "8.8.4.4","192.168.1.1"]
}

应用部署YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworldnodejsapp-deployment
  labels:
    app: web
spec:
  selector:
    matchLabels:
      app: web
  replicas: 1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: helloworldnodejsapp
          image: "********:helloworldnodejs"
          ports:
           - containerPort: 8010
      imagePullSecrets:
        - name: regcred
---
apiVersion: v1
kind: Service
metadata:
  name: helloworldnodejsapp-svc
  labels:
    app: web
spec:
  type: NodePort
  selector:
      app: web
  ports:
    - port: 8010
      targetPort: 8010
      nodePort: 31500

排查与解决方案

1. 检查主节点防火墙规则

NodePort服务依赖kube-proxy在节点上监听端口,主节点大概率是防火墙未放行31500端口,或拦截了集群相关流量。在master-server26上执行:

# 临时放行31500端口并永久生效
firewall-cmd --add-port=31500/tcp --permanent
firewall-cmd --reload

# 同时确保Kubernetes集群必备端口已放行
firewall-cmd --add-port=6443/tcp --permanent
firewall-cmd --add-port=2379-2380/tcp --permanent
firewall-cmd --add-port=10250/tcp --permanent
firewall-cmd --add-port=10255/tcp --permanent
firewall-cmd --reload

2. 验证主节点kube-proxy转发规则

kube-proxy负责将NodePort流量转发到后端Pod,检查主节点的iptables/ipvs规则是否包含31500端口的转发:

# 查看iptables中31500相关规则
iptables-save | grep 31500

# 若kube-proxy使用ipvs模式,查看ipvs规则
ipvsadm -Ln | grep 31500

如果规则缺失,重启主节点的kube-proxy Pod:

kubectl delete pod kube-proxy-ftsmp -n kube-system

3. 测试主节点到Pod的网络连通性

在master-server26上直接访问Pod的IP(10.244.1.2:8010),验证基础网络是否正常:

curl 10.244.1.2:8010

若无法连通,检查flannel网络日志确认集群网络是否正常:

kubectl logs kube-flannel-ds-4cdhn -n kube-flannel

4. 检查主节点污点与调度配置(可选)

默认master节点会被打污点阻止普通Pod调度,但NodePort服务不需要Pod在master运行,不过若网络策略或路由存在异常,可临时去除污点测试:

# 去除污点
kubectl taint nodes master-server26 node-role.kubernetes.io/master-

# 测试完成后恢复污点(如需)
kubectl taint nodes master-server26 node-role.kubernetes.io/master=:NoSchedule

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:03:19