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

Kubernetes跨节点Pod通信异常:应用无法连接MongoDB

问题

背景

正在构建Java应用,处于基础设施搭建阶段,持久化层采用MongoDB。

症状

当应用Pod与MongoDB Pod处于同一Node时运行正常;分属不同Node时,应用无法与MongoDB通信。Kubernetes Dashboard显示:4个gateway应用Pod中,2个与Mongo Pod同Node可正常连接,另外2个不同Node的无法连接。

相关配置文件

mongo-db.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-data
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /home/vitor/seguranca/mongo

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc
spec:
  storageClassName: ""
  accessModes:
    - ReadWriteOnce 
  volumeName: mongo-data
  resources:
    requests:
      storage: 1Gi

---

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: mongo
  name: mongo

spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: mongo
      name: mongo-service

    spec:
      volumes:
      - name: "deployment-storage"
        persistentVolumeClaim:
          claimName: "pvc"

      containers:
      - image: mongo
        name: mongo
        ports:
          - containerPort: 27017
        volumeMounts:
          - name: "deployment-storage"
            mountPath: "/data/db"
        
status: {}
---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: mongo
  name: mongo-service
spec:
  ports:
  - port: 27017
    targetPort: 27017
  selector:
    app: mongo
  clusterIP: None

application.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: gateway
  name: gateway
spec:
  replicas: 4
  selector:
    matchLabels:
      app: gateway
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: gateway
    spec:
      containers:

      - image: vitornilson1998/native-micro
        name: native-micro
        env:
        - name: MONGO_CONNECTION_STRING
          value: mongodb://mongo-service:27017 #应用连接MongoDB的配置项
        - name: MONGO_DB
          value: gateway
        resources: {}
        ports:
          - containerPort: 8080
        
status: {}

---

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: gateway-service
  name: gateway-service
spec:
  ports:
  - name: 8080-8080
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: gateway
  type: NodePort
status:
  loadBalancer: {}

解决方案

1. 排查跨Node Pod网络连通性

  • 先获取Mongo Pod的IP:
    kubectl get pods -l app=mongo -o wide
    
  • 进入不同Node的gateway Pod,直接ping Mongo Pod的IP:
    kubectl exec -it <gateway-pod-name> -- ping <mongo-pod-ip>
    
    如果ping不通,说明集群CNI网络插件(如Flannel、Calico)配置异常,导致跨Node Pod无法通信。

2. 检查Node间基础网络

  • 在两个不同Node上,互相ping对方的Node IP,确认Node层面网络连通。
  • 检查Node上的防火墙规则(如iptables、ufw),确保允许Pod网段(通常为CNI指定的专属网段,如10.244.0.0/16)的流量通行。

3. 验证Headless Service的DNS解析

  • 在不同Node的gateway Pod中,解析mongo-service域名:
    kubectl exec -it <gateway-pod-name> -- nslookup mongo-service
    
    若解析失败,检查CoreDNS Pod是否正常运行,或确认Service的Selector与Mongo Pod的Label匹配(当前配置中app: mongo已匹配,可跳过这部分验证)。

4. 确认Mongo容器的监听地址

  • 进入Mongo Pod,查看监听配置:
    kubectl exec -it <mongo-pod-name> -- mongo --eval "db.runCommand({getCmdLineOpts:1})"
    
    确保net.bindIp为0.0.0.0(Mongo镜像默认配置),若为127.0.0.1,需修改Deployment的容器启动参数:
    containers:
    - image: mongo
      name: mongo
      command: ["mongod", "--bind_ip_all"]
      ports:
        - containerPort: 27017
      volumeMounts:
        - name: "deployment-storage"
          mountPath: "/data/db"
    

5. 临时测试:切换为普通ClusterIP Service

  • 修改Mongo Service配置,移除clusterIP: None,转为普通ClusterIP Service:
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: mongo
      name: mongo-service
    spec:
      ports:
      - port: 27017
        targetPort: 27017
      selector:
        app: mongo
    
    重新应用配置后,若不同Node的gateway Pod能正常连接,说明原Headless Service的DNS解析存在异常,但核心问题仍大概率指向网络连通性。

常见修复动作

若确认是CNI网络问题,重新部署对应CNI插件:

  • 以Flannel为例:
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    或按照所使用CNI插件的官方文档重新配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:06:33