我正在尝试使用容器(docker)设置透明代理网络
Client (C) Proxy (P1) Proxy (P2)
10.10.1.1/24 10.10.2.1/24 10.10.3.1/24
veth0 veth0 veth0
| | |
veth pair veth pair veth pair
| | |
-----------(HOST)----------------------------
client-veth0 p1-veth0 p2-veth0
10.10.1.2/24 10.10.2.2/24 10.10.3.2/24
| | | 172.16.202.30
+-----------------+---------------+------- enp4s0 ---- INTERNET
设置主机部分后,我通过在每个命名空间内运行下面的配置命令在 Linux netns 环境中设置此网络:
ip netns exec {target_ns} ip addr...
ip netns exec {target_ns} ip link...
ip netns exec {target_ns} ip route ...
Docker 默认进行网络连接,并使用桥接网络连接所有容器。我想设置单独的数据平面,将管理网络(默认为 docker 网络)放在一边。所以我必须创建额外的 veth 对,将一端连接到每个容器,并在新建立的 veth 接口上执行策略路由。
为此我制作了一个运行脚本:https://gist.github.com/cwyang/23220d7fed5a0cc9af21949aad70e2f6。
我想在Docker-compose环境中设置相应的网络。
运行三个容器后,我是否应该再次创建运行脚本并运行一系列docker exec
而不是ip netns exec
来设置容器内部网络?
如果没有,推荐的方法是什么?
换句话说,当一个人想从主机到docker容器做一些自定义设置时,是否有B计划? (A) Docker(-compose)启动,用户进行一系列docker exec
操作 (B) Docker启动一些配置在容器启动后运行。配置由docker运行,而不是由用户运行。
当容器因某种原因关闭并且 docker(-compose) 重新启动它时,应该应用配置。因此,如果 infra 提供该机制,用户无需监控每个参与的容器以自行重新应用配置。所以我想知道是否有 B 计划。
任何帮助我都会非常感激。谢谢。