Инструменты Cilium Hubble#
Hubble#
Hubble — это инструмент для визуализации и мониторинга кластеров DropApp. Он позволяет администраторам кластера просматривать состояние nodes, приложений и сервисов в реальном времени. Hubble также предоставляет возможность создавать графики и диаграммы для анализа работы кластера. Он построен на основе Cilium и eBPF, чтобы обеспечить полную прозрачность связи и поведения сервисов, а также сетевой инфраструктуры.
Hubble позволяет без усилий автоматически обнаруживать граф зависимостей сервисов для кластеров DropApp на уровне L3/L4 и L7, обеспечивая удобную визуализацию и фильтрацию этих потоков данных в виде Service Map.
Метрики Cilium позволяют отслеживать состояние самого Cilium.
Метрики Hubble позволяют отслеживать сетевое поведение pods DropApp, управляемых Cilium, в отношении подключения и безопасности.
Синтаксис и описание метрик Hubble приведены в таблице ниже.
Таблица. Синтаксис и описание метрик Hubble
Синтаксис параметра |
Описание |
|---|---|
|
Все идентификационные метки безопасности Cilium |
|
Имя namespace DropApp |
|
Имя pod DropApp и имя namespace в формате |
|
Короткая версия имени pod DropApp. Обычно это имя развертывания или набора реплик |
|
Имя pod DropApp |
|
Все известные DNS-имена источника или получателя (через запятую) |
|
Адрес IPv4 |
|
Зарезервированная идентификационная метка |
|
Имя рабочей нагрузки модуля DropApp (рабочие нагрузки: Deployment, Statefulset, Daemonset, ReplicationController, CronJob, Job, DeploymentConfig и т. д.) |
|
Имя приложения pod DropApp, полученное из меток pod |
Важными изменениями версии Hubble 0.12.3 относительно 0.10.0 являются:
добавлено новое отображение направления трафика для событий policy verdict в выходных данных
-o compact;удален устаревший форматер JSON, и теперь всегда используется более гибкий формат вывода
jsonpbна основе proto3, когда в качестве выходного формата выбран JSON;добавлена поддержка событий SockLB;
добавлена команда списков Hubble namespaces - API Hubble Observer поддерживает
GetNamespaces, появилась возможность реализация команды в Hubble CLI;добавлена поддержка предоставления базовых учетных данных для проверки подлинности;
добавлена замена стандартного ввода на флаг
--flows-file, который поддерживает чтение потоков из файла или стандартного ввода.
Предварительные условия#
Предварительные условия развертывания Cilium:
развернут кластер DropApp;
установлен kubectl;
установлен helm.
Развертывание Cilium#
Чтобы развернуть Cilium с включенными метриками Hubble, запустите Hubble с помощью команды hubble.enabled=true и предоставьте набор метрик Hubble через hubble.metrics.enabled:
helm install Cilium Cilium/Cilium --version 1.13.2 \
--namespace kube-system \
--set prometheus.enabled=true \
--set operator.prometheus.enabled=true \
--set hubble.enabled=true \
--set hubble.metrics.enableOpenMetrics=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,port-distribution,icmp,HTTPV2:exemplars=true;labelsContext=source_ip\,source_namespace\,source_workload\,destination_ip\,destination_namespace\,destination_workload\,traffic_direction}"
Hubble export stdout#
Hubble Exporter - это функция Cilium-agent, которая позволяет записывать потоки данных Hubble в файл для последующего использования в виде журналов. Hubble Exporter поддерживает ротацию файлов, ограничения по размеру, фильтры и маски полей.
Hubble export stdout записывает события Hubble в стандартные потоки вывода данных -
stdout.
Установка#
Hubble Exporter включается с помощью свойств ConfigMap. Он отключен, пока не будет задано
значение пути к файлу для параметра hubble-export-file-path.
Используйте Helm для установки Cilium с включенным Hubble Exporter:
helm install Cilium ./Cilium \ --set hubble.enabled=true \ --set hubble.export.static.enabled=true \ --set hubble.export.static.filePath=/var/run/Cilium/hubble/events.logДождитесь готовности
Ciliumpod:kubectl -n kube-system rollout status ds/CiliumУбедитесь, что журналы потоков хранятся в целевых файлах:
kubectl -n kube-system exec ds/Cilium -- tail -f /var/run/Cilium/hubble/events.log
После настройки Hubble Exporter можно настроить решение для ведения журнала таким образом, чтобы оно использовало журналы из пути к файлу экспорта Hubble.
Чтобы отключить статическую настройку, удалите ключ hubble-export-file-path в ConfigMap Cilium-config и вручную очистите файлы журнала, созданные в указанном месте контейнера.
Приведенная ниже команда перезапустит Cilium pods. Если редактировался ConfigMap, потребуется перезапуск Cilium pods.
Для перезапуска Cilium pods выполните:
Cilium config delete hubble-export-file-path
Параметры конфигурации#
Параметры конфигурации включают в себя:
hubble.export.static.filePath: путь к целевому файлу журнала, по умолчанию/var/run/Cilium/hubble/events.log;hubble.export.fileMaxSizeMb: размер чередуемого файла экспорта Hubble в МБ, по умолчанию10;hubble.export.fileMaxBackups: количество чередуемых сохраняемых файлов экспорта Hubble, по умолчанию5.
Кроме того, в Cilium-config ConfigMap может быть установлено свойство hubble-export-file-compress - сжатие чередующихся файлов экспорта Hubble, по умолчанию false.
Настройка производительности#
hubble.export.static.allowList: укажите список разрешений в качестве потоковых фильтров в формате JSON для Hubble Exporter;hubble.export.static.denyList: укажите список в качестве потоковых фильтров в формате JSON для Hubble Exporter;hubble.export.static.fieldMask: укажите список полей, которые будут использоваться для маскировки полей в Hubble Exporter.
Фильтры#
Используйте интерфейс командной строки hubble для создания необходимых фильтров.
Hubble поддерживает широкий набор параметров фильтрации, которые могут быть заданы в виде комбинации allowlist и denylist.
Hubble применяет эти фильтры следующим образом:
for each flow:
if flow does not match any of the allowlist filters:
continue
if flow matches any of the denylist filters:
continue
send flow to client
Маска поля#
Маска поля не может быть сгенерирована с помощью командной строки hubble. Маска поля - это список имен полей из определения flow proto.
Hubble UI#
Hubble UI - это пользовательский интерфейс для Hubble.
Пользовательский интерфейс Hubble позволяет автоматически находить график зависимостей сервисов для кластеров DropApp на уровнях L3/L4 и даже L7, обеспечивая удобную визуализацию и фильтрацию этих потоков данных в виде карты сервисов.
Развертывание Hubble UI#
Серверная часть#
Для перенаправления интерфейса на серверную часть, развернутую в DropApp, выполните следующую переадресацию порта: kubectl port-forward -n kube-system deployment/hubble-ui 8081.
Для изменения в серверной части Go, выполните дополнительные шаги:
Перейдите в каталог серверной части
cd ./backend, выполните./ctl.sh run, дождитесь сборки и запуска сервера.В другом терминале перейдите в каталог сервера с помощью конфигурации конфигурации Envoy
cd ./serverи запустите Envoy-c ./envoy.yaml(должен быть установлен Envoy).В другом терминале выполните переадресацию порта на
kubectl port-forward -n kube-system deployment/hubble-relay 50051:4245.
Для создания docker-образа для серверной части запустите:
make hubble-ui-backendA
Внешний интерфейс#
Для запуска внешнего интерфейса Hubble выполните шаги:
Установите deps
npm install.Запустите сервер разработки
npm run watch.Откройте
http://localhost:8080.
Для создания docker-образа внешнего интерфейса запустите:
make hubble-ui
Включение Hubble UI#
Для включения пользовательского интерфейса Hubble выполните команду:
Cilium hubble enable --ui
🔑 Found existing CA in secret Cilium-ca
✨ Patching ConfigMap Cilium-config to enable Hubble...
♻️ Restarted Cilium pods
✅ Relay is already deployed
✅ Hubble UI is already deployed
Открытие Hubble UI#
Откройте пользовательский интерфейс Hubble в браузере, запустив Cilium hubble ui. Программа автоматически настроит порт для подключения к сервису hubble-ui в кластере DropApp и сделает его доступным через локальный порт на компьютере.
Cilium hubble ui
Forwarding from 0.0.0.0:12000 -> 8081
Forwarding from [::]:12000 -> 8081
Проверка Hubble UI#
Чтобы сгенерировать тестовый сетевой трафик, запустите циклический тест подключения:
while true; do Cilium connectivity test; done
Чтобы просмотреть трафик в Hubble, откройте http://localhost:12000/Cilium-test в браузере.