Работа с паролями в кластере

При изменении паролей от систем хранения и баз данных нужно поменять соответствующие секреты в Kubernetes (Kubernetes Secrets) — объекты, которые хранят конфиденциальную информацию, такую как пароли и токены. Может также потребоваться перезапуск соответствующих приложений, чтобы они смогли повторно прочитать актуальные данные.

В случае с ClickHouse регистрационные данные обновляются через NATS Key/Value — сервис, который хранит конфигурационные данные и позволяет централизованно управлять паролями и настройками.

Смена пароля пользователя ClickHouse

Чтобы обновить пароль пользователя ClickHouse:

  1. Измените пароль ClickHouse, выполнив следующий запрос в консоли ClickHouse:

    Пример 1. SQL-запрос
    ALTER USER <user> IDENTIFIED BY '<new_password>';

    Здесь:

    • <user> — имя пользователя.

    • <new_password> — новый пароль.

  2. Если требуется изменить пароль пользователя writer, обновите пароль в блоке <remote_servers> в конфигурации кластера.

  3. Подключитесь к терминалу управляющего узла кластера.

  4. Подключитесь к терминалу пода nats-main-box, выполнив следующую команду:

    kubectl exec -itn <namespace> deployment/nats-main-box -c nats-box -- sh

    Здесь:

    • <namespace> — имя пространства имен, в котором установлен кластер.

  5. Получите пути к ключам, в которых хранятся пароли ClickHouse, выполнив следующую команду:

    nats kv ls siem-clickhouse
    Пример путей к ключам, в которых хранятся пароли ClickHouse
    space-main/siem-clickhouse1/owner
    space-main/siem-clickhouse1/reader
    space-main/siem-clickhouse1/writer
  6. Измените значение пароля по ключу, где он хранится, выполнив следующую команду:

    nats kv put siem-clickhouse <path_to_key> <new_password>

    Здесь:

    • <path_to_key> — путь к ключу, где хранится пароль.

    • <new_password> — новый пароль.

  7. Проверьте, что пароль изменился, выполнив следующую команду:

    nats kv get siem-clickhouse <path_to_key> --raw

    Здесь:

    • <path_to_key> — путь к ключу, где хранится пароль.

Смена пароля PostgreSQL

Чтобы обновить пароль PostgreSQL:

  1. Подключитесь к кластеру с помощью Lens.

  2. Перейдите в раздел Workloads → Pods.

  3. Выберите под PostgreSQL и нажмите на кнопку терминала.

    Также вы можете подключиться к контейнеру PostgreSQL с помощью командной строки:

    kubectl exec -it -n <namespace> <postgresql_container> -- sh

    Здесь:

    • <namespace> — имя пространства имен, в котором установлен кластер.

    • <postgresql_container> — имя контейнера PostgreSQL.

  4. Подключитесь к базе данных.

    psql -U postgres -d auth
  5. Выполните запрос для обновления пароля.

    Пример 2. SQL-запрос
    ALTER USER <postgres_user> WITH PASSWORD '<new_password>';

    Здесь:

    • <postgres_user> — имя пользователя.

    • <new_password> — новый пароль.

    После смены пароля сервисы, использующие PostgreSQL, перестанут работать до обновления секретов в Kubernetes.
  6. Поменяйте секреты Kubernetes, содержащие пароль, выполнив следующие действия для каждого секрета:

    1. Откройте секрет для редактирования:

      kubectl -n <namespace> edit secret <secret_name>

      Здесь:

      • <namespace> — имя пространства имен, в котором установлен кластер.

      • <secret_name> — имя секрета: evo.core.global и evo.siem.global.

    2. Закодируйте пароль в Base64, например, командой:

      echo -n <new_password> | base64

      Здесь:

      • <new_password> — новый пароль.

    3. Замените в секрете значение ключа POSTGRES_PASSWORD на пароль, закодированный на предыдущем шаге.

    4. Проверьте, что значение ключа было обновлено, командой:

      kubectl -n <namespace> get secret <secret_name>

      Здесь:

      • <namespace> — имя пространства имен, в котором установлен кластер.

      • <secret_name> — имя секрета: evo.core.global и evo.siem.global.

  7. Перейдите в Workloads → Deployments и перезапустите деплойменты кластера:

    • evo.core.access;

    • evo.core.mf-feed;

    • evo.siem.active-list-manager;

    • evo.siem.dashboard-manager;

    • evo.siem.driver-manager;

    • evo.siem.entity-relation-manager;

    • evo.siem.event-model-manager;

    • evo.siem.event-storage-manager;

    • evo.siem.expertise-manager;

    • evo.siem.integration-manager;

    • evo.siem.query-log-manager;

    • evo.siem.secret-manager;

    • evo.siem.settings-manager;

    • evo.siem.template-manager.

    Либо выполните в командной строке команду для каждого деплоймента:

    kubectl -n <namespace> rollout restart deployment <deployment_name>

    Здесь:

    • <namespace> — имя пространства имен, в котором установлен кластер.

    • <deployment_name> — имя деплоймента.

  8. Проверьте состояние подов:

    kubectl -n <namespace> get pods

    Здесь:

    • <namespace> — имя пространства имен, в котором установлен кластер.