Docker swarm инграясь колебания при доступе к контейнерному приложению

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

Я сталкиваюсь с очень странной проблемой в реализации ingress в docker swarm. У меня есть кластер из 3 узлов Docker Swarm, я открыл необходимые порты для Docker Swarm и ingress. Для тестирования я развертываю сервис nginx с 2 репликами. Но когда я пытаюсь получить доступ к URL nginx с другого сервера, это срабатывает один раз и не срабатывает в следующий раз, как будто меняется местами. Ранее я подозревал, что это может быть связано с брандмауэром, но даже когда я остановил брандмауэр на всех 3 серверах, проблема все еще сохраняется. В tcpdump я вижу пакеты syn и ack, когда все работает, но когда это не срабатывает, tcpdump показывает только пакеты syn. На этом кластере один контейнер и контейнеры Docker Compose работают нормально. Ниже приведены некоторые детали.

public (активный)
  target: default
  icmp-block-inversion: нет
  interfaces: ens192
  sources: 163.202.101.0/24
  services: cockpit dhcpv6-client ssh
  ports: 7946/tcp 7946/udp 4789/udp 2377/tcp 25315/tcp 4010/tcp 2780/tcp 2781/tcp 80/tcp 8080/tcp
  protocols:
  forward: да
  masquerade: да
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
public
  interfaces: ens192
  sources: 163.202.101.0/24
trusted
  interfaces: docker0
NETWORK ID     NAME              DRIVER    SCOPE
6578c94f08aa   bridge            bridge    local
94cd91123447   docker_gwbridge   bridge    local
f95a8e594c75   host              host      local
sb6agp0or02q   ingress           overlay   swarm
8ieatmyf72pe   nginx_default     overlay   swarm
2ef710766885   none              null      local

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

Проблема «флип-флопа» при доступе к контейнерному приложению с использованием Docker Swarm с использованием механизма ingress может быть вызвана несколькими факторами. Давайте рассмотрим возможные причины и пути их решения, основываясь на предоставленной информации.

Введение в проблему

Вы описали, что ваш кластер Docker Swarm состоит из трех узлов и что вы развернули сервис Nginx с двумя репликами. Проблема заключается в том, что при попытке доступа к URL Nginx результат разный — иногда он работает, а иногда происходит сбой. Ваша диагностика, включая вывод tcpdump, указывает на то, что вы видите SYN и ACK пакеты, когда соединение устанавливается, но только SYN пакеты, когда соединение не удается установить. Также вы протестировали работу с контейнерами, запущенными в Docker Compose, и у вас все прошло успешно, что указывает на возможное нарушение в реализации Swarm.

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

  1. Проблемы с маршрутизацией

    • Проверьте маршруты в каждом узле кластера. Иногда неправильно настроенные маршруты могут вызывать проблемы с доступностью сервисов в Swarm.
    • Убедитесь, что IP адреса и маски подсетей всех узлов согласованы, и обеспечьте, чтобы все узлы могли видеть друг друга.
  2. Настройки сети Docker

    • Вы указали, что у вас есть два оверлейных сетевых интерфейса (ingress и nginx_default). Убедитесь, что сервисы могут взаимодействовать корректно в этих сетях.
    • Попробуйте использовать команду docker network inspect ingress, чтобы проверить состояние сети ingress и убедиться, что все узлы присоединены к ней без ошибок.
  3. Здоровье контейнеров

    • Проверьте статус контейнеров с помощью команды docker service ps <service-name>. Убедитесь, что обе реплики Nginx работают и не перезапускаются.
    • Также проверьте журналы контейнеров с помощью docker logs <container-id> для поиска ошибок или проблем.
  4. Балансировка нагрузки и маршрутизация

    • Убедитесь, что ваши сетевые правила и балансировщики нагрузки (если они есть) настроены корректно и могут обрабатывать трафик между репликами. Некоторые балансировщики нагрузки могут некорректно обрабатывать наружный трафик, когда он приходит на разные узлы.
    • Также убедитесь, что при обращении к сервису через DNS нет никаких проблем с разрешением имен.
  5. Состояние сети

    • Используйте команды curl на разных узлах, чтобы проверить доступность Nginx напрямую через IP адреса контейнеров.
    • Если у вас есть возможность, установите менее агрессивные настройки для вашего firewall (если вы снова планируете его включить) или используйте сетевой мониторинг, чтобы видеть, какие пакеты блокируются.
  6. Конфликты IP-адресов

    • Если в вашем окружении используются статические IP-адреса для контейнеров, убедитесь, что они не конфликтуют с другими адресами в вашей сети.

Заключение

Для решения проблемы с флип-флопом доступа к вашему контейнерному приложению в Docker Swarm вам необходимо проверить настройки сети, состояние контейнеров, настройки маршрутизации и корректность работы сервисов. Это необходимо для того, чтобы понять, почему иногда запросы не обрабатываются. Следует проверить каждый компонент по очереди для изолирования проблемы и её устранения.

Если проблема сохраняется, рассмотрите возможность обращения в специализированные технические сообщества или в службу поддержки Docker для получения дополнительной помощи.

Если у вас есть дополнительные детали или изменения в конфигурации, пожалуйста, поделитесь ими, и мы сможем более детально исследовать ситуацию.

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

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