В этом документе описывается общая архитектура 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, который позволяет быстро выполнять распространённые операции.