Понимание Kube-OVN
В этом документе описывается общая архитектура 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 можно условно разделить на три категории.
- Компоненты upstream OVN/OVS.
- Основной контроллер и агент.
- Инструменты мониторинга, эксплуатации и расширения.

Содержание
Компоненты upstream OVN/OVS
Данный тип компонентов происходит из сообщества OVN/OVS с конкретными модификациями для сценариев использования Kube-OVN. OVN/OVS — это зрелая SDN-система для управления виртуальными машинами и контейнерами, и мы настоятельно рекомендуем пользователям, заинтересованным в реализации Kube-OVN, сначала ознакомиться с ovn-architecture(7), чтобы понять, что такое OVN и как с ним интегрироваться. Kube-OVN использует northbound-интерфейс OVN для создания и координации виртуальных сетей и отображения сетевых концепций в Kubernetes.
Все компоненты, связанные с OVN/OVS, упакованы в образы и готовы к запуску в Kubernetes.
ovn-central
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
ovs-ovn запускается как DaemonSet на каждом узле, внутри Pod работают openvswitch, ovsdb и ovn-controller.
Эти компоненты выступают агентами для ovn-central, преобразуя таблицы логических потоков в реальные сетевые конфигурации.
Основной контроллер и агент
Эта часть является ядром Kube-OVN, служит мостом между OVN и Kubernetes, связывая две системы и переводя сетевые концепции между ними. Большинство основных функций реализованы в этих компонентах.
kube-ovn-controller
Этот компонент выполняет трансляцию всех ресурсов внутри 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 и использует для настройки локальной сети.
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. - Обработка запросов CNI Add/Del:
- Создание или удаление пары veth и привязка или отвязка к портам OVS.
- Настройка портов OVS.
- Обновление правил iptables/ipset/route на хосте.
- Динамическое обновление QoS сети.
- Создание и настройка NIC
ovn0для соединения сети контейнеров и сети хоста. - Настройка NIC хоста для реализации Vlan/Underlay/EIP.
- Динамическая настройка межкластерных шлюзов.
Инструменты мониторинга, эксплуатации и расширения
Эти компоненты предоставляют средства мониторинга, диагностики, инструменты эксплуатации и внешние интерфейсы для расширения основных сетевых возможностей Kube-OVN и упрощения повседневных операций и обслуживания.
kube-ovn-speaker
Этот компонент — DaemonSet, работающий на узлах с определенной меткой, который публикует маршруты во внешний мир, позволяя внешнему доступу к контейнерам напрямую через IP Pod.
kube-ovn-pinger
Этот компонент — DaemonSet, работающий на каждом узле, собирает информацию о состоянии OVS, качестве сети узла, задержках в сети и т.д.
kube-ovn-monitor
Этот компонент собирает информацию о состоянии OVN и метрики мониторинга.
kubectl-ko
Этот компонент — плагин kubectl, который позволяет быстро выполнять распространённые операции.