第 8 章 容器网络 - 062 - 如何使用 flannel host-gw backend?
flannel host-gw backend
flannel 支持多种 backend:(1)vxlan backend;(2)host-gw;
与 vxlan 不同,host-gw 不会封装数据包,而是在主机的路由表中创建到其他主机 subnet 的路由条目,从而实现容器跨主机通信。
要使用 host-gw 首先修改 flannel 的配置 flannel-config.json:
{
"Network": "10.2.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "host-gw"
}
}
Type 用 host-gw 替换原先的 vxlan。更新 etcd 数据库:
etcdctl --endpoints=10.12.31.21:2379 set /docker-test/network/config < flannel-config.json
kill 掉之前 host1 和 host2 的 flanneld 进程并重启。
flanneld -etcd-endpoints=http://10.12.31.21:2379 -iface=ens192 -etcd-prefix=/docker-test/network &
host1 上 flanneld 启动输出如下:

与之前 vxlan backend 启动时有几点不同:
1)flanneld 检查到原先已分配的 subnet 10.2.9.0/24,重用之。
2)flanneld 从 etcd 数据库中检索到 host2 的 subnet 10.2.52.0/24,但因为其 type=vxlan,立即忽略。
3)两分钟后,再次发现 subnet 10.2.52.0/24,将其加到路由表中。
这次没有忽略 subnet 的原因是此时我们在 host2 上重启了 flanneld,根据当前 etcd 的配置使用 host-gw backend。
查看 host1 的路由表,增加了一条到 10.2.52.0/24 的路由,网关为 host2 的 IP 10.12.31.23。

类似的,host2 启动 flanneld 时会重用 subnet 10.2.52.0/24,并将 host1 的 subnet 10.2.9.0/24 添加到路由表中,网关为 host1 IP 10.12.31.22。

从 /run/flannel/subnet.env 可以看到 host-gw 使用的 MTU 为 1500:

这与 vxlan MTU=1450 不同,所以应该修改 docker 启动参数 --mtu=1500并重启 docker daemon。


面对 host-gw 和 vxlan 这两种 backend 做个简单比较。
1)host-gw 把每个主机都配置成网关,主机知道其他主机的 subnet 和转发地址。
vxlan 则在主机间建立隧道,不同主机的容器都在一个大的网段内(比如 10.2.0.0/16)。
2)虽然 vxlan 与 host-gw 使用不同的机制建立主机之间连接,但对于容器则无需任何改变,bbox1 仍然可以与 bbox2 通信。
3)由于 vxlan 需要对数据进行额外打包和拆包,性能会稍逊于 host-gw。
------------------------------------------引用来自-----------------------------------------------------
https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587821&idx=1&sn=05a4570eaf88e80400eb99390a55b3d1&chksm=8d308174ba4708624c99c49deedcdd1527891c8802a02b6d95da4dadb9699fcbeba0afc99f9e&scene=21#wechat_redirect
第 8 章 容器网络 - 062 - 如何使用 flannel host-gw backend?的更多相关文章
- 第 8 章 容器网络 - 059 - 安装配置 flannel
		安装配置 flannel 1) build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build. 不过用于做 build ... 
- 第 8 章 容器网络 - 072 - 一文搞懂各种 Docker 网络
		Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Over ... 
- 第 8 章 容器网络 - 067 - 如何部署 Calico 网络?
		0.准备工作 Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来. 与 VxLAN 不同的是,Cal ... 
- 第 8 章 容器网络 - 063 - 如何使用 Weave 网络?
		如何使用 Weave 网络? weave 是 Weaveworks 开发的容器网络解决方案. weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来. 对容器来说,weave 就像一个巨大的以 ... 
- 第 8 章 容器网络 - 061 - flannel 的连通与隔离
		flannel 的连通与隔离 测试 bbox1 和 bbxo2 的连通性: bbox1 能够 ping 到位于不同 subnet 的 bbox2,通过 traceroute 分析一下 bbox1 到 ... 
- 第 8 章 容器网络 - 058 - flannel 概述
		flannel 概述 flannel 是 CoreOS 开发的容器网络解决方案. flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 h ... 
- 第 8 章 容器网络 - 054 - 准备 macvlan 环境
		准备 macvlan 环境 macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置 ... 
- 第 8 章 容器网络 - 071 - 如何定制 Calico 的 IP 池?
		定制IP池 首先定义一个 IP Pool,比如: calicoctl create -f ipPool.yml 用此 IP Pool 创建 calico 网络. docker network crea ... 
- 第 8 章 容器网络 - 070 - 如何定制 Calico 网络 Policy?
		定制 Calico 网络 Policy Calico 默认的 policy 规则是:容器只能与同一个 calico 网络中的容器通信. Calico 能够让用户定义灵活的 policy 规则,精细化控 ... 
随机推荐
- Consul部署架构
			Consul 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接,用于实现分布式系统的服务发现与配置. 应用Consul提供的服务需要建立Consul集群.在Consul方案中,每个 ... 
- Eclipse 00: 安装教程 + 汉化 + 简单创建java项目
			Java 安装教程(Eclipse) 目录: 要安装Java 要分两个步骤: 1.JDK的安装 2.Eclipse的安装 3.Eclipse汉化 4.Eclipse创建简单java项目 1和2的顺序不 ... 
- web前端,多语言切换,data-localize,
			demo: 链接:https://pan.baidu.com/s/1zhFHTv4P_epbBfpiggVDXg 提取码:aqts 要想有效果,必须发布在服务器上,可以在IIS上测试. 我只用到了中文 ... 
- jquery实现一个标签图标hover到上面的时候显示tooltip
			设计图: 解决思路:1.在thumbnailbox.js这个插件中加入tags弹出框显示的内容,一开始让这些内容display:none; 然后再用css画出来一个三角形 实现方法: 知识点:Jque ... 
- git操作常见错误处理
			1.Error:The authenticity of host 'github.com (192.30.255.112)' can't be established. Git密钥认证github时出 ... 
- Flask项目示例目录
			Flask不同于Django,Django在创建程序时自动得到必要的目录文件,而Flask则只有一个空文件夹,所以关于Flask项目的目录我们需要自行配置. 首先利用pycharm创建一个项目,在根目 ... 
- Python---http协议.md
			一.什么是URL? URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档.URL由协议.主机和端口(默认为80)以及文件名三部分构成,如: h ... 
- 160A
			#include <stdio.h> int main() { int n; int sum1=0, sum2=0, sum3=0; int x, y, z; scanf("%d ... 
- 024-母版页MasterPage
			网站的布局通常是统一的,上面是Logo.菜单条.下面是公司地址.版权声明等.如果每个页面都重复做这些功能的话:重复性劳动.一旦修改那么每个页面都要修改..Net中一般用母版(MasterPage)技术 ... 
- mysql迁移到data下
			http://www.jb51.net/article/47897.htm 由于yum安装mysql的时候,数据库的data目录默认是在/var/lib下,出于数据安全性的考虑需要把它挪到/data分 ... 
