Iptables Добавить правила DNAT для пересылки запроса на порт IP: порт контейнера

У меня есть кластер kubernetes, который имеет 2 интерфейса: eth0: 10.10.10.100 (внутренний) eth1: 20.20.20.100 (внешний)

В кластере работает несколько модулей с фланелевой связью. POD1: 172.16.54.4 (служба nginx)

Я хочу получить доступ к 20.20.20.100:80 с другого хоста, который подключен к указанному выше кластеру k8s, чтобы я мог подключиться к POD nginx.

Я включил ip forwarding, а также добавил правила DNAT следующим образом:

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.54.4:80

После этого, когда я пытаюсь сделать curl на 20.20.20.100, я получаю

Failed to connect to 10.10.65.161 port 80: Connection refused

Как мне заставить это работать?

2 ответа

Решение

Ты можешь попробовать

iptables -t nat -A PREROUTING -p tcp -d 20.20.20.100 --dport 80 -j DNAT --to-destination 172.16.54.4:80

Но я не рекомендую вам управлять iptables самостоятельно, больно соблюдать правила...

Вы можете использовать hostPort в k8s. Вы можете использовать kubenet в качестве сетевого плагина, так как плагин cni не поддерживает hostPort,

Почему бы не использовать nodeport тип? Я думаю, что это лучший способ получить доступ к сервису через hostIP. Пожалуйста, попробуй iptables -nvL -t nat и покажи мне детали.

Другие вопросы по тегам