从下面的 minikube 部署创建 mongodb,我无法从命令行进行身份验证。
基本上我只想列出所有数据库,因为我怀疑与 mongo-express 的连接存在问题。
我使用
kubectl exec -it mongodb-deployment-6b46455744-gfkzw -- /bin/bash
, 执行到 pod 中
mongo
启动cli
db.auth("username", "password")
给出 MongoServerError: Authentication failed.
即使
printenv
给出
MONGO_INITDB_ROOT_PASSWORD=password
MONGO_INITDB_ROOT_USERNAME=username
有什么帮助吗?
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-deployment
labels:
app: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
- name: ME_CONFIG_MONGODB_ENABLE_ADMIN
value: "true"
---
apiVersion: v1
kind: Service
metadata:
name: mongodb-service
spec:
selector:
app: mongodb
ports:
- protocol: TCP
port: 27017
targetPort: 27017
成功使用
进行连接mongosh --port 27017 --authenticationDatabase \
"admin" -u "myUserAdmin" -p
来自 https://docs.mongodb.com/manual/tutorial/authenticate-a-user/#std-label-authentication-auth-as-user 和 docker hub 页面。
我也遇到了同样的问题。
就我而言,我正在使用启动命令,并且在部署之间我首先强制执行命令
mongod --bind_ip_all
。由于数据库是在没有 --auth
标志的持久卷中创建的,因此它没有创建必要的用户条目。
您需要删除持久卷(以及部署和 Pod)并从头开始重新创建。同时删除启动命令并让它启动脚本。仅当您可以接受丢失数据时才执行此操作。我猜你没有,所以去吧。
或者,如果您想保留数据,请使用 mongodb 打开 pod 的 shell,并按照文档手动添加用户 https://www.mongodb.com/docs/manual/reference/method/db.createUser/ 。由于之前尚未通过
--auth
标志启用身份验证,因此您应该能够在没有凭据的情况下登录。