Компоненты
Коннектор ClickHouse запускает три демона, все они встроены в бинарный файлclicklink:
- Исполнитель поддерживает исходящий командный канал к конечной точке вашего коннектора и применяет команды жизненного цикла, которые ClickHouse Cloud отправляет для управляемых им сервисов в вашем кластере. Это команды создания, масштабирования, остановки и запуска, перезапуска, резервного копирования и удаления резервных копий, удаления, а также одобренные вами обновления платформы. Любое действие — это вызов Kubernetes API. Он не открывает соединений с ClickHouse и не хранит учетные данные для доступа к вашим бакетам или IAM. Он работает только в управляемом режиме.
- Скрапер с фиксированным интервалом читает разрешенный список системных таблиц ClickHouse и буферизует результаты локально. Затем он отправляет их на конечную точку вашего коннектора вместе с метаданными инфраструктуры и сведениями о работоспособности.
- Средство диагностики поддерживает исходящий командный канал к конечной точке вашего коннектора и выполняет диагностику в режиме только для чтения во время активного сеанса поддержки. Вне сеанса оно не выполняет ничего.
clicklink-connector развертывает демонов в выбранном вами пространстве имен (по умолчанию clicklink). Исполнитель — это Развертывание с одной репликой, которое хранит состояние своих команд на постоянном томе. На Linux ВМ демоны работают как юниты systemd clicklink-scraper, clicklink-troubleshooter и clicklink-executor от имени непривилегированного системного пользователя clicklink.
Соединения
Все соединения, которые устанавливает коннектор, являются исходящими. Полный список:
Каждый запрос API содержит заголовок
Authorization с подписью HMAC-SHA256, охватывающей метод, путь, метку времени и хеш тела. Запросы невозможно воспроизвести повторно или изменить при передаче, даже внутри канала TLS.
Для входящих соединений каждый демон открывает один локальный порт health: 8082 для скрапера, 8084 для средства диагностики, 8086 для исполнителя. Этот порт обслуживает /livez, /readyz, /healthz, а также метрики Prometheus демона по адресу /metrics; отдельного порта для метрик нет. Локальный командный API исполнителя привязан только к loopback, и ни один Service его не публикует. Единственный другой слушатель — это включаемый по желанию шлюз сеанса; см. support sessions. ClickHouse Cloud никогда не подключается ни к одному из них.
Жизненный цикл сертификата
Коннектор аутентифицируется на вашей конечной точке с помощью клиентского сертификата, который он получает и обслуживает самостоятельно. Все три демона предъявляют один и тот же сертификат.- Регистрация.
clicklink clctl initлокально генерирует приватный ключ и запрос на подпись сертификата (CSR). В CSR в качестве common name указывается ваш organization ID, а в качестве единственного DNS SAN — хост вашей конечной точки. Приватный ключ никогда не покидает вашу среду. - Первичная выдача.
initотправляет CSR на конечную точку подписи для регистрации/v1/pcm/cert/signс аутентификацией по HMAC. Если для вашей организации уже есть действующий сертификат, конечная точка возвращает отказ с кодом 409. В этом случае CLI подскажет, как продолжить с существующим сертификатом либо заменить его, указав--force. - Автоматическое обновление. Все три демона проверяют срок действия сертификата каждые 12 часов. Когда до истечения остаётся 10 дней, они запрашивают новый сертификат на 30 дней через
/v1/pcm/cert/renew(mTLS плюс HMAC). В Kubernetes обновлённый сертификат записывается обратно в Secretclicklink-mtlsчерез grant RBAC с точным указанием имени; на ВМ каждый демон записывает его в/etc/clicklink/tls. Обновление не требует вмешательства оператора.
api.tls.ca_file (ВМ) или api.tls.caFile (Helm), к этим корневым сертификатам добавляется CA chain из вашего пакета регистрации.
Поток данных
Какие данные покидают вашу среду
- Метрики из системных таблиц, включенных в список разрешённых. По умолчанию скрапер использует
metric_log,asynchronous_metric_log,tables,warningsиserver_settings. Список разрешённых задаётся явной конфигурацией; скрапер не считывает данные за его пределами. - Метаданные инфраструктуры. Данные о сервисах, инфраструктуре и резервных копиях, синхронизируемые через API. Для управляемого сервиса это его состояние, текущее и ожидаемое количество реплик, а также запущенная версия сервера и версия конфигурации.
- Состояние работоспособности и собственные метрики. Статус компонентов и собственные операционные метрики коннектора. Сигнал активности исполнителя также сообщает, подключён ли его командный канал. Он содержит результат последнего обновления платформы, версии компонентов платформы и дайджест последнего применённого им бандла. При установке на виртуальной машине дополнительно сообщается, находится ли его бандл доступа к Kubernetes в состоянии
ok,expiring,expiredили отсутствует. - Результаты выполнения команд. Для каждой команды жизненного цикла, выполняемой исполнителем: прогресс во время сходимости, затем успех или неудача с текстом ошибки в случае сбоя.
- Определения сервисов, которые вы отправляете.
clicklink clctl instances createотправляет идентификатор вашей среды, облако и регион, имя сервиса, имена его бакетов и ARN роли IAM, а также ключ идемпотентности. Также отправляются два хеша пароля пользователяdefault(SHA-256 и двойной SHA-1). - Результаты сеанса поддержки. Результаты диагностики в режиме только для чтения, выполненной во время включённого вами сеанса и маскированной.
Что по умолчанию никогда не покидает ваш контур
- Исходный текст запросов на пути scrape.
system.query_logисключена из набора таблиц, опрашиваемых по умолчанию, поскольку её столбцы с запросами могут содержать литеральные значения, а вместе с ними — PII или секреты. Её повторное добавление — это override на уровне конкретного развёртывания. Список разрешённых таблиц для сеансов по умолчанию всё же включаетsystem.processes, где отображается текст выполняющихся запросов; о том, как его урезать, см. сеансы поддержки. - Данные ваших таблиц и резервные копии. Они остаются в бакетах вашего аккаунта. У исполнителя нет учётных данных для доступа к вашим бакетам, и читать их он не может.
- Учётные данные.
initне записывает учётные данные в файлы конфигурации. ClickHouse хранит только bcrypt-хеши паролей пользователей коннектора, а секреты остаются в Kubernetes Secrets или в файлах на хосте, доступных для чтения только пользователю root. Пароль пользователя default для управляемого сервиса генерируется на вашей стороне и показывается один раз; передаются только его хеши. Ни на пути scrape, ни на пути синхронизации учётные данные не передаются. - Немаскированный вывод средства диагностики. Всё, что возвращает средство диагностики, перед отправкой проходит через шаблоны маскирования (встроенные и ваши собственные). См. сеансы поддержки.
Границы доверия
- Границей является ваша среда. ClickHouse Cloud получает только то, что отправляет коннектор: результаты scrape, сигналы работоспособности и статус, результаты команд, а также то, что возвращает активный сеанс поддержки. Он никогда не инициирует входящее соединение.
- Шлюз сеансов принадлежит вам. Он доступен только внутри вашей среды (через
kubectl port-forwardв Kubernetes или локально на виртуальной машине), если вы сами не откроете его через Ingress. ClickHouse Cloud к нему никогда не подключается. - Доступ к ClickHouse — только для чтения. Пользователи
pcm_scraperиpcm_troubleshooterимеют потабличные grantSELECT, у скрапера дополнительно естьREAD ON REMOTE(необходима дляclusterAllReplicas()) и один grantSYSTEM FLUSH LOGS, выданный только ему. GrantINSERT, DDL или управления пользователями нет. У исполнителя нет пользователя ClickHouse. Точный перечень приведён в модели привилегий. - Скрапер и средство диагностики не могут изменять ваш кластер. Их RBAC формируется через Roles в пространствах имен коннектора и сервиса. Эти Roles предоставляют глаголы только для чтения на ресурсах рабочих нагрузок и доступ по точному имени к собственным Secrets коннектора. Разрешений
exec,deleteилиpatchнет. - Исполнитель изменяет состояние кластера в пространствах имен сервисов от имени
pcm-executor. Он создаёт и удаляет пространства имен с prefix сервиса (по умолчаниюns-) и удаляет поды, чтобы перезапустить их. Внутри этих пространств имен он записывает объекты ClickHouseCluster, Backup и ScalingOverride, а также Secrets, ServiceAccounts и Services, необходимые сервису. Также он записывает Role и RoleBinding, дающие скраперу доступ на чтение. ValidatingAdmissionPolicy запрещает любую запись от этого ServiceAccount за пределами prefix. Исключения, все в его домашнем пространстве имен, — это обновление его собственного токена, ConfigMapclicklink-instance-registry, а в Kubernetes — обновлённый клиентский сертификат в Secret для mTLS. Если политику невозможно вычислить, она срабатывает на запрет. При чтении допуск не выполняется, поэтому чтение этих семейств ресурсов не ограничено prefix. - Платформенные пространства имен исполнитель изменяет только как
pcm-platformи только во время одобренного вами обновления. Командаclicklink clctl platform approveвыпускает токен этой идентичности на 2 часа; он никогда не продлевается. С ним исполнитель может записывать только Развертывания, Services, ConfigMaps, Secrets, Jobs и PodDisruptionBudgets. Пространства имен, CRD, ServiceAccounts, RBAC, конфигурации webhook и допуска, PriorityClasses и StorageClass применяются с вашими учётными данными во время одобрения. См. обновления платформы. - У исполнителя нет учётных данных к вашим бакетам или IAM.
clicklink clctl executor prepareсоздаёт бакеты данных и backup сервиса и его роль IAM.clicklink clctl executor teardownудаляет их. Обе команды выполняются с вашими учётными данными. Роль доверяет только подам этого сервиса, поэтому принять её не могут ни исполнитель, ни ClickHouse. Его единственные облачные вызовы направляются в Amazon ECR и STS. Он выполняет вход в registry, когда синхронизация платформы или создание сервиса загружает чарт. Во время обновления платформы он проверяет образы под ролью pull только для чтения. - Сетевая политика. В Kubernetes чарт формирует для каждого демона NetworkPolicy с запретом по умолчанию. Egress разрешён только к DNS, к CIDR, перечисленным вами для конечной точки коннектора, и к CIDR сервера API Kubernetes. Политики скрапера и средства диагностики дополнительно разрешают доступ к ClickHouse Services в пространствах имен, которыми управляет исполнитель (они отбираются по метке, которую он на них проставляет), или к тем, что вы перечислили по имени. В политике исполнителя правила для ClickHouse нет. Если чарт из пакета платформы находятся в Amazon ECR, добавьте диапазоны ECR и STS (или зеркало вашего registry) в
allowEgressCIDRs. Без них синхронизация не сможет загрузить чарт при использовании принудительно применяющего CNI. Без принудительно применяющего CNI политика неактивна. См. конфигурацию. - Усиление защиты хоста на виртуальных машинах. Юниты работают от имени системного пользователя без возможности входа, с
ProtectSystem=strict,NoNewPrivileges, путями конфигурации только для чтения и включённым режимом FIPS.