pipework是由Docker的工程师Jérôme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。
源码地址:Github
利用腾讯云弹性网卡可以绑定多个IP的特性,我们可以为需要暴露在公网环境下的容器配置公网IP地址。
腾讯云服务器弹性网卡环境配置参考文章-在腾讯云服务器中用ProxmoxVE建立基于LXC的Linux虚拟机 ,包括控制面板的配置和在宿主机内添加路由规则。
安装
apt-get install iputils-arping git -y
git clone https://github.com/jpetazzo/pipework
cp pipework/pipework /usr/local/bin/
使用
先创建一个容器
docker run -itd --name test debian /bin/bash
查看该容器的IP地址信息
用pipework配置一个名为br0的Linux bridge,并指定容器公网IP地址所对应的内网IP地址信息。
pipework br0 test 10.10.20.110@10.10.20.1
再次查看容器IP地址信息
这个时候,容器已经获得公网的IP地址,利用curl ip.sb 可以确认。
如果主机环境中有DHCP服务,也可以通过DHCP的方式获取IP。
pipework br0 test dhcp
支持如下dhcp客户端
- dhclient
- udhcpc
- dhcpcd
- dhcp
清理
当容器被停止或者销毁时,pipework会自动销毁在宿主机和容器内添加的网卡及网桥。当再次需要获取公网IP地址时,需重新运行命令。
pipework的工作方式
1.首先 pipework 检查是否存在 br0 网桥,若不存在,就自己创建。若以"ovs"开头,就会创建 OpenVswitch 网桥,以"br"开头,创建 Linux bridge。
2.创建 veth pair 设备,用于为容器提供网卡并连接到 br0 网桥。
3.使用 docker inspect 找到容器在主机中的 PID,然后通过 PID 将容器的网络命名空间链接到 /var/run/netns/ 目录下。这么做的目的是,方便在主机上使用 ip netns 命令配置容器的网络。因为,在 Docker 容器中,我们没有权限配置网络环境。
4.将之前创建的 veth pair 设备分别加入容器和网桥中。在容器中的名称默认为 eth1,可以通过 pipework 的 -i 参数修改该名称。
5.然后就是配置新网卡的 IP。若在 IP 地址的后面加上网关地址,那么 pipework 会重新配置默认路由。这样容器通往外网的流量会经由新配置的 eth1 出去,而不是通过 eth0 和 docker0。(若想完全抛弃自带的网络设置,在启动容器的时候可以指定 --net=none)
pipework 通过封装 Linux 上的 ip、brctl 等命令,简化了在复杂场景下对容器连接的操作命令,为我们配置复杂的网络拓扑提供了一个强有力的工具。
本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.cnhacker.cc/mixed_files/311.html