设为首页 收藏本站
查看: 942|回复: 0

[经验分享] docker pipework 实现跨宿主主机容器互联

[复制链接]

尚未签到

发表于 2019-2-20 12:53:10 | 显示全部楼层 |阅读模式
  1、本地容器之间私有网络互联
  Docker 默认的桥接网卡是 docker0。它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机 上看一般叫做 veth* 而 Docker 只是把所有这些网卡桥接在一起,如下:
  # brctl show

  查看IP地址:
  # ip add

  # ifconfig

  这样的网络看成是一个私有的网络,通过 nat 连接外网,如果要让外网连接到容器中,就需要 做端口映射,即 -p 参数。
  缺点:
  (1)需要配套服务注册/发现,否则宿主上端口分配困难,容易冲突。
  (2)由于每个容器暴露的端口都不一致,造成前端路由层nginx配置(proxy_pass)里无法使用dns的方式。
  (3)端口映射要在容器启动时就指定好,后期无法变更。
  (4)测试发现nat不支持websocket。
  2、物理主机之间的容器网络互联
  2.1、自建桥接网络
   优点:
  (1)每个容器都有独立ip,对外提供服务,如nginx+php,nginx+resin,都可以使用默认的80端口
  (2)由于容器暴露端口都可以使用80端口,因此前端路由层nginx配置(proxy_pass)里可以使用dns的方式。
  (3)无需为了后期端口映射添加而烦恼
  (4)桥接支持websocket
  2.2、拓扑图

  2.3、配置如下
  1、网桥方式需要安装网桥管理工具
  # yum install bridge-utils
  2、修改主机的/etc/network/interfaces文件
  # vim /etc/sysconfig/docker
  DOCKER_OPTS="-b=br0"

  3、修改本机网卡
  # vim /etc/sysconfig/network-scripts/ifcfg-ens33
  BRIDGE="br0"
  ZONE=public

  4、添加bro桥接网卡
  # vim /etc/sysconfig/network-scripts/ifcfg-br0
  DEVICE="br0"
  ONBOOT="yes"
  NM_CONTROLLED="no"
  BOOTPROTO="static"
  TYPE="Bridge"
  IPADDR="192.168.56.130"
  PREFIX="24"
  GATEWAY="192.168.56.2"
  DNS1="8.8.8.8"
  DNS2="114.114.114.114"

  5、关闭NetworkManager管理套件
  #systemctl stop NetworkManager
  # systemctl disable NetworkManager、
  6、重启网卡,查看
  # systemctl restart network


  7、下载pipework
  # git clone https://github.com/jpetazzo/pipework
  # cp pipework/pipework /usr/local/bin/

  2.4、启动容器测试

  # docker run -dti --name br01 --privileged centos:7.4.1708 /bin/bash

  登录容器查看(默认还是采用地方nat模式)
  # docker exec -ti e79ed4d70fe1 /bin/bash

  使用pipework更改网络模式
  # pipework br0 br01 192.168.56.140/24@192.168.56.2
  或
  # pipework br0 br01 dhcp      //前提保证有DHCP服务
  再次查看

  局域网已可以正常访问

  补充:
  若想完全抛弃自带的网络设置,在启动容器的时候可以指定--net=none
  # docker run -dti --name br02 --network=none --privileged centos:7.4.1708 /bin/bash
  # pipework br0 br02 192.168.56.141/24@192.168.56.2

  重启系统后pipework网卡配置无效解决方法(持久性)
  在宿主配置开机启动pipework配置
  1、开机启动docker
  # systemctl enable docker
  2、开机启动容器(docker服务)
  # docker update --restart=always bf1b95631b60
  3、配置开启启动pipework相关配置
  # vim /etc/rc.local
  #添加如下参数
  pipework br0 br02 192.168.56.141/24@192.168.56.2

  4、授权
  # chmod +x /etc/rc.local
  5、重启系统后无法分配IP地址
  报错如下:
  Object "netns" is unknown, try "ip help".
  该错误是由于系统版本暂时不支持namespaces, 可通过更新内核或者iproute的方法获取对namespaces的支持.更新方法如下:
  [openstack-kilo]
  name=OpenStack Kilo Repository
  baseurl=https://repos.fedorapeople.org/repos/openstack/EOL/openstack-icehouse/epel-6/
  skip_if_unavailable=0
  enabled=1
  gpgcheck=0
  gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-kilo
  更新:
  yum update iproute -y
  pipework的缺点:
  1.此方法配置的时候有时容器之间不能访问,容器内无法ping通外网(宿主机可以ping通)。但重启服务器后,同样操作,竟然就是可以了。。。。
  2.使用pipework绑定的ip物理机,虚拟机,docker容器的ip都在同一网段,重启后将失效,这在实际生产环境中是很难实现的。
  3、不适合数量多的容器,分配配置麻烦




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674916-1-1.html 上篇帖子: Docker搭建MongoDB 4.0副本集 下篇帖子: docker集群(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表