Перехватить кальмаров в microk8s

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

0

Я хочу создать высокодоступный шлюз по умолчанию с помощью Squid (перехват с SSL) и Redsocks. Squid выполняет балансировку нагрузки на основе доменов, перенаправляя определенные домены на Redsocks, а остальные на стандартный шлюз. Я использую microk8s в своей сети, развернутый на 3 узлах. Для распределения IP-адресов в сети я использую MetalLB. Проблема в том, что я не знаю, как перенаправить ВСЕ порты svc на поды. Это можно сделать только по одному порту за раз, как в этом примере:

ports: protocol: TCP port: 80 targetPort: 80

Я также могу использовать NodePort с iptables на каждом узле. Однако в этом случае мне нужен внешний балансировщик нагрузки, который в данный момент у меня нет.

Нет диапазонов. Я думаю, если я укажу около 65 000 портов, мой балансировщик нагрузки MetalLB станет крайне медленным. Как лучше всего справиться с этой ситуацией?

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

Вопрос, с которым вы столкнулись, касается создания высокодоступного шлюза по умолчанию с использованием Squid и Redsocks в окружении MicroK8s. Давайте подробно разберем вашу задачу и способы её решения.

1. Понимание архитектуры

Вы стремитесь создать решение для балансировки нагрузки, где Squid будет выполнять доменно-ориентированную маршрутизацию. Это значит, что Squid должен перенаправлять трафик для определённых доменов в Redsocks, а для остальных доменов – на стандартный шлюз. Данное решение требует грамотной обработки входящего и исходящего трафика через ворота Kubernetes, что может быть непростой задачей.

2. Использование MetalLB

Вы уже используете MetalLB для распределения IP-адресов. Это хороший выбор для Kubernetes в средах, где отсутствует встроенная поддержка внешних Load Balancer. Существует несколько подходов к тому, как настроить MetalLB для работы с вашими Squid и Redsocks сервисами.

3. Проблема с портами

Как вы заметили, Kubernetes не позволяет просто так прокидывать все порты одного сервиса в поды. Порты необходимо указывать явно, что может стать серьезной проблемой, учитывая, что количество портов может достигать 65,000. Столь массовое перечисление портов, безусловно, снизит производительность вашего MetalLB и усложнит обслуживание.

4. Рекомендации по настройке

4.1 NodePort

Вы упомянули возможность использования NodePort, что может быть одним из решений. Этот метод подразумевает открытие порта на каждом узле кластера Kubernetes и назначение порта для доступа к сервису из внешней сети. Общая схема выглядит следующим образом:

  • Настройте сервис Squid как NodePort:
    apiVersion: v1
    kind: Service
    metadata:
    name: squid
    spec:
    type: NodePort
    ports:
    - port: 80
      targetPort: 80
      nodePort: 30080
    selector:
    app: squid

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

4.2 Ингресс-контроллер

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

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: squid-ingress
spec:
  rules:
  - host: your-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: squid
            port:
              number: 80

  - host: redsocks-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: redsocks
            port:
              number: 80

5. Заключение

Таким образом, вы имеете два основных подхода: использование NodePort для непосредственного доступа и создание ингресс-контроллера для доменно-ориентированной маршрутизации. Оба метода позволят эффективно обрабатывать трафик в вашем окружении Kubernetes.

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

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

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