2019独角兽企业重金招聘Python工程师标准>>>

跟风学Docker之四:Docker网络解决方案 博客分类: docker

前言:前面的部分一直都是单机跑docker,但实际生产环境不可能只用一台来跑。肯定会用到多台,因为他们都是内部私有ip,那么多台主机之间的容器如何通信?这个是个很头疼的问题!

目前主流几种方法如下:

1、使用路由机制打通网络

2、使用Open vSwitch(OVS)打通网络

3、使用flannel来打通网络

4、使用Quagga来实现自动学习路由

第一种:使用路由机制打通网络

使用linux的路由来打通网络

优点:

  • 常规路由技术

  • 使用传统网络技术

  • 简单

  • 高性能

缺点:

  • 与现有网络融为一体

  • 灵活性低

现在有两台Docker实例:

具体如图,因为Docker默认的内部ip为172.17.42网段,所以必须要修改其中一台的默认网段以免ip冲突。

#vim /etc/sysconfig/docker-network

DOCKER_NETWORK_OPTIONS= --bip=172.18.42.1/16 -H fd:// -H=unix:///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 vSwitch(OVS)打通网络

是一种主流的虚拟化大二层技术

优点:

  • 灵活

  • 对现有物理网络没要求

  • 业界主流

缺点:

  • 软件封装导致性能下降

  • 复杂度相对较高

  • 排错难度高

流程图如下:

首先安装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_ip=192.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]
Description=Flanneld overlay address etcd agent
After=network.target
Before=docker.service
[Service]
Type=notify
EnvironmentFile= /etc/sysconfig/flanneld
EnvironmentFile=- /etc/sysconfig/docker-network
ExecStart= /usr/bin/flanneld  -etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS
[Install]
RequiredBy=docker.service
WantedBy=multi-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 --name=router --privileged --net=host index.alauda.cn /georce/router

执行 ip route 查看下路由表,已有别的docker0的网段信息。

http://blog.liuker.cn/index.php/docker/30.html

转载于:https://my.oschina.net/xiaominmin/blog/1598759

跟风学Docker之四:Docker网络解决方案相关推荐

  1. Docker网络解决方案 - Calico部署记录

    Docker网络解决方案 - Calico部署记录 参考文章: (1)Docker网络解决方案 - Calico部署记录 (2)https://www.cnblogs.com/kevingrace/p ...

  2. Docker重学系列之高级网络篇

    Docker重学系列之高级网络篇 高级网络配置 说明 veth-pair技术 网络小结 Docker 网络相关的命令列表 容器访问控制 容器访问外部网络 容器之间访问 访问所有端口 访问指定端口 映射 ...

  3. Docker网络解决方案 - Weave部署记录

    前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...

  4. Docker网络解决方案-Flannel部署记录

    Docker跨主机容器间网络通信实现的工具有Pipework.Flannel.Weave.Open vSwitch(虚拟交换机).Calico实现跨主机容器间的通信.其中Pipework.Weave. ...

  5. Docker网络解决方案-Weave部署记录

    前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...

  6. Docker的使用(五:Docker中的网络与数据管理)

    实验环境 三台运行有Ubuntu 16.04 操作系统的虚拟机,并每台主机中已安装docker环境: 学习目标 docker的网络管理 docker Swarm集群的使用 Volume数据卷的使用 实 ...

  7. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  8. 【Kubernetes】k8s网络概念和实操详细说明【calico网络】【含docker不同容器网络互通配置,k8s网络互通配置】【1】

    文章目录 calico网络之间通信配置[docker容器互通流程配置] calico网络原理分析 一.Calico基本介绍 二.Calico结构组成 三.Calico 工作原理 四.Calico网络方 ...

  9. Docker中的网络详解

    本节主要是介绍Docker默认的网络行为,包含创建的默认网络类型以及如何创建用户自定义网络,也会介绍如何在单一主机或者跨主机集群上创建网络的资源需求. 1.默认网络 当你安装了docker,她自动创建 ...

最新文章

  1. LeetCode Reorder List
  2. Matlab 自带机器学习算法汇总
  3. SAP Fiori 1.0和2.0的区别
  4. 1143 Lowest Common Ancestor 甲级
  5. 1.5 编程基础之循环控制 44 第n小的质数
  6. WPF 自动选择dll,以SQLite为例
  7. java复试容易被刷掉吗_推免生一定被录取吗复试会被刷吗
  8. python---之suplot里面的twinx()函数
  9. C#使用IHttpModule接口修改http输出的方法浅谈
  10. AE 2021最新最全插件滤镜大全一键安装版下载 After Effects 2021插件合集WIN一键安装版 支持AE 2021
  11. 英语各类词担任的句子成分
  12. poj_3987 Trie图
  13. FBReader 探究 2
  14. 服务器7379如何用u盘装系统,怎么用u盘装系统 用U盘装系统安装过程步骤
  15. 判断三条边能否构成三角形 python
  16. 一张图理解线性空间,度量空间,赋范空间,巴拿赫空间,内积空间,欧几里得空间,希尔伯特空间
  17. 厌学孩子如何进行心理疏导[为本教育]
  18. python signal滤波器使用说明
  19. excel数字点一下才变为数值的批量快捷操作
  20. 神仙级控线练习,文艺极简水彩线描简笔画植物:草叶集(二)

热门文章

  1. python替代php,Python架构的PHP替代方案
  2. windows挂载linux网络文件系统NFS
  3. open ai gpt_让我们来谈谈将GPT-3 AI推文震撼到核心的那条推文
  4. Missing artifact log4j:log4j:bundle:1.2.17
  5. c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast
  6. linux下查看mysql的当前连接情况
  7. Type Casting
  8. es6中的块级作用域
  9. 算法61---两个字符串的最小ASCII删除和【动态规划】
  10. ubuntu scp命令或者用root连接ssh提示:Permission denied, please try again.错误