我在一个容器上运行两个服务(A& B)。一个服务模仿另一个服务所需的依赖项。
服务A是一个黑盒子,可以拨打IP 169.254.169.254。我想使用iptables将该调用转发给服务B.
我正在启动这样的容器,所以它可以拥有自己的iptables,
docker run -it --cap-add=NET_ADMIN --sysctl net.ipv4.conf.eth0.route_localnet=1 <name> bash
一旦进入bash,我配置iptables转发呼叫,
iptables -t nat -I PREROUTING -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination "127.0.0.1:8099" -i eth0
但是,呼叫未被路由到127.0.0.1。如果在Ubuntu Xenial VM中完成,则同一组步骤可以工作。
答案 0 :(得分:0)
您可以运行以下
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 169.254.169.254 -j DNAT --to-destination 127.0.0.1:8099
我使用下面的容器对我的容器做了一个简单的测试,效果很好
root@a09ced7f6961:/# iptables -t nat -A OUTPUT -p tcp --dport 8080 -d 123.45.67.89 -j DNAT --to-destination 127.0.0.1:80
root@a09ced7f6961:/# curl 123.45.67.89:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>