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

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

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

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

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

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

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

    Здесь:

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

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

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

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

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

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

    Здесь:

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

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

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

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

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

    Здесь:

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

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

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

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

  2. Узнайте имя пода PostgreSQL, выполнив команду:

    kubectl get pods -n <namespace> -l app.kubernetes.io/instance=postgresql

    Здесь:

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

  3. Подключитесь к контейнеру пода PostgreSQL, выполнив команду:

    kubectl exec -it -n <namespace> <pod_name> -- sh
    При наличии нескольких контейнеров у пода PostgreSQL добавьте оператор -c <container_name> в команду выше.

    Здесь:

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

    • <pod_name> — имя пода PostgreSQL, полученное на предыдущем шаге.

    • <container_name> — имя контейнера пода 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 evo.core.global, evo.streams.global и evo.infra.global, содержащие пароль PostgreSQL. Для этого выполните следующие действия для каждого секрета:

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

      echo -n <new_password> | base64

      Здесь:

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

    2. Откройте необходимый секрет для редактирования, выполнив команду:

      kubectl -n <namespace> edit secret <secret_name>

      Здесь:

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

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

    3. Замените значение ключа POSTGRES_PASSWORD в блоке data на пароль, закодированный ранее.

    4. Обновите значение ключа POSTGRES_URL. Для этого добавьте новый незакодированный пароль в следующий URL вместо переменной <new_password>:

      postgres://<postgres_user>:<new_password>@<postgres_host>:<postgres_port>

      Здесь:

      • <postgres_user> — декодированное значение ключа POSTGRES_USER.

      • <new_password> — пароль пользователя PostgreSQL.

      • <postgres_host> — декодированное значение ключа POSTGRES_HOST.

      • <postgres_port> — декодированное значение ключа POSTGRES_PORT.

      Пример декодированного значения ключа POSTGRES_URL
      postgres://user:password@postgresql:0000
    5. Закодируйте полученный URL сначала в кодировку URLEncode, а затем в base64. Например, вы можете сделать это с помощью утилиты jq, выполнив команду:

      echo -n 'postgres://<postgres_user>:<new_password>@<postgres_host>:<postgres_port>' | jq -rR '@uri' | base64
    6. Сохраните изменения и закройте конфигурацию секрета.

      Вы можете проверить, что значение ключа было обновлено, с помощью команды:

      kubectl -n <namespace> get secret <secret_name>

      Здесь:

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

      • <secret_name> — название редактируемого секрета.

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

    kubectl -n <namespace> rollout restart deployment/evo.core.access
    kubectl -n <namespace> rollout restart deployment/evo.core.mf-feed
    kubectl -n <namespace> rollout restart deployment/evo.streams.active-list-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.dashboard-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.driver-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.entity-relation-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.event-model-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.event-storage-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.expertise-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.integration-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.query-log-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.secret-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.settings-manager
    kubectl -n <namespace> rollout restart deployment/evo.streams.template-manager

    Здесь:

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

  8. Проверьте состояние подов, контроллеры которых были перезапущены:

    kubectl -n <namespace> get pods

    Здесь:

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

    Названия необходимых подов начинаются с названий их контроллеров.

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

  2. В выпадающем меню свойств кластера выберите пункт Workloads → Pods.

  3. Выберите под PostgreSQL. В правой части экрана откроется карточка управления подом.

    Название пода PostgreSQL начинается с postgresql-, например, postgresql-0.
  4. Нажмите на кнопку Shell на панели управления подом. Откроется вкладка терминала с подключением к поду PosgtreSQL.

  5. Подключитесь к базе данных, выполнив команду:

    psql -U postgres -d auth
  6. Обновите пароль, выполнив SQL-запрос:

    ALTER USER <postgres_user> WITH PASSWORD '<new_password>';

    Здесь:

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

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

    После смены пароля сервисы, использующие PostgreSQL, перестанут работать до обновления секретов в Kubernetes.
  7. Измените секреты Kubernetes evo.core.global, evo.streams.global и evo.infra.global, содержащие пароль PostgreSQL. Для этого выполните следующие действия для каждого секрета:

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

      echo -n <new_password> | base64

      Здесь:

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

    2. В выпадающем меню свойств кластера выберите пункт Config → Secrets.

    3. Найдите секрет evo.core.global в списке и нажмите на него. В правой части экрана откроется карточка с информацией этого секрета.

    4. Нажмите на кнопку Edit на панели управления секретом. Откроется вкладка терминала с конфигурацией секрета.

    5. Замените значение ключа POSTGRES_PASSWORD в блоке data на пароль, закодированный ранее.

    6. Обновите значение ключа POSTGRES_URL. Для этого добавьте новый незакодированный пароль в следующий URL вместо переменной <new_password>:

      postgres://<postgres_user>:<new_password>@<postgres_host>:<postgres_port>

      Здесь:

      • <postgres_user> — декодированное значение ключа POSTGRES_USER.

      • <new_password> — пароль пользователя PostgreSQL.

      • <postgres_host> — декодированное значение ключа POSTGRES_HOST.

      • <postgres_port> — декодированное значение ключа POSTGRES_PORT.

      Пример декодированного значения ключа POSTGRES_URL
      postgres://user:password@postgresql:0000
    7. Закодируйте полученный URL сначала в кодировку URLEncode, а затем в base64. Например, вы можете сделать это с помощью утилиты jq, выполнив команду:

      echo -n 'postgres://<postgres_user>:<new_password>@<postgres_host>:<postgres_port>' | jq -rR '@uri' | base64
    8. Сохраните внесенные изменения в конфигурации секрета.

    9. Повторите вышеперечисленные шаги для изменения пароля в секретах evo.streams.global и evo.infra.global.

  8. Перезапустите связанные контроллеры Deployment. Для этого:

    1. В выпадающем меню свойств кластера выберите пункт Workloads → Deployments.

    2. Найдите следующие контроллеры Deployment:

      • 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.

    3. Откройте карточку каждого контроллера и нажмите на кнопку Restart.

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

  9. В выпадающем меню свойств кластера выберите пункт Workloads → Pods.

  10. Проверьте, что все связанные поды корректно перезапустились.

    Названия подов, связанных с контроллерами Deployment, начинаются с названий этих контроллеров.

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

Для смены пароля в Grafana необходимо:

  1. Подключиться к сервису Grafana локально или открыть доступ для всех пользователей.

  2. Узнать данные для первичного входа.

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

  1. Перейдите по адресу https://<domain_name>/grafana и авторизуйтесь в сервисе c помощью учетных данных.

    Здесь:

    • <domain_name> — доменное имя системы.

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

  3. Выберите опцию Change password. Откроется страница изменения пароля.

  4. Измените пароль в веб-интерфейсе Grafana, введя старый и новый пароль в соответствующие поля.

  5. Измените пароль пользователя в секрете kube-prometheus-stack-grafana. Для этого:

    1. Зашифруйте новый пароль в кодировке base64, например, используя команду:

      • Windows

      • Linux

      Используйте командную оболочку PowerShell:

      [Convert]::ToBase64String([text.Encoding]::UTF8.GetBytes("<new_password>"))
      echo -n <new_password> | base64

      Здесь:

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

    2. Подключитесь к кластеру.

    3. Откройте конфигурацию секрета kube-prometheus-stack-grafana, выполнив команду:

      kubectl edit secret -n kube-prometheus-stack kube-prometheus-stack-grafana
    4. Введите новый пароль в поле admin-password в блоке metadata → data в кодировке base64.

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

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