Loading
0

docker网络技术剖析

下载地址:wgethttps://github.com/jpetazzo/pipework.git

安装相应依赖软件
yum install bridge-utils -y
配置桥接网络

Vi ifcfg-br0

重启network服务

把 docker 的桥接指定为 br0,这样跨主机不同容器之间通过 pipework 新建 docker 容器的网卡桥接到 br0,这样跨主机容器之间就可以通信了。
CentOS 7/RHEL 7系统
systemctl stop docker
修改/etc/sysconfig/docker

Systemctl restart docker
pipework
把 docker 默认桥接指定到了 br0,则最好在创建容器的时候加上--net=none,防止自动分配的 IP 在局域网中有冲突。

使用镜像运行一个容器

注:默认不指定网卡设备名,则默认添加为 eth1

注:另外pipework 不能添加静态路由,如果有需求则可以在 run 的时候加上 --privileged=true 权限在容器中手动添加,但这种安全性有缺陷,可以通过 ip netns 操作


访问容器提供的web服务:

使用ip netns添加静态路由,避免创建容器使用--privileged=true选项造成一些不必要的安全问题:

在其它宿主机进行相应的配置,新建容器并使用 pipework 添加虚拟网卡桥接到 br0,测试通信情况即可。
注:可以删除 docker0,直接把 docker 的桥接指定为 br0。也可以保留使用默认的配置,这样单主机容器之间的通信可以通过 docker0,而跨主机不同容器之间通过 pipework 新建 docker 容器的网卡桥接到 br0,这样跨主机容器之间就可以通信了。

扩展:
pipework可以在下面用三个场景来使用和工作原理。1 将Docker容器配置到本地网络环境中为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了。下面我们来操作一下,我主机A地址为192.168.1.102/24,网关为192.168.1.1,需要给Docker容器的地址配置为192.168.1.150/24。在主机A上做如下操作:安装pipework下载地址:wget https://github.com/jpetazzo/pipework.git
unzip pipework-master.zip
cp -p /root/pipework-master/pipework /usr/local/bin/启动Docker容器。docker run -itd --name test1 镜像 /bin/bash配置容器网络,并连到网桥br0上。网关在IP地址后面加@指定。pipework br0 test1 192.168.1.150/24@192.168.1.1将主机enp0s3桥接到br0上,并把enp0s3的IP配置在br0上。
ip addr add 192.168.1.102/24 dev br0
ip addr del 192.168.1.102/24 dev enp0s3
brctl addif br0 enp0s3
ip route del default
ip route add default via 192.168.1.1 devbr0
注:如果是远程操作,中间网络会断掉,所以放在一条命令中执行。ip addr add 192.168.1.102/24 dev br0; \ ip addr del 192.168.1.102/24 dev enp0s3;\ brctl addif br0 enp0s3; \ iproute del default; \ ip route add default via 192.168.1.1 dev br0 完成上述步骤后,我们发现Docker容器已经可以使用新的IP和主机网络里的机器相互通信了。
进入容器内部查看容器的地址:

分页阅读: 1 2 3 4 5 6 7 8
【声明】:8090安全小组门户(https://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。