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
и покажи мне детали.