Монго Кубернетес обеспечения

Я пытаюсь создать имя пользователя / пароль для моего 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 ответ

Сбор всей информации из комментариев. Причиной сбоя аутентификации было нераспознанное имя пользователя / пароль. Удаление раздела жизненного цикла работает, так как отключает аутентификацию, и пользователь может связаться с 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 здесь.

Другие вопросы по тегам