В этом документе описывается общая архитектура Kube-OVN, функциональность каждого компонента и их взаимодействие.
В целом, Kube-OVN служит мостом между Kubernetes и OVN, объединяя проверенные SDN с Cloud Native. Это означает, что Kube-OVN не только реализует сетевые спецификации в Kubernetes, такие как CNI, Service и NetworkPolicy, но и приносит множество возможностей SDN в облачную нативную среду, таких как логические коммутаторы, логические маршрутизаторы, VPC, шлюзы, QoS, ACL и зеркалирование трафика.
Kube-OVN также поддерживает хорошую открытость для интеграции с множеством технологических решений, таких как Cilium, Submariner, Prometheus, KubeVirt и др.
Компоненты Kube-OVN можно условно разделить на три категории.

Данный тип компонентов происходит из сообщества OVN/OVS с конкретными модификациями для сценариев использования Kube-OVN. OVN/OVS — это зрелая SDN-система для управления виртуальными машинами и контейнерами, и мы настоятельно рекомендуем пользователям, заинтересованным в реализации Kube-OVN, сначала ознакомиться с ovn-architecture(7), чтобы понять, что такое OVN и как с ним интегрироваться. Kube-OVN использует northbound-интерфейс OVN для создания и координации виртуальных сетей и отображения сетевых концепций в Kubernetes.
Все компоненты, связанные с OVN/OVS, упакованы в образы и готовы к запуску в Kubernetes.
Deployment ovn-central запускает компоненты контрольной плоскости OVN, включая ovn-nb, ovn-sb и ovn-northd.
ovn-nb: Сохраняет конфигурацию виртуальной сети и предоставляет API для управления виртуальной сетью. kube-ovn-controller в основном взаимодействует с ovn-nb для настройки виртуальной сети.ovn-sb: Хранит таблицу логических потоков, сгенерированную из логической сети ovn-nb, а также фактическое состояние физической сети каждого узла.ovn-northd: преобразует виртуальную сеть из ovn-nb в таблицу логических потоков в ovn-sb.Несколько экземпляров ovn-central синхронизируют данные через протокол Raft для обеспечения высокой доступности.
ovs-ovn запускается как DaemonSet на каждом узле, внутри Pod работают openvswitch, ovsdb и ovn-controller.
Эти компоненты выступают агентами для ovn-central, преобразуя таблицы логических потоков в реальные сетевые конфигурации.
Эта часть является ядром Kube-OVN, служит мостом между OVN и Kubernetes, связывая две системы и переводя сетевые концепции между ними. Большинство основных функций реализованы в этих компонентах.
Этот компонент выполняет трансляцию всех ресурсов внутри Kubernetes в ресурсы OVN и выступает в роли контрольной плоскости всей системы Kube-OVN.
kube-ovn-controller слушает события по всем ресурсам, связанным с сетевой функциональностью, и обновляет логическую сеть
внутри OVN на основе изменений ресурсов. Основные ресурсы, за которыми ведется наблюдение, включают:
Pod, Service, Endpoint, Node, NetworkPolicy, VPC, Subnet, Vlan, ProviderNetwork.
На примере события создания Pod: kube-ovn-controller слушает событие создания Pod, выделяет адрес с помощью встроенной функции IPAM в памяти,
и вызывает ovn-central для создания логических портов, статических маршрутов и возможных правил ACL.
Далее kube-ovn-controller записывает назначенный адрес и информацию о подсети, такую как CIDR, шлюз, маршрут и т.д., в аннотацию Pod.
Эту аннотацию затем читает kube-ovn-cni и использует для настройки локальной сети.
Этот компонент запускается на каждом узле как DaemonSet, реализует интерфейс CNI и управляет локальным OVS для настройки локальной сети.
DaemonSet копирует бинарный файл kube-ovn на каждую машину как инструмент взаимодействия между kubelet и kube-ovn-cni.
Этот бинарный файл отправляет соответствующий CNI-запрос в kube-ovn-cni для дальнейших операций.
По умолчанию бинарный файл копируется в каталог /opt/cni/bin.
kube-ovn-cni настраивает конкретную сеть для выполнения соответствующих операций с трафиком,
основные задачи включают:
ovn-controller и vswitchd.ovn0 для соединения сети контейнеров и сети хоста.Эти компоненты предоставляют средства мониторинга, диагностики, инструменты эксплуатации и внешние интерфейсы для расширения основных сетевых возможностей Kube-OVN и упрощения повседневных операций и обслуживания.
Этот компонент — DaemonSet, работающий на узлах с определенной меткой, который публикует маршруты во внешний мир, позволяя внешнему доступу к контейнерам напрямую через IP Pod.
Этот компонент — DaemonSet, работающий на каждом узле, собирает информацию о состоянии OVS, качестве сети узла, задержках в сети и т.д.
Этот компонент собирает информацию о состоянии OVN и метрики мониторинга.
Этот компонент — плагин kubectl, который позволяет быстро выполнять распространённые операции.