推荐设置自定义 docker 网络的方法?

推荐设置自定义 docker 网络的方法?

我正在尝试使用容器(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 计划。

任何帮助我都会非常感激。谢谢。

相关内容