Настройка брандмауэра Linux для Docker Swarm в Ubuntu 16.04
Linux, Ubuntu | Комментировать запись
Docker Swarm – это функция кластеризации Docker, которая значительно упрощает запуск контейнеров и хостов Docker. Кластер Docker Swarm состоит из контейнеризированных хостов Docker, одна часть которых функционирует как ведущие ноды (менеджеры), а вторая – как ведомые ноды (рабочие ноды, или воркеры). Для поддержки такой системы нужно правильно настроить брандмауэр Linux.
Для корректной работы кластера Docker Swarm необходимы следующие порты:
- TCP-порт 2376 – для безопасного взаимодействия клиентов Docker и работы Docker Machine (программы, которая обеспечивает оркестровку хостов Docker).
- TCP-порт 2377 – для взаимодействия нод кластера Docker Swarm (нужно открыть только на нодах-менеджерах).
- TCP- и UDP-порт 7946 – для связи между нодами (обнаружение сети контейнера).
- UDP-порт 4789 – для трафика оверлейной сети.
Примечание: Помимо вышеперечисленных портов откройте порт 22 (трафик SSH) и любые другие порты, необходимые для поддержки конкретных сервисов кластера.
Данное руководство научит вас настраивать брандмауэр Linux на сервере Ubuntu 16.04 при помощи различных приложений для управления брандмауэром, доступных в дистрибутивах Linux: FirewallD, IPTables и UFW (Uncomplicated Firewall). Дистрибутив Ubuntu по умолчанию использует UFW. В руководстве показано, как при помощи разных методов достичь одного и того же результата; потому вы можете выбрать наиболее знакомый вам инструмент и выполнить предназначенный для него раздел.
Требования
Чтобы следовать руководству, вам понадобятся предварительно настроенные хосты для кластера (минимум один менеджер и один воркер). Советы по настройке можно найти в статье Управление удалёнными хостами Docker с помощью Docker Machine в Ubuntu 16.04.
Примечание: В руководстве предполагается, что вы подключились к серверу с помощью команды docker-machine ssh (после его оркестровки через Docker Machine). Потому все команды данного руководства выполняются без sudo.
Метод 1: Настройка UFW для поддержки Docker Swarm
Если вы только настроили хосты Docker, вы можете использовать предварительно установленный брандмауэр UFW.
Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 16.04
Чтобы открыть необходимые порты, на одном из менеджеров Swarm запустите следующий набор команд:
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
Затем перезапустите UFW:
ufw reload
Если брандмауэр UFW не включен, введите команду:
ufw enable
После любых изменений настроек рекомендуется перезапустить демон Docker (это не всегда необходимо, но никогда не помешает).
systemctl restart docker
После этого нужно выполнить следующие команды на всех воркерах кластера:
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
Не забудьте после этого перезапустить на воркере UFW:
ufw reload
Опять же, если брандмауэр не включен, включите его:
ufw enable
Перезапустите демон Docker:
systemctl restart docker
Теперь брандмауэр UFW поддерживает Docker Swarm.
Метод 2: Настройка FirewallD для поддержки Docker Swarm
Приложение FirewallD по умолчанию используется в Fedora, CentOS и других дистрибутивах на их основе. Однако FirewallD можно использовать и в других дистрибутивах Linux, в том числе и в Ubuntu 16.04.
Чтобы использовать FirewallD вместо UFW, для начала удалите UFW.
apt-get purge ufw
Затем установите FirewallD:
apt-get install firewalld
Убедитесь, что приложение запущено:
systemctl status firewalld
Если приложение не запустилось автоматически, сделайте это вручную:
systemctl start firewalld
Чтобы приложение запускалось автоматически, введите:
systemctl enable firewalld
Перейдите на менеджер Swarm и используйте следующий набор команд, чтоб открыть требуемые порты:
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
Примечание: Если вы допустили ошибку и хотите удалить запись, введите:
firewall-cmd --remove-port=port-number/tcp —permanent
Перезапустите брандмауэр:
firewall-cmd --reload
Перезапустите Docker:
systemctl restart docker
После этого нужно выполнить следующие команды на всех воркерах кластера Swarm:
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
Не забудьте перезапустить брандмауэр:
firewall-cmd --reload
и Docker:
systemctl restart docker
Теперь брандмауэр FirewallD поддерживает Docker Swarm.
Метод 3: Настройка IPTables для поддержки Docker Swarm
Чтобы использовать IPtables в любом из дистрибутивов Linux, необходимо сначала удалить другие утилиты брандмауэров (например, FirewallD или UFW).
Затем нужно установить пакет iptables-persistent, который отвечает за автоматическую загрузку правил IPtables.
apt-get install iptables-persistent
После этого сбросьте все существующие правила, запустив следующую команду:
netfilter-persistent flush
Теперь можно использовать утилиту iptables. Запустите следующий набор команд на одном из менеджеров кластера Swarm:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT
Сохраните правила (иначе после перезагрузки сервера они будут утрачены):
netfilter-persistent save
Перезапустите Docker:
sudo systemctl restart docker
После этого нужно выполнить следующий набор команд на всех воркерах кластера:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT
Сохраните правила:
netfilter-persistent save
и перезапустите Docker:
sudo systemctl restart docker
Теперь брандмауэр IPTables поддерживает Docker Swarm.
Читайте также: Как работает IPTables
Если вы захотите вернуться к FirewallD или UFW, остановите брандмауэр:
sudo netfilter-persistent stop
Затем нужно сбросить правила:
sudo netfilter-persistent flush
и сохранить пустой набор:
sudo netfilter-persistent save
Теперь вы можете установить и настроить UFW или FirewallD.
Заключение
FirewallD, IPTables и UFW – основные инструменты для управления брандмауэром в Linux. Теперь вы знаете, как с их помощью открыть порты в брандмауэре для поддержки кластера Docker Swarm.
Tags: Docker, Docker Swarm, firewalld, Iptables, Linux, Ubuntu 16.04, UFW