kubernetes 无法在k8s中使用MONGO_INITDB_ROOT_USERNAME验证Mongodb

rbl8hiat  于 2023-01-04  发布在  Kubernetes
关注(0)|答案(1)|浏览(267)

我在为部署在Kubernetes中的mongodb创建根用户时遇到了问题。
文件说明如下:#v+蒙戈初始化数据库根用户名,蒙戈初始化数据库根密码
这两个变量结合使用,创建一个新用户并设置该用户的密码。该用户在管理员身份验证数据库中创建,并被赋予root角色,即“超级用户”角色。#v-但将这些变量传递给容器并不能进行身份验证。
我已经包括以下部分在我的yaml:

containers:
        - name: mongo
          image: mongo
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: database-storage
              mountPath: /data/db
          env:
            - name: MONGO_INITDB_ROOT_USERNAME
              value: admin
            - name: MONGO_INITDB_ROOT_PASSWORD
              value: pass

当我运行Kubectl描述时,变量实际上是存在的:

Containers:
  mongo:
    Container ID:   docker://ef17595eb5da4f096eed09229dcd7426ae1401e9ed773c5e1ac99ff9045d2ecf
    Image:          mongo
    Image ID:       docker-pullable://mongo@sha256:8bed0be3e86595283d67836e8d4f3f08916184ea6f2aac7440bda496083ab0c8
    Port:           27017/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 23 Nov 2022 22:07:28 +0100
    Ready:          True
    Restart Count:  0
    Environment:
      MONGO_INITDB_ROOT_USERNAME:  admin
      MONGO_INITDB_ROOT_PASSWORD:  pass
    Mounts:
      /data/db from database-storage (rw)

但是,当我登录到pod并尝试进行身份验证时,它失败了。

kc exec -ti pod/database-0 -- mongosh
Current Mongosh Log ID: 637e8c17aa828f64d211fcdb
Connecting to:      mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0
Using MongoDB:      6.0.3
Using Mongosh:      1.6.0

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test> use admin
switched to db admin
admin> db.auth('admin', 'pass')
MongoServerError: Authentication failed.
admin> db.auth(admin, pass)
ReferenceError: admin is not defined
admin> exit

我做错了什么

yjghlzjz

yjghlzjz1#

我遇到了同样的问题,也找不到一个日志文件来显示正在发生的事情,唯一能让用户初始化的方法是使用安装到/docker-entrypoint-initdb.d目录的配置Map。

volumeMounts:
    - mountPath: /docker-entrypoint-initdb.d
      name: mongodb-scripts
      readOnly: true.
  volumes:
  - configMap:
      items:
      - key: ensure-users.js
        path: ensure-users.js
      name: mongodb-configmap
    name: mongodb-scripts

config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: mongodb-configmap
data:
  mongo.conf: |
    storage:
      dbPath: /data/db
  ensure-users.js: |
    const adminDb = db.getSiblingDB('admin');
    adminDb.createUser({user: "test", pwd: "test", roles:[{role: "userAdminAnyDatabase" , db:"admin"}]});

相关问题