0

我正在尝试在 kubernetes 上为我的 mongodb 创建用户名/密码。但似乎 MONGO_INITDB_ROOT_USERNAME/PASSWORD 不起作用或工作不正确,因为我无法使用此凭据登录:

   apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongotest
spec:
  revisionHistoryLimit: 3
  selector:
    matchLabels:
      app: mongotest 
  replicas: 1
  podManagementPolicy: Parallel
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: mongotest
    spec:
      hostname: mongotest
      containers:
      - name: mongotest
        image: mongo
        imagePullPolicy: Always
        restartPolicy: Always
        env:
          - name: "MONGO_DATA_DIR"
            value: "/data/db"
          - name: "MONGO_LOG_DIR"
            value: "/data/logs"  
          - name: MONGO_INITDB_ROOT_USERNAME
            value: test
          - name: MONGO_INITDB_ROOT_PASSWORD
            value: test
          - name: MONGO_INITDB_DATABASE
            value: admin
        lifecycle:
          postStart:
            exec:
              command:
              - /bin/sh
              - -c
              - >
                mongo --eval 'db.auth('test', 'test');db = db.getSiblingDB("admin"); db.createUser({ user: "admin", pwd: "test", roles: [{ role: "root", db: "admin" }]});'
        ports:
        - name: port27017
          containerPort: 27017
4

1 回答 1

0

从评论中收集所有信息:身份验证失败的原因是由于用户名/密码无法识别。删除生命周期部分会起作用,因为它会禁用身份验证,并且用户能够访问 MongoDB 并创建新用户。

如果您不提供这两个变量或不使用您自己的自定义用户设置设置 --auth 标志,则 MongoDB 将不需要身份验证。有关此处描述的功能的更多详细信息,请参阅官方文档中更详细地描述身份验证和授权的部分。

遵循 MongoDB文档

连接到 mongod 或 mongos 实例时,使用 mongo 命令行身份验证选项(--username、--password 和 --authenticationDatabase),或者

首先连接到 mongod 或 mongos 实例,然后针对身份验证数据库运行 authenticate 命令或 db.auth() 方法。

因此,对于 docker,您可以运行以下命令:

docker run -d --name some-mongo -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo

在 Kubernetes 中,因为它具有不同的字符,所以您可以让容器在配置 yaml 中运行特定命令:例如: containers: - image: mongo name: mongoadmin command: ["mongo", "--auth"]
虽然最安全的方法是使用机密,因为在环境变量中传递用户名和密码并不是最佳实践。您可以在官方文档中找到更多关于秘密的信息。在 Docker Secrets 章节中从 Docker 的角度了解更多信息

于 2018-11-06T17:29:40.670 回答