东莞网站设计出名 乐云践新网站备案收费幕布
东莞网站设计出名 乐云践新,网站备案收费幕布,开发公司运营部职责,网站建设道冲2019独角兽企业重金招聘Python工程师标准 跟风学Docker之四#xff1a;Docker网络解决方案 博客分类#xff1a; docker 前言#xff1a;前面的部分一直都是单机跑docker#xff0c;但实际生产环境不可能只用一台来跑。肯定会用到多台#xff0c;因为他们都… 2019独角兽企业重金招聘Python工程师标准 跟风学Docker之四Docker网络解决方案 博客分类 docker 前言前面的部分一直都是单机跑docker但实际生产环境不可能只用一台来跑。肯定会用到多台因为他们都是内部私有ip那么多台主机之间的容器如何通信这个是个很头疼的问题 目前主流几种方法如下 1、使用路由机制打通网络 2、使用Open vSwitchOVS打通网络 3、使用flannel来打通网络 4、使用Quagga来实现自动学习路由 第一种使用路由机制打通网络 使用linux的路由来打通网络 优点 常规路由技术 使用传统网络技术 简单 高性能 缺点 与现有网络融为一体 灵活性低 现在有两台Docker实例 具体如图因为Docker默认的内部ip为172.17.42网段所以必须要修改其中一台的默认网段以免ip冲突。 #vim /etc/sysconfig/docker-network DOCKER_NETWORK_OPTIONS --bip172.18.42.1/16 -H fd:// -Hunix:///var/run/docker.sock #systemctl daemon-reload #reboot ok。现在就可以开始操作了。 其实就是执行两台route add命令 docker 130上执行 route add -net 172.18.0.0/16 gw 192.168.18.128 docker 128上执行 route add -net 172.17.0.0/16 gw 192.168.18.130 ok现在两台宿主机里的容器就可以通信了。 第二种使用Open vSwitchOVS打通网络 是一种主流的虚拟化大二层技术 优点 灵活 对现有物理网络没要求 业界主流 缺点 软件封装导致性能下降 复杂度相对较高 排错难度高 流程图如下 首先安装ovs的rpm包 软件包http://pan.baidu.com/s/1mgU6YBe 1 2 3 # yum install openvswitch-2.4.0-1.x86_64.rpm #安装软件包 # /etc/init.d/openvswitch restart #重启服务 # /etc/init.d/openvswitch status #查看状态 安装网桥管理工具 #yum -y install bridge-utils 配置网络 1 2 3 4 5 6 7 8 ovs-vsctl add-br br0 ovs-vsctl add-port br0 gre1 -- set interface gre1 type gre option:remote_ip192.168.18.128 #添加br0到本地docker0使得容器流量通过ovs流经tunnel brctl addif docker0 br0 ip link set dev br0 up ip link set dev docker0 up iptables -t nat -F; iptables -F ip route add 172.17.0.0 /16 dev docker0 其余节点同样的配置注意ip地址即可。 第三种使用flannel来打通网络 新设计的Flannel一种结合了路由机制与隧道技术 原理每个主机配置一个ip段和子网个数。例如可以配置一个覆盖网络使用 10.100.0.0/16段每个主机/24个子网。因此主机a可以接受10.100.5.0/24主机B可以接受10.100.18.0/24的包。flannel使用etcd来维护分配的子网到实际的ip地址之间的映射。对于数据路径flannel 使用udp来封装ip数据报转发到远程主机。选择UDP作为转发协议是因为他能穿透防火墙。例如AWS Classic无法转发IPoIP or GRE 网络包是因为它的安全组仅仅支持TCP/UDP/ICMP。 下图解释了数据报通过覆盖网络转发的路线 部署也不是很复杂仅需要etcd和flannel两项支持即可。 etcd一般部署在单独机器上那么flannel就部署在docker节点上每个docker节点上都需部署。 1、部署etcd假设地址为192.168.1.121 1 2 3 4 5 6 7 yum -y install etcd #安装软件包 vim /etc/etcd/etcd .conf #修改配置文件 修改为如下默认只监听本地回环地址 ETCD_LISTEN_CLIENT_URLS http://0.0.0.0:2379 ETCD_ADVERTISE_CLIENT_URLS http://0.0.0.0:2379 systemctl restart etcd #重启服务 etcdctl set /coreos .com /network/config { Network: 10.1.0.0/16 } #添加一条网络配置记录这个配置将用于flannel分配给每个Docker的虚拟IP地址段 2、部署flannel 从https://github.com/coreos/flannel/releases 下载最新稳定版本这里以0.5.5版本为例。 1 2 tar zxf flannel-0.5.5-linux-amd64. tar .gz #解压文件 cp flannel-0.5.5/* /usr/bin/ #拷贝可执行文件至系统变量path 使用systemd来管理flannel服务 vim /usr/lib/systemd/system/flanneld.service 1 2 3 4 5 6 7 8 9 10 11 12 [Unit] DescriptionFlanneld overlay address etcd agent Afternetwork.target Beforedocker.service [Service] Typenotify EnvironmentFile /etc/sysconfig/flanneld EnvironmentFile- /etc/sysconfig/docker-network ExecStart /usr/bin/flanneld -etcd-endpoints${FLANNEL_ETCD} $FLANNEL_OPTIONS [Install] RequiredBydocker.service WantedBymulti-user.target 设置etcd地址 vim /etc/sysconfig/flanneld 1 FLANNEL_ETCD http://192.168.1.121:2379 由于flannel将覆盖docker0网桥所以如果Docker服务已启动则停止Docker服务 编写flannel启动脚本并加入自启动 vim /etc/init.d/start_flannel.sh 1 2 3 4 5 6 7 #!/bin/bash systemctl stop docker #停止docker服务 systemctl restart flanneld #启动flannel服务 mk-docker-opts.sh -i #生成环境变量 source /run/flannel/subnet . env #将环境变量生效 ifconfig docker0 ${FLANNEL_SUBNET} #设置docker0的网卡ip systemctl start docker #启动docker服务 ok现在跨主机容器间已经可以通信。 第四种使用Quagga来实现自动学习路由 其实这种方式是基于第一种方式的路由技术只不过路由信息不需要自己手动添加而是自动学习。试想一下如果有10台docker那么每台docker就需要手动写9条路由信息是不是很惨 Linux上安装路由器的软件名为Quagga它可以配置很多种企业级的动态路由协议。我使用的是RIPV2和OSPF同时开启但安装Quagga的方法和配置命令太过于繁琐。所以网上有大神将其Docker化了。 下载Quagga镜像 1 docker pull index.alauda.cn /georce/router 备用地址http://pan.baidu.com/s/1sj26X8T 特别需要注意的是docker0的网段不能一样所以需要修改docker的子网地址参考第一种的设置办法 运行镜像 1 docker run -itd --namerouter --privileged --nethost index.alauda.cn /georce/router 执行 ip route 查看下路由表已有别的docker0的网段信息。 http://blog.liuker.cn/index.php/docker/30.html 转载于:https://my.oschina.net/xiaominmin/blog/1598759
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88636.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!