В модуле virtualization используются компоненты, реализующие следующие вспомогательные функции:
- аудит событий безопасности;
- проброс USB-устройств в виртуальные машины;
- обновление сетевых маршрутов;
- удаление ресурсов перед деактивацией модуля
virtualization.
Аудит событий безопасности
С инструкцией по активации аудита событий безопасности модуля virtualization можно ознакомиться в документации модуля.
Архитектура
Для упрощения схемы приняты следующие допущения:
- На схеме контейнеры разных подов показаны как взаимодействующие напрямую. Фактически обмен выполняется через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса приводится над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме каждый под показан в единственном экземпляре.
Архитектура компонентов, реализующих аудит событий безопасности модуля virtualization на уровне 2 модели C4 и их взаимодействия с другими компонентами DKP изображены на следующей диаграмме:

Компоненты
Virtualization-audit — компонент, состоящий из одного контейнера и принимающий поток событий безопасности модуля virtualization.
Отправка событий реализована с использованием модуля log-shipper. Агент логирования vector согласно настройкам в кастомных ресурсах ClusterLoggingConfig отбирает из аудит-лога кластера события, связанные с кастомными ресурсами модуля virtualization, и отправляет их на эндпоинт сервиса virtualization-audit. Virtualization-audit обрабатывает полученные audit-события, обогащает их данными из Kubernetes API и сохраняет обработанные события в собственный лог.
Можно перенаправить события безопасности в систему логирования кластера (например, Loki). В этом случае аналогичным образом используются ресурсы ClusterLoggingConfig и агент vector модуля log-shipper.
Взаимодействия
Virtualization-audit взаимодействует со следующими компонентами:
- Kube-apiserver — следит за изменениями кастомных ресурсов модуля
virtualization.
С Virtualization-audit взаимодействуют следующие внешние компоненты:
-
Log-shipper-agent:
- отправляет события безопасности модуля
virtualization; - собирает обработанные аудит-логи.
- отправляет события безопасности модуля
Virtualization-dra и прочие компоненты
Архитектура
Архитектура прочих вспомогательных компонентов модуля virtualization на уровне 2 модели C4 и их взаимодействия с другими компонентами DKP изображены на следующей диаграмме:

Компоненты
-
Virtualization-dra (DaemonSet) — драйвер DRA, с помощью которого реализуется проброс USB-устройств в виртуальные машины. Для проброса USB-устройств используется технология DRA (Dynamic Resource Allocation). DRA — это механизм Kubernetes API, scheduler и kubelet для описания, планирования и подготовки динамически выделяемых ресурсов через внешние драйверы. Драйвер DRA выполняет следующие операции:
-
автоматически обнаруживает USB-устройства на узлах кластера и публикует их как ресурс ResourceSlice. virtualization-controller синхронизирует эти данные в кастомные ресурсы NodeUSBDevice, которые дальше используются для настройки проброса USB-устройств. Подробнее с настройкой проброса USB-устройств можно ознакомиться в документации модуля;
-
регистрируется в kubelet как DRA kubelet plugin. DRA kubelet plugin подготавливает и освобождает выделенные ресурсы для подов через операции PrepareResourceClaims и UnprepareResourceClaims. Метод PrepareResourceClaims возвращает ID устройств CDI (Container Device Interface), которые kubelet передаёт в containerd. Данные о доступных USB-устройствах публикуются через ResourceSlice, а выбор устройств выполняется механизмом Kubernetes DRA на основе ResourceClaim/ResourceClaimTemplate и DeviceClass.
DRA-драйвер взаимодействует с kubelet по протоколу gRPC через Unix-сокеты.
-
реализует USBIP-сервер, благодаря чему USB-устройство автоматически по сети пробрасывается на узел, где запущена виртуальная машина. Нет необходимости вручную размещать ВМ на том же узле, где находится устройство.
Состоит из следующих контейнеров:
- init-load — init-контейнер, загружающий модули ядра Linux, необходимые для работы DRA-драйвера;
- virtualization-dra — основной контейнер.
-
-
Vm-route-forge — контроллер, следящий за кастомными ресурсами VirtualMachine API-группы
virtualization.deckhouse.ioи обновляющий сетевые маршруты на узле через Linux netlink/eBPF в таблицах маршрутизации, используемых CNI Cilium для маршрутизации трафика между ВМ. -
Pre-delete-hook (Job) — задача, запускаемая контроллером Deckhouse перед удалением модуля
virtualization. Она удаляет кастомные ресурсы InternalVirtualizationKubeVirt и InternalVirtualizationCDI с именемconfig.
Взаимодействия
Virtualization-dra взаимодействует со следующими компонентами:
- Kubelet — регистрируется в kubelet как DRA kubelet plugin.
Vm-route-forge взаимодействует со следующими компонентами:
- Kube-apiserver — получает события по ресурсам VirtualMachine, CiliumNode и Node.
- Сеть хоста/ядро Linux — обновляет маршруты и правила маршрутизации на узле.
- Cilium data plane — использует данные CiliumNode и таблиц маршрутизации Cilium для маршрутизации трафика ВМ.
Pre-delete-hook взаимодействует со следующими компонентами:
- Kube-apiserver — удаляет ресурсы InternalVirtualizationKubeVirt и InternalVirtualizationCDI с именем
config.
С Virtualization-dra взаимодействуют следующие внешние компоненты:
- Kubelet — вызывает gRPC-методы PrepareResourceClaims и UnprepareResourceClaims для подготовки и освобождения ресурсов, связанных с USB-устройствами.