Понимание 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 настраивает конкретную сеть для выполнения соответствующих операций с трафиком, основные задачи включают:

  1. Настройка ovn-controller и vswitchd.
  2. Обработка запросов CNI Add/Del:
    1. Создание или удаление пары veth и привязка или отвязка к портам OVS.
    2. Настройка портов OVS.
    3. Обновление правил iptables/ipset/route на хосте.
  3. Динамическое обновление QoS сети.
  4. Создание и настройка NIC ovn0 для соединения сети контейнеров и сети хоста.
  5. Настройка NIC хоста для реализации Vlan/Underlay/EIP.
  6. Динамическая настройка межкластерных шлюзов.

Инструменты мониторинга, эксплуатации и расширения

Эти компоненты предоставляют средства мониторинга, диагностики, инструменты эксплуатации и внешние интерфейсы для расширения основных сетевых возможностей Kube-OVN и упрощения повседневных операций и обслуживания.

kube-ovn-speaker

Этот компонент — DaemonSet, работающий на узлах с определенной меткой, который публикует маршруты во внешний мир, позволяя внешнему доступу к контейнерам напрямую через IP Pod.

kube-ovn-pinger

Этот компонент — DaemonSet, работающий на каждом узле, собирает информацию о состоянии OVS, качестве сети узла, задержках в сети и т.д.

kube-ovn-monitor

Этот компонент собирает информацию о состоянии OVN и метрики мониторинга.

kubectl-ko

Этот компонент — плагин kubectl, который позволяет быстро выполнять распространённые операции.