Монго Кубернетес обеспечения - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь создать имя пользователя / пароль для моего mongodb на kubernetes. Но, похоже, 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 голосов
/ 06 ноября 2018

Сбор всей информации из комментариев: Причина сбоя аутентификации была из-за нераспознанного имени пользователя / пароля. Удаление раздела жизненного цикла работает, так как отключает аутентификацию, и пользователь может получить доступ к MongoDB и создать новых пользователей.

Если вы не предоставите эти две переменные или не установите --auth пометка с вашей собственной настройкой пользователя, тогда MongoDB не потребует аутентификация. Для более подробной информации о функциональности описаны здесь, пожалуйста, смотрите разделы в официальной документации, которые опишите аутентификацию и авторизацию более подробно.

В соответствии с документацией MongoDB :

Использовать параметры аутентификации командной строки mongo (--username, --password и --authenticationDatabase) при подключении к экземпляру mongod или mongos или

Сначала подключитесь к экземпляру mongod или mongos, а затем запустите команда authenticate или метод db.auth () для база данных аутентификации.

Так что в случае с докером вы можете запустить что-то вроде:

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 в главе «Секреты Docker» здесь .

...