Mongo Kubernetes确保安全

时间:2018-11-06 07:13:17

标签: mongodb kubernetes 3d-secure

我正在尝试在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

1 个答案:

答案 0 :(得分:0)

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

  

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

遵循MongoDB documentation

  

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

     

首先连接到mongod或mongos实例,然后运行   对命令进行身份验证命令或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"]
尽管最安全的方法是使用机密,但因为在环境变量中传递用户名和密码不是最佳实践。 您可以在官方documentation中找到有关机密的更多信息。在Docker Secrets第here章中,还有更多关于Docker的观点。