x509-certificate-exporter#
x509-certificate-exporter - Prometheus-экспортер метрик, предназначенный для мониторинга сроков действия TLS-сертификатов в Kubernetes. Он сканирует файлы, каталоги, Kubeconfig и секреты с сертификатами, извлекает данные об их жизненном цикле и предоставляет метрики для оповещения и визуализации.
Основные задачи и возможности
Мониторинг различных источников сертификатов. Поддерживает:
PEM-файлы по указанным путям;
Каталоги с автоматическим сканированием;
Kubeconfig-файлы (встроенные или ссылающиеся на файлы);
TLS-секреты Kubernetes (
kubernetes.io/tls).
Экспорт метрик в Prometheus. Предоставляет метрики:
x509_cert_not_after- дата окончания срока действия;x509_cert_expired- статус окончания срока действия;x509_read_errors- ошибки чтения файлов или API;Опционально:
x509_cert_expires_in_seconds,x509_cert_valid_since_seconds.
Гибкая фильтрация и настройка. Позволяет:
Включать/исключать пространства имен и секреты по меткам;
Управлять кешированием;
Обрезать пути в метках.
Преднастроенные правила оповещений (например, за 28 дней до истечения срока) и готовая панель Grafana для визуализации.
Примечание
x509-certificate-exporter устанавливается по умолчанию в процессе установки всего кластера DropApp.
Настройка#
По умолчанию инструмент x509-certificate-exporter сконфигурирован на запуск в трех режимах:
Deploymentс именемx509-certificate-exporterследит за секретами в кластере с типомkubernetes.io/tls;Daemonsetс именемx509-certificate-exporter-cpследит за сертификатами в файловой системе control-plane узлов;Daemonsetс именемx509-certificate-exporter-workerследит за сертификатами в файловой системе обычных рабочих узлов (не выделенных).
При наличии выделенных рабочих узлов с определенным nodePool, например ingress, infra, storage и т.п., и есть необходимость следить за сертификатами и на них, добавьте для работы с ними в конфигурацию x509-certificate-exporter:
apiVersion: config.dropapp.ru/v1alpha1
kind: Tool
metadata:
name: x509-certificate-exporter
spec:
values:
hostPathsExporter:
daemonSets:
infra: # пример для рабочих узлов с меткой node-role.kubernetes.io/infra: ""
nodeSelector:
node-role.kubernetes.io/infra: ""
watchFiles:
- /var/lib/kubelet/pki/kubelet-client-current.pem
- /etc/kubernetes/pki/ca.crt
Конфигурация values#
Параметры x509-certificate-exporter можно переопределить через редактирование нужных значений в spec.values. Общее описание конфигурации values для инструментов приведено в разделе «Конфигурации инструментов дополнительных компонентов».
-
nameOverride — частичное переопределение имени шаблона fullname
fullnameOverride — полное переопределение имени для всех ресурсов
namespaceOverride — переопределение пространства имен для развертывания
extraDeploy — дополнительные объекты Kubernetes для развертывания с релизом
extraDeployVerbatim — дополнительные объекты без обработки шаблоном Helm
imagePullSecrets — секреты для доступа к приватным реестрам образов
image — конфигурация контейнерного образа x509-certificate-exporter
migration — настройки миграционных Helm hook Jobs для совместимости версий
exposePerCertificateErrorMetrics — включение метрик ошибок на уровень каждого сертификата
exposeRelativeMetrics — включение метрик с относительными временными интервалами
metricLabelsFilterList — фильтрация меток метрик для снижения кардинальности
secretsExporter — настройки экспортера для мониторинга TLS-Secrets в Kubernetes
hostPathsExporter — настройки DaemonSet для сканирования сертификатов на хост-файловой системе
hostNetwork — включение hostNetwork режима для pod экспортера
webConfiguration — конфигурация HTTP-сервера для TLS и аутентификации
webConfigurationExistingSecret — загрузка конфигурации веб-сервера из секрета
prometheusServiceMonitor — конфигурация ServiceMonitor для Prometheus Operator
prometheusPodMonitor — конфигурация PodMonitor для скрейпинга напрямую с pod
extraVolumeMounts — дополнительные точки монтирования для всех контейнеров pod
psp — настройки Pod Security Policy (устаревшая функциональность)
rbacProxy — настройки kube-rbac-proxy для безопасного экспорта метрик
kubeVersion — переопределение версии Kubernetes для шаблонизации
nameOverride — частичное переопределение имени шаблона fullname#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Частичное переопределение базового имени чарта: добавляется к имени релиза при генерации имен ресурсов |
|
fullnameOverride — полное переопределение имени для всех ресурсов#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Полное переопределение имени для всех создаваемых ресурсов, игнорируя имя релиза и чарта |
|
namespaceOverride — переопределение пространства имен для развертывания#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Явное указание пространства имен для установки ресурсов чарта, переопределяет пространство имен релиза Helm |
|
extraDeploy — дополнительные объекты Kubernetes для развертывания с релизом#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Список дополнительных Kubernetes-манифестов (YAML), которые будут обработаны шаблоном Helm и развернуты с релизом |
|
extraDeployVerbatim — дополнительные объекты без обработки шаблоном Helm#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Список манифестов, которые будут развернуты «как есть», без обработки Helm-шаблонами |
|
imagePullSecrets — секреты для доступа к приватным реестрам образов#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Список имен секретов для аутентификации в приватных |
|
image — конфигурация контейнерного образа x509-certificate-exporter#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Реестр контейнеров для образа экспортера, поддерживает глобальные настройки через Helm-шаблоны |
|
|
Путь к репозиторию образа с поддержкой глобальных переменных для централизованного управления источниками образов |
|
|
Тег образа экспортера. По умолчанию используется версия из |
|
|
Суффикс для выбора варианта образа: |
|
|
Политика загрузки образа: |
|
migration — настройки миграционных Helm hook Jobs для совместимости версий#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Репозиторий образа Kubectl для выполнения миграционных задач в рамках Helm hooks |
|
|
Тег образа Kubectl. При задании переопределяет автоопределение версии кластера |
|
|
|
|
|
Аннотации для pod миграционных |
|
|
Дополнительные метки для pod миграционных задач для селекции и мониторинга |
|
|
Максимальное использование CPU для контейнеров миграционных |
|
|
Лимит памяти для миграционных задач, предотвращающий исчерпание ресурсов узла |
|
|
Гарантированное выделение CPU для запуска миграционных pod |
|
|
Гарантированный объем памяти для стабильного выполнения миграционных задач |
|
|
Требование запуска миграционных pod от не |
|
|
UID пользователя для запуска контейнеров миграционных |
|
|
GID группы для контейнеров миграционных задач |
|
|
Монтирование корневой ФС в режим только для чтения для повышения безопасности |
|
|
Список Linux capabilities для удаления из процесса, минимизирующий поверхность атаки |
|
exposePerCertificateErrorMetrics — включение метрик ошибок на уровень каждого сертификата#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Экспорт отдельных метрик ошибок для каждого сертификата: помогает диагностировать проблемы чтения без анализа логов, но увеличивает кардинальность метрик в Prometheus |
|
exposeRelativeMetrics — включение метрик с относительными временными интервалами#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Экспорт метрик с относительными длительностями вместо абсолютных таймстемпов: не рекомендуется для Prometheus из-за особенностей хранения временных рядов |
|
metricLabelsFilterList — фильтрация меток метрик для снижения кардинальности#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Список разрешенных меток для метрик. Снижение кардинальности может привести к коллизиям метрик и игнорированию сертификатов. Минимум должен включать |
|
grafana — конфигурация панели Grafana как ConfigMap#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание |
|
|
Имя метки для обнаружения |
|
|
Значение метки для фильтрации |
|
|
Аннотации для |
|
|
Дополнительные метки для |
|
secretsExporter — настройки экспортера для мониторинга TLS-Secrets в Kubernetes#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение |
|
|
Дополнительные аннотации для |
|
|
Включение отладочного вывода логов для диагностики проблем сканирования секретов |
|
|
Количество реплик pod экспортера секретов. Обычно достаточно |
|
|
Политика перезапуска pod экспортера: |
|
|
Стратегия обновления |
|
|
Количество старых |
|
|
Максимальное использование CPU для контейнера экспортера секретов |
|
|
Лимит памяти для экспортера, предотвращающий OOM при сканировании большого количества секретов |
|
|
Гарантированное выделение CPU для планирования pod экспортера |
|
|
Гарантированный объем памяти для стабильной работы экспортера |
|
|
Задержка перед первой проверкой готовности экспортера |
|
|
Интервал между повторными проверками |
|
|
Задержка перед первой проверкой жизнеспособности процесса |
|
|
Интервал между проверками |
|
|
Селектор узлов для размещения pod экспортера секретов |
|
|
Допуски для размещения экспортера на узлах с |
|
|
Правила аффинити для оптимизации размещения pod экспортера |
|
|
Класс приоритета для pod экспортера секретов |
|
|
Дополнительные метки для pod экспортера для селекции и мониторинга |
|
|
Аннотации для pod экспортера, например для интеграции с Prometheus |
|
|
Требование запуска pod от не |
|
|
UID пользователя для запуска контейнера экспортера |
|
|
GID группы для контейнера экспортера |
|
|
Монтирование корневой ФС в режим только для чтения |
|
|
Удаление всех Linux capabilities для минимизации поверхности атаки |
|
|
Дополнительные тома для монтирования в pod экспортера (комбинируются с глобальными |
|
|
Дополнительные точки монтирования для контейнеров экспортера |
|
|
Типы секретов и ключи данных для сканирования: по умолчанию |
|
|
Список ключей в |
|
|
Список пространств имен для сканирования. Если не заполнено, используется список со всеми пространствами имен |
|
|
Список исключаемых пространств имен (применяется после |
|
|
Фильтрация пространств имен по меткам: ключи или «ключ=значение» для включения только определенных окружений |
|
|
Исключение пространств имен по меткам для тонкой настройки области сканирования |
|
|
Фильтрация TLS-Secrets по меткам для сканирования только определенных ресурсов |
|
|
Исключение TLS-Secrets по меткам для исключения служебных или тестовых ресурсов |
|
|
Список меток из секретов Kubernetes для экспорта как Prometheus-меток (обогащение метрик) |
|
|
Дополнительные аргументы командной строки экспортера, например |
|
|
Включение кеширования Kubernetes-объектов для предотвращения тайм-аутов при скрейпинге метрик |
|
|
Максимальное время жизни объекта в кеше без обновления (секунды), минимум половина этого значения |
|
|
Включение ограничение на количество запросов ( |
|
|
Максимальная частота запросов к API серверу (в секунду) |
|
|
Размер burst-буфера для запросов к API серверу |
|
|
Дополнительные переменные окружения для контейнера экспортера, например |
|
hostPathsExporter — настройки DaemonSet для сканирования сертификатов на хост-файловой системе#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Дополнительные аннотации для |
|
|
Включение отладочного вывода для всех |
|
|
Пропуск символических ссылок при сканировании файлов и каталогов (не применяется к секретам Kubernetes`) |
|
|
Политика перезапуска pod для всех |
|
|
Стратегия обновления |
|
|
Количество старых версий |
|
|
Максимальное использование CPU для контейнеров экспортера хост-путей |
|
|
Лимит памяти для экспортера, работающего на каждом узле |
|
|
Гарантированное выделение CPU для планирования pod экспортера |
|
|
Гарантированный объем памяти для стабильной работы экспортера на узле |
|
|
Задержка перед первой проверкой готовности экспортера хост-путей |
|
|
Интервал между проверками |
|
|
Задержка перед первой проверкой жизнеспособности процесса |
|
|
Интервал между проверками |
|
|
Селектор узлов для размещения pod экспортера хост-путей (по умолчанию для всех |
|
|
Допуски для размещения экспортера на узлах с |
|
|
Правила аффинити для оптимизации размещения pod (по умолчанию для всех |
|
|
Класс приоритета для pod экспортера хост-путей |
|
|
Дополнительные метки для pod экспортера (по умолчанию для всех |
|
|
Аннотации для pod экспортера (по умолчанию для всех |
|
|
Контекст безопасности на уровне pod для экспортера хост-путей |
|
|
Запуск контейнера в привилегированном режиме для доступа к хост-файловой системе |
|
|
Монтирование корневой ФС в режим только для чтения, несмотря на привилегированный режим |
|
|
Добавление |
|
|
Дополнительные тома для pod экспортера (по умолчанию для всех |
|
|
Дополнительные точки монтирования для контейнеров экспортера (по умолчанию для всех |
|
|
Тип |
|
|
Список каталогов хоста для сканирования PEM-сертификатов (одноуровневое сканирование) |
|
|
Список каталогов для сканирования файлов с определенными расширениями (одноуровневое) |
|
|
Список конкретных файлов хоста с PEM-сертификатами для мониторинга (одноуровневое) |
|
|
Список kubeconfig-файлов хоста для извлечения и мониторинга встроенных сертификатов |
|
|
Дополнительные переменные окружения для контейнеров экспортера хост-путей |
|
|
Селектор для размещения |
|
|
Допуски для размещения на мастер/control-plane узлах с |
|
|
Список файлов сертификатов для мониторинга на control-plane узлах (API server, etcd, front-proxy и др.) |
|
|
Kubeconfig-файлы для мониторинга на control-plane узлах |
|
|
Селектор для размещения |
|
|
Список файлов сертификатов для мониторинга на рабочих узлах (kubelet, CA) |
|
podListenPort — TCP-порт для экспорта метрик из pod#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Порт, на котором экспортер слушает запросы метрик внутри pod (независимо от включения Kube-rbac-proxy) |
|
hostNetwork — включение hostNetwork режима для pod экспортера#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Использование сетевого пространства имен хоста: рекомендуется в случаях, когда Prometheus развернут вне кластера Kubernetes |
|
webConfiguration — конфигурация HTTP-сервера для TLS и аутентификации#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Конфигурация веб-сервера в формате |
|
webConfigurationExistingSecret — загрузка конфигурации веб-сервера из секрета#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Имя секрета с конфигурацией веб-сервера (ключ |
|
service — настройки Kubernetes Service для экспортера#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание |
|
|
Создание |
|
|
Порт сервиса для доступа к метрикам экспортера |
|
|
Аннотации для |
|
|
Дополнительные метки для |
|
prometheusServiceMonitor — конфигурация ServiceMonitor для Prometheus Operator#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание |
|
|
Интервал сбора метрик экспортера |
|
|
Тайм-аут одной попытки сбора метрик |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Правила переименования/фильтрации метрик на этапе сбора (Prometheus relabel config) |
|
|
Правила преобразования меток целевых объектов перед скрейпингом |
|
|
Схема подключения к экспортеру: |
|
|
Пользовательская TLS-конфигурация для безопасного соединения с экспортером |
|
prometheusPodMonitor — конфигурация PodMonitor для скрейпинга напрямую с pod#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание |
|
|
Интервал сбора метрик с pod экспортера |
|
|
Тайм-аут одной попытки сбора метрик с pod |
|
|
Дополнительные метки для |
|
|
Правила преобразования метрик на этапе сбора |
|
|
Правила преобразования меток целевых pod |
|
|
Схема подключения к экспортеру на уровне pod |
|
|
TLS-конфигурация для безопасного скрейпинга с pod |
|
prometheusRules — конфигурация правил оповещений Prometheus для уведомления об истечении сертификатов#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание |
|
|
Включение оповещений |
|
|
Уровень серьезности оповещений о ошибках чтения: |
|
|
Включение оповещений |
|
|
Уровень серьезности оповещений об ошибках сертификатов |
|
|
Уровень серьезности оповещений о необходимости обновления сертификата |
|
|
Уровень серьезности оповещений о скором истечении срока действия сертификата |
|
|
Количество дней до истечения для предупреждающего оповещений (28 дней — стандарт для |
|
|
Количество дней до истечения для критического оповещений ( |
|
|
Дополнительные метки для |
|
|
Дополнительные метки для самих правил оповещений |
|
|
Аннотации для правил оповещений, полезные для интеграции с Alertmanager или внешними системами |
|
|
Префикс для имен правил оповещений для избежания коллизий в multi-chart-окружениях |
|
|
Отключение встроенной группы оповещений при использовании |
|
|
Дополнительные группы правил оповещений для пользовательской конфигурации |
|
extraLabels — дополнительные метки для всех объектов чарта#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Глобальные метки, добавляемые ко всем создаваемым ресурсам чарта для единой селекции и управления |
|
podExtraLabels — дополнительные метки для всех pod#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Метки, добавляемые ко всем pod экспортера для интеграции с мониторингом или сетевыми политиками |
|
podAnnotations — аннотации для всех pod#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Аннотации для всех pod, например |
|
priorityClassName — класс приоритета для всех pod#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Класс приоритета по умолчанию для всех pod экспортера (может быть переопределен в |
|
extraVolumes — дополнительные volumes для всех pod#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Глобальные дополнительные тома для монтирования во все pod экспортера |
|
extraVolumeMounts — дополнительные точки монтирования для всех контейнеров pod#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Глобальные дополнительные |
|
psp — настройки Pod Security Policy (устаревшая функциональность)#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание |
|
rbac — настройки RBAC для контроля доступа экспортера#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание RBAC-объектов ( |
|
|
Имя |
|
|
Аннотации для |
|
|
Аннотации для |
|
|
Аннотации для |
|
|
Имя |
|
|
Аннотации для |
|
|
Аннотации для |
|
|
Аннотации для |
|
rbacProxy — настройки kube-rbac-proxy для безопасного экспорта метрик#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение Kube-rbac-proxy |
|
|
Репозиторий образа Kube-rbac-proxy с поддержкой глобальных настроек |
|
|
Версия образа Kube-rbac-proxy |
|
|
Политика загрузки образа Kube-rbac-proxy |
|
|
Порт, на котором экспортер слушает внутри pod (до Kube-rbac-proxy), Kube-rbac-proxy перенаправляет на |
|
|
Максимальное использование CPU для контейнера kube-rbac-proxy |
|
|
Лимит памяти для Kube-rbac-proxy |
|
|
Гарантированное выделение CPU для Kube-rbac-proxy |
|
|
Гарантированный объем памяти для Kube-rbac-proxy |
|
|
UID пользователя для запуска контейнера Kube-rbac-proxy |
|
|
GID группы для контейнера Kube-rbac-proxy |
|
|
Требование запуска Kube-rbac-proxy от не |
|
|
Монтирование корневой ФС прокси в режим только для чтения |
|
|
Удаление всех Linux capabilities для минимизации поверхности атаки Kube-rbac-proxy |
|
kubeVersion — переопределение версии Kubernetes для шаблонизации#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Явное указание версии Kubernetes для корректной шаблонизации при использовании Helm-шаблонов без подключения к кластеру |
Отсутствует |