qinling072 发表于 2018-5-26 10:57:26

docker pipework

  pipework 工作原理分析 :

  ·1.首先pipework检查是否存在 br0网桥,若不存在,就自己创建。
  ·2.创建veth pair 设备,用于为容器提供网卡并连接到br0网桥。
  ·3.使用docker inspect找到容器在主机中的PID,然后通过 PID将容器的网络命名空间链接到/var/run/netns/目录下。这么做的目的是,方便在主机上使用 ip netns命令配置容器的网络。
  因为,在Docker容器中,我们没有权限配置网络环境。
  ·将之前创建的veth pair 设备分别加入容器和网桥中。在容器中的名称默认为eth1,可以通过pipework的-i参数修改该名称。
  ·然后就是配置新网卡的 IP。若在 IP 地址的后面加上网关地址,那么 pipework 会重新配置默认路由。这样容器通往外网的流量会经由新配置的eth1出去,而不是通过eth0和docker0。
  (若想完全抛弃自带的网络设置,在启动容器的时候可以指定--net=none)
  以上就是 pipework 配置 Docker 网络的过程,这和 Docker 的 bridge 模式有着相似的步骤。
  事实上,Docker在实现上也采用了相同的底层机制。
  通过源代码,可以看出,pipework 通过封装Linux上的ip、brctl等命令,简化了在复杂场景
  下对容器连接的操作命令,为我们配置复杂的网络拓扑提供了一个强有力的工具。当然,如
  果想了解底层的操作,我们也可以直接使用这些 Linux命令来完成工作,甚至可以根据自己
  的需求,添加额外的功能
  pipework可以在下面用三个场景来使用和工作原理。
  1将Docker 容器配置到本地网络环境中
  为了使本地网络中的机器和 Docker 容器更方便的通信,我们经常会有将 Docker 容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将 Docker 容器和主机的网卡桥接起来,再给Docker 容器配上IP就可以了。
  下面我们来操作一下:
  1.安装pipework
  wget https://github.com/jpetazzo/pipework.git

  2. 启动Docker容器

  3.-- 配置容器网络,并连到网桥 br0 上。网关在IP地址后面加@指定。

  4. 将主机eno16777736网卡桥接到 br0上,并把eno16777736 的 IP配置在br0上。

  注:如果是远程操作,中间网络会断掉,所以放在一条命令中执行。

  5.测试

  2单主机Docker 容器 VLAN 划分
  pipework 不仅可以使用 Linux bridge 连接 Docker 容器,还可以与 OpenVswitch 结合,实现Docker 容器的 VLAN 划分。
  演示一下,在单机环境下,如何实现 Docker 容器间的二层隔离。
  1.安装openvswitch
  安装基础环境:yum install gcc make python-devel openssl-devel kernel-devel graphviz \ kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool
  下载openvswitch的包:wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz
  解压与打包

  复制

  修改

  下载

  查看一下

  安装并启动

  查看一下状态,有两个进程

  之后安装pipework
  创建交换机,把物理网卡加入ovs1

  或者

  创建4个docker容器

  划分vlan并加入

  加一条路由,就可以上网了

  最后相同vlan之间可以互相通信,可以使用外网。
页: [1]
查看完整版本: docker pipework