部署Kubernetes MongoDB StatefulSet时认证失败求助
解决MongoDB StatefulSet认证失败问题
核心问题:认证数据库指定错误
MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 环境变量创建的是root超级用户,该用户默认存储在admin数据库中,而非你配置的ng-db。你当前连接时指定--authenticationDatabase ng-db,导致MongoDB去错误的数据库查找用户,直接引发认证失败。
修正连接命令
执行以下命令,将认证数据库指定为admin:
mongo -u test -ptest --authenticationDatabase admin
其他可能的问题排查
如果修正连接命令后仍然失败,逐一检查以下项:
1. 持久化存储卷存在旧数据
若你的local-storage存储卷之前已有MongoDB数据,容器初始化脚本不会重新执行,导致预设的用户名密码未被创建。解决步骤:
- 删除对应PersistentVolumeClaim:
kubectl delete pvc mongo-persistent-storage-mongo-0 -n ng-mongo - 删除并重新部署StatefulSet:
kubectl delete statefulset mongo -n ng-mongo kubectl apply -f 你的MongoDB配置文件.yaml
2. 确认MongoDB启用认证
检查容器日志,确认启动参数包含--auth:
kubectl logs mongo-0 -c mongo -n ng-mongo
若未找到--auth参数,需在StatefulSet的mongo容器中添加启动命令:
containers: - name: mongo image: mongo command: ["mongod", "--auth"] ports: - containerPort: 27017 # 其余配置保持不变
3. 暂时移除sidecar容器
cvallance/mongo-k8s-sidecar用于MongoDB集群搭建,当前你仅部署单节点副本,可暂时移除该sidecar容器,避免其在初始化阶段干扰MongoDB启动,待认证问题解决后再按需添加。
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

