Выставление nodeport Minikube наEthernet интерфейсе через iptables, чтобы он был виден другим хостам в сети.

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

Для прототипа проекта предприятия я использую Minikube для тестирования сложной локальной сети Hyperledger Fabric (HLF). Мне нужно открыть HLF (не http) службы, работающие в Minikube. Я уже сделал это с помощью Nodeports, но так как я использую драйвер Docker в своем Minikube, их можно открывать только в интерфейсе моста, к которому Minikube привязывается, поэтому я могу получить к ним доступ только с хост-машины, а не извне. Я хочу, чтобы некоторые из этих портов были доступны в моей Ethernet-сети. Есть ли способ сделать это с помощью IPTables? Допустим, у меня есть Minikube в интерфейсе моста с IP 192.168.49.2 на порту 7051, и я хочу, чтобы эта служба была видна на eth0 с IP 192.168.2.4 также на порту 7051.

Я использую Bookworm Linux (Raspberry OS)

Какими будут правила IP таблиц?

Примечание: я читал в других старых записях, что проблема связана с уже существующими правилами DOCKER при использовании Minikube с драйвером docker. Вот мои текущие правила:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (2 references)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             192.168.49.2         tcp дpt:7051
ACCEPT     tcp  --  anywhere             192.168.49.2         tcp дpt:8443
ACCEPT     tcp  --  anywhere             192.168.49.2         tcp дpt:ssh
ACCEPT     tcp  --  anywhere             192.168.49.2         tcp дpt:2376
ACCEPT     tcp  --  anywhere             192.168.49.2         tcp дpt:5000
ACCEPT     tcp  --  anywhere             192.168.49.2         tcp дpt:32443

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-USER (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Примечание: Для того чтобы открыть порт 7054, я попробовал следующие правила без успеха… Что я упускаю?

sudo iptables -A FORWARD -i eth0 -o br-e2ab4e35d9ed -p tcp --syn --dport 7054 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o br-e2ab4e35d9ed -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i br-e2ab4e35d9ed -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 7054 -j DNAT --to-destination 192.168.49.2

(Я подтвердил, что порт прослушивается и работает по адресу minikube, 192.168.49.2, в созданном интерфейсе моста docker/minikube: br-e2ab4e35d9ed)

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

Для реализации доступа к сервисам, работающим в Minikube через сетевой интерфейс Ethernet с использованием iptables, следует учитывать несколько важных аспектов, прежде чем продолжить. Мы рассматриваем ситуацию, когда необходимо проксировать запросы, направленные на определенный порт хоста (в данном случае, 7051), к порту сервисов на IP-адресе Minikube (192.168.49.2). Давайте разберем процесс и необходимые команды по шагам.

Шаг 1: Подготовка и проверка текущих iptables

Сначала проверьте текущие правила iptables для получения информации о действующих правилах и конфликтах, которые могут возникнуть при их добавлении:

sudo iptables -L -v -n
sudo iptables -t nat -L -v -n

Шаг 2: Настройка правил FORWARD

Добавим правила для межсетевого взаимодействия между вашим Ethernet-интерфейсом (eth0) и мостовым интерфейсом Docker (br-<имя_моста>).

# Разрешаем новые подключения
sudo iptables -A FORWARD -i eth0 -o br-e2ab4e35d9ed -p tcp --dport 7051 -j ACCEPT
# Позволяем установленные соединения
sudo iptables -A FORWARD -i br-e2ab4e35d9ed -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Разрешаем обратные связи
sudo iptables -A FORWARD -i eth0 -o br-e2ab4e35d9ed -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Шаг 3: Настройка NAT

Теперь следует добавить правило NAT для перенаправления трафика с порта 7051 на Minikube.

# Перенаправляем трафик на Minikube
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 7051 -j DNAT --to-destination 192.168.49.2:7051

Шаг 4: Проверка работы правил

После добавления всех правил, убедитесь, что правила iptables были успешно применены:

sudo iptables -L -v -n
sudo iptables -t nat -L -v -n

Эти команды должны отображать ваши новые правила в соответствующих цепочках (FORWARD и PREROUTING).

Шаг 5: Протестируйте доступ к сервису

Теперь вы можете протестировать доступ к вашему сервису, пытаясь подключиться к нему через IP-адрес вашего хоста (192.168.2.4) на порту 7051:

# Используйте любую утилиту для тестирования TCP-соединения, например, nc
nc -v 192.168.2.4 7051

Примечания

  1. Разрешения на входящие подключения: Убедитесь, что ваш firewall (если установлен) разрешает входящие подключения на порт 7051.
  2. Проверка Docker и KV-сетей: Конфликты с другими сетями Docker также могут помешать успешной маршрутизации, поэтому нужно удостовериться, что другие контейнеры/сервисы не используют тот же порт или IP.
  3. Сохранение настроек: После настройки iptables, не забудьте сохранить изменения, чтобы они сохранились после перезагрузки машины. В большинстве дистрибутивов Linux это можно сделать с помощью:
sudo sh -c "iptables-save > /etc/iptables/rules.v4"

Следуя этим шагам, вы сможете успешно проксировать трафик на Minikube-сервисы через Ethernet-интерфейс. Это разработка позволит другим хостам в вашей локальной сети взаимодействовать с услугами, развернутыми в минимуме, тем самым улучшая тестирование и взаимодействие с вашим Enterprise проектом.

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

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