Модуль cilium-hubble обеспечивает визуализацию сетевого стека кластера, если включен Cilium CNI.
Подробнее с описанием настройки модуля можно ознакомиться в разделе документации модуля.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля cilium-hubble на уровне 2 модели C4 и его взаимодействия с другими компонентами Deckhouse Kubernetes Platform (DKP) изображена на следующей диаграмме:

Номерами на схеме отмечен порядок прохождения запроса пользователя к компоненту hubble-ui:
- на шагах 1, 2 и 3 запрос проходит через Ingress NGINX Controller, где выполняется обязательная аутентификация пользователя с использованием модуля
user-authn; - на шагах 4 и 5 выполняется авторизация пользователя на основе Kubernetes RBAC для организации защищенного доступа.
Компоненты модуля
Модуль состоит из следующих компонентов:
-
Hubble-relay — компонент, который агрегируeт события со всех узлов кластера в единое представление. Hubble-relay поддерживает постоянное соединение с каждым экземпляром Cilium Agent на узлах и через gRPC-поток принимает события, дедуплицирует их и предоставляет единый gRPC-эндпоинт для Hubble CLI и Hubble UI (веб-интерфейс). При этом, hubble-relay не хранит историю — он транслирует поток событий в реальном времени.
Состоит из одного контейнера:
- hubble-relay — основной контейнер. Является частью проекта Cilium.
-
Hubble-ui — компонент, реализующий веб-интерфейс. Hubble-ui подключается к hubble-relay и предоставляет удобный доступ к данным, которые поступают с агентов Cilium. Hubble-ui строит интерактивную карту сервисов (Service Map) и таблицу потоков с фильтрами.
Состоит из следующих контейнеров:
- frontend — контейнер, представляющий собой прокси-сервер NGINX, раздающий статические файлы веб-интерфейса hubble-ui и пересылающий запросы к эндпоинту
/apiв контейнер backend компонента; - backend — контейнер, реализующий API hubble-ui, который отправляет запросы в компонент hubble-relay для получения данных, поступающих с агентов Cilium в реальном времени;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к веб-интерфейсу Hubble UI. Является Open Source-проектом.
Контейнеры frontend и backend собраны на основе Hubble-UI, являющегося Open Source-проектом.
- frontend — контейнер, представляющий собой прокси-сервер NGINX, раздающий статические файлы веб-интерфейса hubble-ui и пересылающий запросы к эндпоинту
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
- Cilium-agent — принимает поток событий с агентов Cilium в реальном времени.
- Kube-apiserver — выполняет авторизацию запросов к веб-интерфейсу Hubble UI.
С модулем взаимодействуют следующие внешние компоненты:
- Controller nginx — пересылает внешние запросы пользователя к веб-интерфейсу модуля.