Вопрос или проблема
Я постараюсь изложить это как можно сжатее, потому что много движущихся частей.
Это чисто учебное упражнение для моей домашней лаборатории, поэтому постарайтесь ответить на основе используемых технологий и воздержитесь от альтернативных технологий, если это абсолютно не необходимо.
Proxmox CE: гипервизор, OPNSense: маршрутизатор между ISP и моей сетью, Kubernetes (Talos): ISO с поддержкой qemu-agent для работы с Proxmox
У меня 3 управляющих узла: k8s-cp-1, k8s-cp-2, k8s-cp-3 и k8s-cp-4. У меня 4 рабочих узла: k8s-w-1, k8s-w-2, k8s-w-3 и k8s-w-4. Все они являются виртуальными машинами в одном экземпляре Proxmox.
k8s-cp-X: 192.168.0.51-53, k8s-w-X: 192.168.0.54-57
(Все IP-адреса резервируются по MAC через DHCP и находятся вне (под) моего автоматического диапазона DHCP от 100 до 254)
В данный момент эти экземпляры не присоединены к кластеру (все они находятся в режиме обслуживания).
Я пытаюсь создать VIP в OPNSense на 192.168.0.50, который переходит на мои управляющие узлы, чтобы я мог перенаправить свои сервисные порты на 192.168.0.50, а ингресс-менеджер обрабатывал остальное на основе имени хоста. Я создал VIP (как IP-алиас), но не знаю, как сделать часть с переключением. В моем понимании, я думаю, что пинг на .50 должен отвечать с IP-адреса одного из 3-х управляющих узлов, к которому сейчас происходит маршрутизация из VIP, но я не знаю, как это сделать.
Надеюсь, это все имеет смысл. О, и я думаю использовать Cilium в качестве балансировщика нагрузки и Traefik в качестве контроллера ингрессов, но открыт для предложений. У меня есть опыт работы с Traefik и Docker Swarm, вот почему я думал использовать его для Kubernetes.
Ответ или решение
Создание виртуального IP-адреса (VIP) в вашей среде Kubernetes с использованием OPNSense требует понимания нескольких ключевых аспектов настройки и управления сетями. В этой статье мы обсудим процесс настройки VIP в OPNSense для обеспечения отказоустойчивости в вашей локальной лаборатории, используя текущую архитектуру, основанную на Proxmox и Talos, с учетом вашего желания использовать Cilium и Traefik для балансировки нагрузки и управления ingress.
Структура вашей инфраструктуры
- Proxmox CE: Гипервизор, на котором работают все ваши виртуальные машины.
- OPNSense: Маршрутизатор между вашим интернет-поставщиком (ISP) и внутренней сетью.
- Kubernetes (Talos): Используется для управления контейнерами.
- Контрольные узлы Kubernetes: 3 контрольных узла (k8s-cp-1: 192.168.0.51, k8s-cp-2: 192.168.0.52, k8s-cp-3: 192.168.0.53).
- Рабочие узлы Kubernetes: 4 рабочий узел (k8s-w-1: 192.168.0.54, k8s-w-2: 192.168.0.55, k8s-w-3: 192.168.0.56, k8s-w-4: 192.168.0.57).
Настройка VIP в OPNSense
Вы уже настроили VIP на OPNSense по адресу 192.168.0.50. Для обеспечения отказоустойчивости вам потребуется реализовать механизм, который будет следить за доступностью ваших контрольных узлов и переключать VIP между ними в случае сбоя.
Шаги по настройке
-
Создание VIP в OPNSense:
- Перейдите в
Services > CARP
и создайте новый виртуальный IP-адрес. - Убедитесь, что выбран класс сетей (например,
IPv4
), укажите VIP (192.168.0.50) и выберите интерфейс, на котором будет активен VIP. - Задайте
VHID
иPassword
, которые будут использоваться для обмена состоянием между вашими контрольными узлами.
- Перейдите в
-
Настройка Failover:
- Установите для каждого контроллера опции
CARP
:- Включите
Synchronized States
, чтобы изменения синхронизировались между контрольными узлами. - Используйте
State Synchronization
для синхронизации состояния между экземплярами.
- Включите
- Настройте
Virtual Server
вFirewall
для управления доступом к VIP. Это можно сделать через NAT, чтобы перенаправить запросы на ваши контрольные узлы.
- Установите для каждого контроллера опции
-
Проверка доступности контрольных узлов:
- Используйте встроенные средства мониторинга OPNSense для проверки доступности ваших контрольных узлов.
- Вы можете использовать Ping или другие TCP/UDP проверки (например, HTTP), чтобы убедиться, что контрольные узлы работают.
-
Настройка Cilium как Load Balancer:
- Убедитесь, что Cilium установлена и правильно настроена в вашем кластере. Cilium использует функции сети, чтобы предоставить доступ и балансировку нагрузки внутри Kubernetes.
- Настройте
Services
в Kubernetes с типомLoadBalancer
, чтобы Cilium мог обрабатывать трафик, направляемый на VIP.
-
Настройка Traefik в качестве Ingress-контроллера:
- Установите Traefik в вашем кластере Kubernetes, следуя официальной документации.
- Создайте Ingress ресурс, который будет связывать ваши сервисы с VIP (192.168.0.50) на основе хост имени. Убедитесь, что правила маршрутизации настроены корректно.
Проверка и тестирование конфигурации
После выполнения всех настроек рекомендуется протестировать систему, вызвав VIP (ping 192.168.0.50) и проверив, что трафик перенаправляется к работающему контрольному узлу. Выполните имитацию сбоя (например, отключите один из контрольных узлов) и подтвердите, что VIP автоматически перенаправляется к активному узлу.
Заключение
Подводя итог, настройка VIP в OPNSense с использованием протокола CARP в сочетании с правильной конфигурацией Kubernetes обеспечивает масштабируемое и отказоустойчивое решение для управления вашими сервисами. С учетом вашей инфраструктуры на Proxmox и ваших предпочтений по инструментам, такой подход позволит создать надежную среду для запуска приложений.