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