Как использовать MetalLB для экспонирования услуг Kubernetes внутри виртуальной машины Proxmox на сервере, где только у хоста есть статический IP-адрес?

Вопрос или проблема

У нас есть небольшой сервер в нашем институте, который я пытаюсь преобразовать в главный узел Kubernetes для запуска некоторых задач машинного обучения и предоставления нескольких веб-приложений для взаимодействия с моделями.

У меня был предыдущий опыт работы с microk8s (Ubuntu), но я решил перейти на чистый Kubernetes (Debian 12), чтобы узнать больше.

Я настраиваю MetalLB + NGINX Ingress и пытаюсь разобраться, как работает пул IP-адресов, когда IP-адрес хоста (в моем случае Proxmox VM) не “стабилен”, то есть находится за виртуальным сетевым мостом и имеет IP, который не является статическим через централизованный сервер DHCP. Очевидно, что я могу использовать наш DNS для доступа к виртуальной машине, например, my-vm.institute.org.

Следуя этому видеоуроку, я установил MetalLB (pods работают, за исключением отсутствующих адресных пулов, которые, как я понимаю, были удалены). Не могу понять, какие IP-адреса он указывает.

.

Ответ или решение

Для решения задачи по использованию MetalLB в Kubernetes-кластере, размещенном внутри виртуальной машины Proxmox, в условиях, когда только хост обладает статическим IP-адресом, необходимо учесть несколько нюансов. В данной ситуации ваш Kubernetes-кластер должен будет обеспечивать доступ как для внутренних, так и внешних пользователей, несмотря на динамическую природу IP-адресации, предоставляемой через виртуальный сетевой мост.

Теория

Kubernetes и MetalLB: Kubernetes традиционно использует механизмы Service и Ingress для управления доступом к приложениям. Однако, сам Kubernetes не предоставляет возможности назначать публичные IP-адреса для своих Service объектов на кластере, который не работает в облачной среде. MetalLB решает эту проблему, предоставляя поддержку для объявленных IP-балансов при помощи протоколов L2 или BGP.

Проблема динамических IP-адресов: В вашем случае, динамическая IP-конфигурация вызвана DHCP-сервером, который управляет сетевыми настройками для виртуальных машин, размещенных на Proxmox. Это означает, что статичная IP-адресация невозможна без дополнительной конфигурации или вмешательства.

Пример

Установка и конфигурация MetalLB: Начнем с установки MetalLB в режиме Layer 2, поскольку это наиболее простой способ, не требующий сложной маршрутизации:

  1. Установка MetalLB:

    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml

    Это установит MetalLB в вашем Kubernetes-кластере.

  2. Конфигурация адресного пула:
    Создайте файл конфигурации для MetalLB:

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
     name: my-ip-pool
     namespace: metallb-system
    spec:
     addresses:
     - 192.168.1.240-192.168.1.250  # пример диапазона IP, который может быть выдан вашим DHCP-сервером
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
     name: config
     namespace: metallb-system

    Примените конфигурацию:

    kubectl apply -f metallb-config.yaml

Применение

Преодоление ограничения динамических IP:

  • Используйте DNS: Резолвинг имени, например my-vm.institute.org, позволяет привязать динамический IP к имени, что поможет Excel пользователям снаружи обращение к сервисам, развернутым на Kubernetes-кластере.
  • Настройте DHCP-сервер в вашей локальной сети, чтобы он всегда выдавал один и тот же IP-адрес вашей Proxmox VM (например, через привязку MAC-адреса к IP в настройках DHCP). Это облегчит статическое назначение диапазона IP-адресов.

Интеграция с NGINX Ingress:
Настройте NGINX Ingress Controller, чтобы маршрутизировать внешний трафик к вашим приложениям. Это будет действовать как обратный прокси, перенаправляя запросы к правильным подам внутри вашего кластера.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: myapp.my-vm.institute.org
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

Проверка и мониторинг:
Убедитесь, что MetalLB распределяет IP-адреса корректно:

  • Используйте kubectl get svc для отображения деталей Service.
  • Следите за логами MetalLB Controller для диагностики возможных проблем.

Количественная оценка и улучшения:
Регулярно тестируйте доступность и поднимайте alerting на IT панели мониторинга, чтобы отслеживать любые сбои в подключении. Оптимизируйте конфигурацию NGINX и MetalLB, адаптируйте настройки при росте загрузки.

Таким образом, грамотно настроив Proxmox и Kubernetes, а также применив MetalLB и NGINX в совокупности со службой DNS, вы сможете эффективно управлять доступом и масштабируемостью своих приложений на не облачной инфраструктуре.

Оцените материал
Добавить комментарий

Капча загружается...