Инструменты Cilium Hubble#

Hubble#

Hubble — это инструмент для визуализации и мониторинга кластеров DropApp. Он позволяет администраторам кластера просматривать состояние nodes, приложений и сервисов в реальном времени. Hubble также предоставляет возможность создавать графики и диаграммы для анализа работы кластера. Он построен на основе Cilium и eBPF, чтобы обеспечить полную прозрачность связи и поведения сервисов, а также сетевой инфраструктуры.

Hubble позволяет без усилий автоматически обнаруживать граф зависимостей сервисов для кластеров DropApp на уровне L3/L4 и L7, обеспечивая удобную визуализацию и фильтрацию этих потоков данных в виде Service Map.

Метрики Cilium позволяют отслеживать состояние самого Cilium.

Метрики Hubble позволяют отслеживать сетевое поведение pods DropApp, управляемых Cilium, в отношении подключения и безопасности.

Синтаксис и описание метрик Hubble приведены в таблице ниже.

Таблица. Синтаксис и описание метрик Hubble

Синтаксис параметра

Описание

identity

Все идентификационные метки безопасности Cilium

namespace

Имя namespace DropApp

pod

Имя pod DropApp и имя namespace в формате <namespace>/pod

workload-name pod-name

Короткая версия имени pod DropApp. Обычно это имя развертывания или набора реплик

pod-name

Имя pod DropApp

dns

Все известные DNS-имена источника или получателя (через запятую)

ip

Адрес IPv4

reserved-identity

Зарезервированная идентификационная метка

workload-name

Имя рабочей нагрузки модуля DropApp (рабочие нагрузки: Deployment, Statefulset, Daemonset, ReplicationController, CronJob, Job, DeploymentConfig и т. д.)

app

Имя приложения 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.

  1. Используйте 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
    
  2. Дождитесь готовности Cilium pod:

    kubectl -n kube-system rollout status ds/Cilium
    
  3. Убедитесь, что журналы потоков хранятся в целевых файлах:

    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, выполните дополнительные шаги:

  1. Перейдите в каталог серверной части cd ./backend, выполните ./ctl.sh run, дождитесь сборки и запуска сервера.

  2. В другом терминале перейдите в каталог сервера с помощью конфигурации конфигурации Envoy cd ./server и запустите Envoy -c ./envoy.yaml (должен быть установлен Envoy).

  3. В другом терминале выполните переадресацию порта на kubectl port-forward -n kube-system deployment/hubble-relay 50051:4245.

Для создания docker-образа для серверной части запустите:

make hubble-ui-backendA

Внешний интерфейс#

Для запуска внешнего интерфейса Hubble выполните шаги:

  1. Установите deps npm install.

  2. Запустите сервер разработки npm run watch.

  3. Откройте 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 в браузере.