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

最新文章

  1. 顺序表(SeqList)
  2. Atitit 如何利用先有索引项进行查询性能优化
  3. json对象转换为json字符串
  4. Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用
  5. PowerDesigner打开设计文件后提示failed to read the fileXXX的解决办法
  6. python (11)文件的读写 按行读文件
  7. [wikioi]线段覆盖
  8. HDU 3392 Pie(DP)
  9. PTA 06-图3 六度空间 (30分)
  10. Unity 的 unitypackage 的存放路径
  11. php基础(五)日期
  12. dedecms 使用自由列表实现首页列表分页
  13. [转]CAS原理
  14. web端常见测试点
  15. Vscode的python配置(macOS)
  16. 简单分析Java中审批业务流程业务原理
  17. C# 窗体内有子控件时鼠标检测
  18. apache 设置环境变量
  19. winform 之公共控件
  20. 真验货客户尾缀sql

热门文章

  1. 一年工作经验的大专生程序员(java后台)
  2. shiro 角色与权限的解读
  3. XMLHttpRequest请求被劫持
  4. linux delete file
  5. Parallels Desktop 重装系统
  6. 经验分享 | 如何拿到自己满意的offer?
  7. js高级---本地对象、内置对象、宿主对象
  8. Delphi7使用一段时间后抽风提示注册
  9. 知识在与温故、总结-再读CLR
  10. 2017.11.18 手把手教你学51单片机-点亮LED