跟风学Docker之四:Docker网络解决方案

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

跟风学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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【测绘程序设计】坐标方位角推算神器(C#版)

本文讲解利用C#语言实现坐标方位角推算,附源码赠送。 1. 神器效果展示 (1)连接角为左角 (2)连接角为右角 2. 方位角推算原理速递 (1)原理示意图

原型模式——创建型模式

2019独角兽企业重金招聘Python工程师标准>>> 思路: 马上又到找工作的时候了,当我们在准备一份份简历的时候有没有考虑过这样一个问题? 面对不同的工作岗位我们需要准备不同的求职简历,但是这样的几份不同的简历中还是有…

如何获取 ASP.NET Core 当前启动地址?

前言上次,我们介绍了配置ASP.NET Core启动地址的多种方法。那么,如何通过代码方式,获取启动后的地址?WebApplication.Urls 对象使用 WebApplication.Urls.Add 方法可以添加启动地址。那么,使用 WebApplication.Urls 应…

【CASS精品教程】CASS9.1查询功能大全(坐标、长度、面积、方位角)

文章目录 1. 查询指定点坐标2. 查询两点距离及方位3. 查询线长4. 查询实体面积CASS9.1中提供了查询指定点坐标、查询两点距离及方位、查询线长、查询实体面积等查询功能,如下图所示: 本文以动画演示的方式,对以上提到的功能进行讲解。 1. 查询指定点坐标 点击【工程应用】…

自定义smokeping告警(邮件+短信)

前段时间接到公司IT同事需求,帮助其配置smokeping的告警功能,之前配置的姿势有些问题,告警有些问题,现在调试OK,在此将关键配置点简单记录下。 关键的配置项主要有: 定义告警规则并配置将告警信息通过管道交…

selenium 定制启动 chrome 的选项

2019独角兽企业重金招聘Python工程师标准>>> selenium 定制启动 chrome 的选项 博客分类: java 搜索引擎,爬虫 使用 selenium 时,我们可能需要对 chrome 做一些特殊的设置,以完成我们期望的浏览器行为,比如…

平台级 SAAS 架构的基础:统一身份管理系统

业内在用户统一身份认证及授权管理领域,主要关注 4 个方面:集中账号管理(Account)、集中认证管理(Authentication)、集中授权管理(Authorization)和集中审计管理(Audit&a…

【ArcGIS Pro微课1000例】0017:ArcGIS Pro 2.8制作炫酷的ETOPO1全球DEM地图

ArcGIS Pro相对于ArcGIS,在制图方面做了很大的提升,做出的地图更加优美,本文讲解基于NOAA的ETOPO1数据全球DEM数据制作炫酷的全球DEM地图,先看效果再教学! 1. 效果展示 全球 澳大利亚大陆

Js中的for in

2019独角兽企业重金招聘Python工程师标准>>> 后台数据&#xff1a; List<Map<String, Object>> uTags query.selectAllList("velocity.userGetTags", map); 前端解析&#xff1a; for(var i in data.content){//由于这里是List[i](Map).IDc…

VMWare 安装 Linux

参考 &#xff1a; http://www.aboutyun.com/thread-6780-1-1.html 这的是很详细。赞一下 我这里就简化一下。 1 下载&#xff1a; VMWare : https://download3.vmware.com/software/wkst/file/VMware-workstation-full-10.0.0-1295980.exe ubuntu : http://www.aboutyun…

【ArcGIS Pro微课1000例】0018:ArcGIS Pro 2.8通过OLE DB与个人数据库建立连接案例

对于个人数据库,Access程序可以直接打开。本文讲解在ArcGIS Pro2.8中通过OLE DB与个人数据库MDB建立联系的方法与过程。 文章目录 1. 个人数据库准备2. OLE DB连接个人数据库1. 个人数据库准备 准备一个个人数据库,在上面右键→复制文件地址。 文件地址为:"C:\test.md…

《ASP.NET Core 6框架揭秘》实例演示[02]:基于路由、MVC和gRPC的应用开发

ASP.NET Core可以视为一种底层框架&#xff0c;它为我们构建出了基于管道的请求处理模型&#xff0c;这个管道由一个服务器和多个中间件构成&#xff0c;而与路由相关的EndpointRoutingMiddleware和EndpointMiddleware是两个最为重要的中间件。MVC和gRPC开发框架就建立在路由基…

什么是 JWT -- JSON WEB TOKEN

什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点的单点登录&#xff08;SSO&#xff09;场景。JWT的声明一般被用来在身份提供者和服务提…

【ArcGIS微课1000例】0024:ArcGIS如何连接文件夹、设认工作目录、默认地理数据库、相对路径与绝对路径?

ArcGIS软件在初次安装完成或者为了工作的方便,通常需要连接到指定的文件夹、设置默认工作路径,默认地理数据库、相对路径与绝对路径等。 文章目录 1. 文件夹连接2. 默认工作目录3. 默认地理数据库4. 相对路径与绝对路径1. 文件夹连接 在初次安装完ArcGIS时,默认没有文件夹连…

【Spring Cloud】Redis缓存接入监控、运维平台CacheCloud

CacheCloud CacheCloud提供一个Redis云管理平台&#xff1a;实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功能、减少运维成本和误操作&#xff0c;提高机器的利用率&#xff0c;提供灵活的伸缩…

[Win10应用开发] 使用 Windows 推送服务 (WNS)

前言 Windows 推送服务&#xff08;WNS&#xff09;也是 Win10 通知机制中的一种&#xff0c;今天与大家一起学习一下有关WNS的相关知识。使用 Windows 推送服务的前提是你需要有一个微软开发者账号&#xff0c;这样才能得到一些合法的密钥信息用于与WNS服务器完成通讯操作。 …

Windows 11 新版 25158 推送!全新搜索框和图标、小组件动态内容和通知标记

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已推送 Windows 11 预览版 Build 25158。主要变化1.微软宣布为 Windows 11 搜索引入全新视觉体验&#xff0c;由搜索框或重新设计的搜索图标呈现。目前该功能仅向部分 Windows 预览体验成员推出&#xff0c;将在未来向所…

【BIM入门实战】Revit创建地形的几种方法及优缺点

Revit在体量和场地选项卡的【地形表面】工具可以创建三维地形,有三种方法:放置点、指定点文件和导入实例文件、倾斜摄影点云技术和InfraWorks地形生成。 文章目录 1. 放置点2. 指定点文件3. 导入实例文件4. 倾斜摄影点云技术5. InfraWorks地形生成1. 放置点 放置点功能位于体…

2024年起重机司机(限门式起重机)证考试题库及起重机司机(限门式起重机)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年起重机司机(限门式起重机)证考试题库及起重机司机(限门式起重机)试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作…

微服务架构下的统一身份认证和授权

一、预备知识 本文讨论基于微服务架构下的身份认证和用户授权的技术方案&#xff0c;在阅读之前&#xff0c;最好先熟悉并理解以下几个知识点&#xff1a; 微服务架构相关概念&#xff1a;服务注册、服务发现、API 网关身份认证和用户授权&#xff1a;SSO、CAS、OAuth2.0、JW…