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

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

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

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

В СУБД ClickHouse, используемой системой, создаются следующие пользователи:

  • owner;

  • writer;

  • reader.

Также в блоке <remote_servers> файла config.xml конфигурации кластера ClickHouse может быть указан другой пользователь, от имени которого выполняются запросы к другим шардам кластера ClickHouse.

Ниже приведена инструкция по изменению паролей этих пользователей.

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

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

    SQL-запрос
    ALTER USER <user> IDENTIFIED BY '<new_password>';

    Здесь:

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

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

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

  3. Если требуется изменить пароль пользователя owner, writer или reader, выполните следующие действия:

    1. Подключитесь к терминалу master-узла кластера.

    2. Получите название ключа ClickHouse в бакете r-space-service-discovery-registry, выполнив команду:

      kubectl exec -n <namespace> deployment/nats-space-box -- nats kv ls r-space-service-discovery-registry

      Здесь:

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

    3. Запишите содержимое ключа 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.

    4. В файле формата 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
              }
            ]
          }
        ]
      }
    5. Загрузите обновленное содержимое ключа 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.

  4. Перезапустите контроллер Deployment evo.space.service-discovery, выполнив команду:

    kubectl -n <namespace> rollout restart deployment evo.space.service-discovery

    Здесь:

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

    Дождитесь перезапуска контроллера.

  5. Перезапустите связанные контроллеры 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:

  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. Выполните запрос для обновления пароля.

    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.streams.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.streams.global.

  7. Перейдите в 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> — имя деплоймента.

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

    kubectl -n <namespace> get pods

    Здесь:

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

Была ли полезна эта страница?

Обратная связь