首页 > 解决方案 > 尝试在 Kubernetes 上的 MongoDB 中创建新用户时连接被拒绝

问题描述

我正在使用带有只读文件系统的自定义 MongoDB 映像,并尝试使用 Kind 在我的 Mac 上本地将其部署到 Kubernetes。下面是我的 statefulset.yaml。我无法运行名为 的自定义脚本mongo-init.sh,该脚本会创建我的数据库用户。Kubernetes 只允许一个入口点,所以我使用它来运行我的 db 启动命令:mongod -f /docker-entrypoint-initdb.d/mongod.conf. 它不允许我在那之后运行另一个命令或脚本,即使我&在最后附加了 a 。我尝试使用,但如果我的第一个命令是初始化命令"/bin/bash/", "-c", "command1", "command2",则不会执行。最后,如果我跳过 mongod 初始化命令,数据库没有启动并运行,我无法连接到它,所以我得到一个连接被拒绝。当我进入容器时,我可以使用 mongo shell 进入数据库command2mongodkubectl execmongo,但我无法查看任何内容或真正执行任何命令,因为我收到unauthorized错误消息。完全失去了这一点,可以使用一些帮助。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  annotations:
  creationTimestamp: null
  labels:
    app: mydb
  name: mongodb
  namespace: mongodb
spec:
  serviceName: "dbservice"
  replicas: 1
  selector:
    matchLabels:
      app: mydb
  template:
    metadata:
      annotations:
      creationTimestamp: null
      labels:
        app: mydb
    spec:
      # terminationGracePeriodSeconds: 10
      imagePullSecrets:
        - name: regcred
      containers:
      - env:
        - name: MONGODB_APPLICATION_USER_PWD
          valueFrom:
            configMapKeyRef:
              key: MONGODB_APPLICATION_USER_PWD
              name: myconfigmap
        - name: MONGO_INITDB_DATABASE
          valueFrom:
            configMapKeyRef:
              key: MONGO_INITDB_DATABASE
              name: myconfigmap
        - name: MONGO_INITDB_ROOT_PASSWORD
          valueFrom:
            configMapKeyRef:
              key: MONGO_INITDB_ROOT_PASSWORD
              name: myconfigmap
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            configMapKeyRef:
              key: MONGO_INITDB_ROOT_USERNAME
              name: myconfigmap
        image: 'localhost:5000/mongo-db:custom'
        command: ["/docker-entrypoint-initdb.d/mongo-init.sh"]
        name: mongodb
        ports:
        - containerPort: 27017
        resources: {}
        volumeMounts:
        - mountPath: /data/db
          name: mongodata
        - mountPath: /etc/mongod.conf
          subPath: mongod.conf
          name: mongodb-conf
          readOnly: true
        - mountPath: /docker-entrypoint-initdb.d/mongo-init.sh
          subPath: mongo-init.sh
          name: mongodb-conf
      initContainers:
        - name: init-mydb
          image: busybox:1.28
          command: ["chown"]
          args: ["-R", "998:998", "/data"]
          volumeMounts:
          - name: mongodata
            mountPath: /data/db
      volumes:
      - name: mongodata
        persistentVolumeClaim:
          claimName: mongo-volume-claim
      - name: mongodb-conf
        configMap:
          name: myconfigmap
          defaultMode: 0777

我这样做时看到的错误消息kubectl logs <podname>

MongoDB shell version v4.4.1
connecting to: mongodb://localhost:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Error: couldn't connect to server localhost:27017, connection attempt failed: SocketException: Error connecting to localhost:27017 (127.0.0.1:27017) :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:374:17
@(connect):2:6
exception: connect failed
exiting with code 1

标签: mongodbkubernetespermissions

解决方案


推荐阅读