Работа с паролями в кластере
При изменении паролей от систем хранения и баз данных нужно поменять соответствующие секреты в Kubernetes (Kubernetes Secrets) — объекты, которые хранят конфиденциальную информацию, такую как пароли и токены. Может также потребоваться перезапуск соответствующих приложений, чтобы они смогли повторно прочитать актуальные данные.
В случае с ClickHouse регистрационные данные обновляются через NATS Key/Value — сервис, который хранит конфигурационные данные и позволяет централизованно управлять паролями и настройками.
Смена пароля пользователя ClickHouse
В СУБД ClickHouse, используемой системой, создаются следующие пользователи:
-
owner;
-
writer;
-
reader.
Также в блоке <remote_servers> файла config.xml конфигурации кластера ClickHouse может быть указан другой пользователь, от имени которого выполняются запросы к другим шардам кластера ClickHouse.
Ниже приведена инструкция по изменению паролей этих пользователей.
Чтобы обновить пароль пользователя ClickHouse:
-
Измените пароль ClickHouse, выполнив следующий запрос в консоли ClickHouse:
SQL-запросALTER USER <user> IDENTIFIED BY '<new_password>';Здесь:
-
<user>— имя пользователя. -
<new_password>— новый пароль.
-
-
Если требуется изменить пароль пользователя, от имени которого выполняются запросы к другим шардам кластера ClickHouse, обновите пароль в блоке
<remote_servers>в конфигурации кластера. -
Если требуется изменить пароль пользователя owner, writer или reader, выполните следующие действия:
-
Подключитесь к терминалу master-узла кластера.
-
Получите название ключа ClickHouse в бакете
r-space-service-discovery-registry, выполнив команду:kubectl exec -n <namespace> deployment/nats-space-box -- nats kv ls r-space-service-discovery-registryЗдесь:
-
<namespace>— название пространства имен, в котором установлена система.
-
-
Запишите содержимое ключа ClickHouse в отдельный файл формата JSON на master-узле, выполнив команду:
kubectl exec -n <namespace> deployment/nats-space-box -- nats kv get r-space-service-discovery-registry <key_name> --raw > <path_to_file>Здесь:
-
<namespace>— название пространства имен, в котором установлена система. -
<key_name>— название ключа, полученное ранее. -
<path_to_file>— путь до файла формата JSON, например,/path/to/config.json.
-
-
В файле формата JSON с содержимым ключа ClickHouse измените значения паролей в следующих полях:
-
"owner_password"; -
"reader_password"; -
"writer_password".
Пример содержимого ключа ClickHouse
{ "name": "clickhouse1", "instances": [ { "address": "click.host", "port": 1001, "meta": { "grpc_port": "1000", "is_tls_enabled": "true", "https_port": "0000", "ca_base_64_string": "base64_e3ncoded_cert=", "owner_password": "password", "reader_password": "password", "writer_password": "password" }, "healthChecks": [ { "id": "evo-clickhouse1-http-api-ping", "url": "http://click.host:0000/ping", "method": "GET", "interval": 10000, "timeout": 1000 } ] } ] } -
-
Загрузите обновленное содержимое ключа ClickHouse, выполнив команду:
kubectl exec -i -n <namespace> deployment/nats-space-box -- nats kv put r-space-service-discovery-registry <key_name> < <path_to_file>Здесь:
-
<namespace>— название пространства имен, в котором установлена система. -
<key_name>— название ключа, полученное ранее. -
<path_to_file>— путь до файла формата JSON, например,/path/to/config.json.
-
-
-
Перезапустите контроллер Deployment
evo.space.service-discovery, выполнив команду:kubectl -n <namespace> rollout restart deployment evo.space.service-discoveryЗдесь:
-
<namespace>— название пространства имен, в котором установлена система.
Дождитесь перезапуска контроллера.
-
-
Перезапустите связанные контроллеры Deployment, выполнив команды:
kubectl -n <namespace> rollout restart deployment evo.streams.event-storage-manager kubectl -n <namespace> rollout restart deployment evo.streams.active-list-manager kubectl -n <namespace> rollout restart deployment evo.streams.query-log-managerЗдесь:
-
<namespace>— название пространства имен, в котором установлена система.
-
Смена пароля PostgreSQL
Чтобы обновить пароль PostgreSQL:
-
Подключитесь к кластеру с помощью Lens.
-
Перейдите в раздел Workloads → Pods.
-
Выберите под PostgreSQL и нажмите на кнопку терминала.
Также вы можете подключиться к контейнеру PostgreSQL с помощью командной строки:
kubectl exec -it -n <namespace> <postgresql_container> -- shЗдесь:
-
<namespace>— название пространства имен, в котором установлена система. -
<postgresql_container>— имя контейнера PostgreSQL.
-
-
Подключитесь к базе данных.
psql -U postgres -d auth -
Выполните запрос для обновления пароля.
SQL-запросALTER USER <postgres_user> WITH PASSWORD '<new_password>';Здесь:
-
<postgres_user>— имя пользователя. -
<new_password>— новый пароль.
После смены пароля сервисы, использующие PostgreSQL, перестанут работать до обновления секретов в Kubernetes. -
-
Поменяйте секреты Kubernetes, содержащие пароль, выполнив следующие действия для каждого секрета:
-
Откройте секрет для редактирования:
kubectl -n <namespace> edit secret <secret_name>Здесь:
-
<namespace>— название пространства имен, в котором установлена система. -
<secret_name>— имя секрета:evo.core.globalиevo.streams.global.
-
-
Закодируйте пароль в Base64, например, командой:
echo -n <new_password> | base64Здесь:
-
<new_password>— новый пароль.
-
-
Замените в секрете значение ключа
POSTGRES_PASSWORDна пароль, закодированный на предыдущем шаге. -
Проверьте, что значение ключа было обновлено, командой:
kubectl -n <namespace> get secret <secret_name>Здесь:
-
<namespace>— название пространства имен, в котором установлена система. -
<secret_name>— имя секрета:evo.core.globalиevo.streams.global.
-
-
-
Перейдите в Workloads → Deployments и перезапустите деплойменты кластера:
-
evo.core.access; -
evo.core.mf-feed; -
evo.streams.active-list-manager; -
evo.streams.dashboard-manager; -
evo.streams.driver-manager; -
evo.streams.entity-relation-manager; -
evo.streams.event-model-manager; -
evo.streams.event-storage-manager; -
evo.streams.expertise-manager; -
evo.streams.integration-manager; -
evo.streams.query-log-manager; -
evo.streams.secret-manager; -
evo.streams.settings-manager; -
evo.streams.template-manager.
Либо выполните в командной строке команду для каждого деплоймента:
kubectl -n <namespace> rollout restart deployment <deployment_name>Здесь:
-
<namespace>— название пространства имен, в котором установлена система. -
<deployment_name>— имя деплоймента.
-
-
Проверьте состояние подов:
kubectl -n <namespace> get podsЗдесь:
-
<namespace>— название пространства имен, в котором установлена система.
-
Была ли полезна эта страница?