Ошибка шлюза при использовании ingress traefik в k8s, когда активирован firewalld

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

Вот определение моей проблемы. У меня есть кластер kubeadm с одним узлом, работающий на виртуальных машинах Fedora Cloud 40 с использованием Vagrant.

Я активировал firewalld с этой конфигурацией:

kubernetes
  sources: 10.0.0.0/8 172.16.0.0/12 192.168.100.0/24
public (default)
  interfaces: eth1 eth0
---
public (default, active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources: 
  services: dhcpv6-client mdns ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
---
kubernetes (active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: 
  sources: 10.0.0.0/8 172.16.0.0/12 192.168.100.0/24
  services: dhcpv6-client mdns ssh
  ports: 179/tcp 5473/tcp 10250/tcp 6443/tcp 2379-2380/tcp 10251-10252/tcp
  protocols:
  forward: no
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Metallb и Tigera Calico установлены в кластере. Подов coredns достигли статуса Ready.

Итак, я начал с установки traefik ingress через helm. После установки сервис работает, и я могу получить доступ к панели управления (traefik).

Наконец, я установил Kubernetes Dashboard через официальный helm. Я настроил IngressRoute, чтобы указать домен на сервис панели управления kubernetes.

Однако, когда я пытаюсь получить доступ к приложению через ранее настроенный хост с браузера, я получаю ответ bad gateway. Поэтому я попытался деактивировать firewalld на узле, и о чудо, оно работает.

У вас есть идея, какие правила firewalld я должен добавить, пожалуйста? Я не совсем понимаю, что делаю не так, особенно поскольку я думал, что за правила фаервола кластера отвечает Tigera Calico.

У меня такая же проблема, но я использую ingress-nginx. Вы нашли решение проблемы и можете помочь мне? Пожалуйста.

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

Проблема с ошибкой «Bad Gateway» при использовании Traefik Ingress в вашем кластер Kubernetes после активации firewalld может быть связана с неправильными настройками правил firewall, препятствующими нормальной работе службы. Мы рассмотрим основные причины и решение этой проблемы поэтапно.

Понимание сценария

Ваш кластер Kubernetes развернут на одной ноде с использованием k8s и Helm. У вас установлены MetalLB (для управления балансировкой нагрузки) и Tigera Calico (для сетевой безопасности), а также вы успешно настроили Traefik Ingress. Однако, при попытке доступа к вашему приложению через браузер происходит возврат ошибки «Bad Gateway» из-за включенного firewalld.

Возможные причины ошибки

  1. Недостаточные правила nginx: Поскольку вы используете Traefik и, возможно, Ingress-nginx, возможно, необходимы дополнительные правила, разрешающие трафик для определённых портов или IP-адресов.

  2. Проблемы с маршрутизацией: Firewalld может блокировать трафик между компонентами кластера, такими как Traefik, Kubernetes Dashboard и вашим клиентом.

  3. Отсутствие соответствующих разрешений: Возможно, ваши службы или поды не имеют нужных прав для обмена данными.

  4. Конфликт между Calico и Firewalld: Хотя Tigera Calico отвечает за управление сетевой политикой, firewalld может блокировать трафик на уровне хоста.

Решения

Для корректного функционирования вашего приложения необходимо изменить настройки firewalld.

  1. Добавление правил для разрешения трафика:

    Введите следующие команды для разрешения доступа к необходимым портам:

    firewall-cmd --zone=kubernetes --add-port=80/tcp --permanent
    firewall-cmd --zone=kubernetes --add-port=443/tcp --permanent
    firewall-cmd --zone=kubernetes --add-port=8080/tcp --permanent  # если используется нестандартный порт
    firewall-cmd --zone=kubernetes --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" accept'

    Не забудьте перезагрузить firewalld, чтобы применить изменения:

    firewall-cmd --reload
  2. Проверка маршрутизации и конфигурации Traefik:

    Убедитесь, что вы правильно настроили IngressRoute для доступа к Kubernetes Dashboard. Например, он должен выглядеть следующим образом:

    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: kubernetes-dashboard
    spec:
      entryPoints:
        - web
      routes:
        - match: Host(`dashboard.your-domain.com`)
          kind: Rule
          services:
            - name: kubernetes-dashboard
              port: 80
  3. Логи Traefik:

    Просмотрите логи Traefik, чтобы определить, какие ошибки возникают при попытке доступа к вашему приложению. Это может дать дополнительные подсказки о возможных ошибках конфигурации.

  4. Проверка сетевых политик Calico:

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

Заключение

Для устранения проблемы с ошибкой "Bad Gateway" вам необходимо удостовериться, что ваши правила firewalld разрешают необходимый трафик, а также что компоненты вашего кластера Kubernetes правильно сконфигурированы. Активное использование логов и мониторинга поможет более эффективно находить и устранять проблемы. Если ошибка продолжает проявляться, стоит проверить документацию по Traefik и Calico для дополнительной настройки.

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

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