我尝试在kubernetes集群上使用身份验证配置mongo
。
kind: StatefulSet
metadata:
name: mongo
spec:
serviceName: "mongo"
replicas: 1
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongodb
image: mongo:4.0.0
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: "admin"
- name: MONGO_INITDB_ROOT_PASSWORD
# Get password from secret
value: "abc123changeme"
command:
- mongod
- --auth
- --replSet
- rs0
- --bind_ip
- 0.0.0.0
ports:
- containerPort: 27017
name: web
volumeMounts:
- name: mongo-ps
mountPath: /data/db
volumes:
- name: mongo-ps
persistentVolumeClaim:
claimName: mongodb-pvc
当我尝试使用用户名“admin”和密码“abc123changeme”进行身份验证时,我收到了"Authentication failed."
。
我如何配置mongo管理员的用户名和密码(我想从secret获得密码)?
谢谢
5条答案
按热度按时间vdzxcuhz1#
环境变量不起作用的原因是MONGO_INITDB环境变量由docker-entrypoint.sh映像(https://github.com/docker-library/mongo/tree/master/4.0)中的www.example.com脚本使用,但是当您在kubernetes文件中定义'command:'时,您会覆盖该入口点(请参见注解https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/)
请看下面的YML,它是根据我在网上找到的一些例子改编的。
1.我是ClusterRoleBindings的新手,花了一段时间才意识到它们是集群级别的,我知道这似乎是显而易见的(尽管需要提供一个命名空间以使kubectl接受它),但这会导致我的命名空间在每个命名空间之间被覆盖,因此请确保为每个环境创建唯一的名称,以避免在一个命名空间中的部署扰乱另一个命名空间,因为ClusterRoleBinding会在以下情况下被覆盖:在群集中不唯一
1.我按照this example来配置依赖于sleep 5的身份验证,希望在尝试创建adminUser之前守护进程已经启动并运行。我发现这段时间不够长,所以一开始就升级了,因为创建adminUser失败显然会导致连接被拒绝的问题。后来我改变了sleep,用while循环和mongo的ping来测试守护进程,这更简单。
1.如果你在一个container(例如lxc,cgroups,Docker等)中运行mongod,而这个container不能访问系统中所有可用的RAM,你必须将--wiredTigerCacheSizeGB设置为一个小于容器中可用RAM数量的值。确切的数量取决于容器中运行的其他进程。
下面的YML应该会启动并在kubernetes中配置一个mongo副本集,并启用永久存储和身份验证。如果您连接到pod...
mongo shell安装在映像中,所以你应该能够连接到replicaset与...
然后看到您得到rs 0:PRIMARY〉或rs 0:SECONDARY,这表明这两个pod在一个mongo replicateset中。使用rs.conf()从PRIMARY中验证这一点。
yizd12fk2#
假设您创建了一个密码:
下面是从kubernetes yaml文件中的secret获取值的代码片段:
g0czyy6m3#
我发现此问题与www.example.com中的错误有关docker-entrypoint.sh,并且在节点上检测到numactl时会发生此问题。
尝试以下简化代码(它将numactl排除在外):
我提出了一个问题:https://github.com/docker-library/mongo/issues/330
希望它会在某个时候被修复,所以不需要黑客:o)
hs1rzwqc4#
添加以下内容为我解决了问题:
看起来默认设置为**“false”**。
如果使用的是Kubernetes,则可以使用以下命令检查失败原因:
8ljdwjyq5#
这就是对我有效的方法;