无法从Kubernetes集群中的另一个Pod连接到mongodb

时间:2020-08-21 02:33:47

标签: mongodb kubernetes

有一个运行中的kubernetes集群,其中包含Web服务器,Redis服务器和使用官方docker映像的MongoDB服务器: mongo:4.4.0

我公开了名称为mongodb的MongoDB服务器和名称为redis的Redis服务器:

NAME      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
backend   ClusterIP   172.19.14.124   <none>        7001/TCP    15h
mongodb   ClusterIP   172.19.10.24    <none>        27017/TCP   15h
redis     ClusterIP   172.19.6.203    <none>        6379/TCP    15h

现在,从后端Web服务器,我无法使用mongo --host mongodb连接到MongoDB服务器,但是可以使用redis -h redis连接到Redis。

然后由 kubectl exec -it mongodb-5f4bd8c8d-hbsfx -- bash 检查:

  1. mongo mongodb有效,它已连接到127.0.0.1

  2. mongo 172.19.10.24失败,导致
    Error: couldn't connect to server 172.19.10.24:27017, connection attempt failed: SocketException: Error connecting to 172.19.10.24:27017 :: caused by :: Connection refused :

  3. ping mongodb效果很好。

ps结果来看,它已经绑定了所有内容:

mongodb 1 0.2 2.5 1588248 98272 ? Ssl Aug20 2:02 mongod --bind_ip_all

怎么了?如何解决?谢谢。


更新

命令ss来自吊舱的结果

LISTEN     0        0                  0.0.0.0:27017            0.0.0.0:*        users:(("mongod",pid=1,fd=9))
apiVersion: v1
kind: Service
metadata:
  namespace: tabby
  name: mongodb
  labels:
    app: mongodb
spec:
  ports:
  - port: 27017
    targetPort: 27017
  selector:
    name: mongodb
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: tabby
  name: mongodb
  labels:
    app: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      imagePullSecrets:
      - name: regcred
      containers:
      - name: mongodb
        image: mongo:4.4.0
        ports:
        - containerPort: 27017
        volumeMounts:
        - name: data
          mountPath: /data/db
      volumes:
      - name: data
        emptyDir: {}

1 个答案:

答案 0 :(得分:1)

服务选择器具有name: mongodb,但部署具有app: mongodb标签。由于这种不匹配,服务无法选择吊舱。如果使用Endpoints检查服务的kubectl describe svc mongodb -n tabby部分,由于上述原因,您将看不到任何Pod IP。

按如下所示更改服务。

apiVersion: v1
kind: Service
metadata:
  namespace: tabby
  name: mongodb
  labels:
    app: mongodb
spec:
  ports:
  - port: 27017
    targetPort: 27017
  selector:
    app: mongodb