随着docker容器化兴起,云计算面对的挑战越来越大,例如:网络管理、存储等。一个数据中心很容易搞出成百上千个容器,这么多的容器我们需要如何管理呢?今天来介绍的flannel就是为了解决网络问题。

一、网络管理方案

目前使用最多的解决方案有两种:直接路由和overlay network。具体差异如下:

  特点 代表
直接路由 采用直接路由的方式,这种方式性能损耗最低,不需要修改报文数据,但是如果网络比较复杂场景下,路由表会很复杂,对运维同事提出了较高的要求。 calico
overlay network 通过overlay技术(可以理解成隧道技术),在原始报文外再包一层四层协议(udp协议),通过主机网络进行路由转发。这种方式性能有一定损耗,主要体现在对原始报文的修改。目前overlay主要采用vxlan。 flannel

二、flannel网络解决方案backend

目前flannel有多种backend管理网络,常用的有三种:hostgw,udp,vxlan,三者差异如下:

  特点
hostgw 这种方式就是直接路由
vxlan 是flannel推荐的方式。需要通信的网络设备能够支持vxlan协议
udp 该方式与vxlan很类似,它对ip层网络进行包装。通常用于调试环境或者不支持vxlan协议网络环境中。

后续的源码分析,主要针对vxlan这种backend进行说明。flannel还支持AWS、GCE 和 AliVPC,不过这几种都是需要云服务商提供服务的。

下面是对vxlan、udp报文格式举例说明:

通过上面两张图可知,这两种方式区别:vxlan方式下面多出了:vxlan header和内部mac地址(Vtep的地址)并且内部源ip为vtep所在ip地址。对于vxlan说明,这里有一篇比较高质量文章,大家可参考《vxlan 协议原理简介》。

三、编译

如果要学习一款开源软件有一种最好的方式就是调试。在调试之前我们肯定需要自己编译一下,具体编译步骤如下:

1)创建目录

这里创建目录相当于创建工程目录,具体如下:

[root@localhost /home[12:42]#mkdir /home/flannel
[root@localhost /home[12:42]#mkdir /home/flannel/bin
[root@localhost /home[12:42]#mkdir /home/flannel/pkg
[root@localhost /home[12:42]#mkdir -p /home/flannel/src/github.com/coreos/
[root@localhost /home[12:42]#tree flannel
flannel
├── bin
├── pkg
└── src└── github.com└── coreos

2)下载代码

[root@localhost /home[12:42]#cd flannel/src/github.com/coreos/
[root@localhost /home/flannel/src/github.com/coreos/[12:42]#git clone https://github.com/coreos/flannel.git
Cloning into 'flannel'...
remote: Enumerating objects: 53, done.
remote: Counting objects: 100% (53/53), done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 25608 (delta 20), reused 8 (delta 7), pack-reused 25555
Receiving objects: 100% (25608/25608), 45.51 MiB | 336.00 KiB/s, done.
Resolving deltas: 100% (9173/9173), done.
Checking out files: 100% (2261/2261), done.
[root@localhost /home[12:42]#

3)编译

flannel是golang语言编写的,所以编译环境中必须安装golang。执行如下代码进行编译:

[root@localhost /home/flannel/src/github.com/coreos[12:54]#export GOPATH=/home/flannel
[root@localhost /home/flannel/src/github.com/coreos[12:54]#cd flannel
[root@localhost /home/flannel/src/github.com/coreos/flannel[12:54]#make dist/flanneld

在执行make命令之前必须要声明一下环境变量GOPATH,执行工程根目录。 在编译过程中之出现了一个这样的错误:

[root@localhost /home/flannel/src/github.com/coreos[12:54]# make dist/flanneld
go build -o dist/flanneld \-ldflags '-s -w -X github.com/coreos/flannel/version.Version=v0.10.0-71-g6147523 -extldflags "-static"'
# github.com/coreos/flannel
/usr/lib/golang/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/bin/ld: cannot find -lpthread
/usr/bin/ld: cannot find -lc
collect2: 错误:ld 返回 1make: *** [dist/flanneld] 错误 2
[root@localhost /home/flannel/src/github.com/coreos[12:54]#yum install glic* -y

缺少库文件, 可以通过yum install glic* -y进行安装/更新,安装完后在执行make命令行即可。

接下来就可以通过gdb进行调试了。对于如何调试可参考《go语言程序-gdb调试问题》。

四、总结

本篇只简单介绍flannel相关内容,对于flannel的使用可参考《Flannel配置以及部署》。这里还有一个小小的福利,用于wirshark解析flannel报文,大家可自行下载(同时支持etcd报文)。后面章节,将对flannel源码进行分析。

深入剖析Flannel-简介相关推荐

  1. webserver获取http请求方的服务器ip_光大科技基础设施团队剖析HTTP协议

    /HTTP协议剖析/ 团队简介 我们是光大科技有限公司智能云计算部基础设施团队,致力于规划.设计.运维管理集团基础设施环境,保障集团基础设施环境稳定运行,我们团队拥有经验丰富的网络,应用交付,安全专家 ...

  2. Kubernetes二进制部署——Flannel网络

    Kubernetes二进制部署--Flannel网络 一.Flannel简介 二.Flannel原理 三.Flannel的作用 四.Flannel 网络配置 1.node 节点安装 docker 2. ...

  3. k8s——flannel网络

    文章目录 一.Flannel简介 二.Flannel网络概述 三.部署 一.Flannel简介 1.当一个k8s集群创建好后一般会存在三种IP,分别是:Pod IP.Node IP.Cluster I ...

  4. Spark入门(三)——SparkRDD剖析(面试点)

    Spark RDD剖析 RDD简介 如下案例: RDD容错 RDD 宽窄依赖 Sage划分(重点) 小结 RDD缓存机制 Check Point 机制 RDD简介 Spark计算中一个重要的概念就是可 ...

  5. Kubernetes网络插件Flannel

    1.Kubernetes网络通信 (1) 容器间通信 同一个Pod内的多个容器间的通信, lo (2)Pod通信 Pod IP <-(直达)-> Pod IP 意思就是pod和pod之间使 ...

  6. 斯坦福大学计算机专业培养方案剖析

    斯坦福大学计算机专业培养方案剖析 作者简介:许忠信,博士,清华大学计算机科学与技术系副教授,2003年2月至8月于美国斯坦福大学任访问学者.研究方向:科学计算可视化. 该文发表于<计算机教育&g ...

  7. 20本经典云计算书籍和内容简介

    云计算 : 深刻改变未来 内容简介 · · · · · · 本书概述了云计算的起源.发展以及商业模式,介绍了云计算的关键技术.典型应用以及开源软件和社区. 云计算既是机遇也是挑战,中国科技何去何从?需 ...

  8. Python源码学习:启动流程简析

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...

  9. cni k8s 插件安装_第一次,如此清晰脱俗的直解K8S网络

    图片出自:<你女儿也能看懂的插画版 Kubernetes 指南> K8S 网络设计原则 K8S 网络设计原则如下: 每个 Pod 都拥有一个独立 IP 地址,Pod 内所有容器共享该 IP ...

  10. 转 -- 推荐几本云计算的经典书籍

    几本经典的云计算方面的书籍下载 几本经典的云计算方面的书籍下载:虚拟化与云计算, 走近云计算, 云计算宝典:技术与实践, 云计算核心技术剖析 虚拟化与云计算 编辑推荐 作为全球第一本系统.全面介绍虚拟 ...

最新文章

  1. PESCMS Ticket 客服工单系统 v1.2.5 发布
  2. Linux-使用 Find 命令找到那些需要清理的文件
  3. 数据导出到Excel
  4. Tomcat启动设置环境变量
  5. 【C语言进阶深度学习记录】二十三 数组的本质分析
  6. duilib中界面的布局方式
  7. python以运行效率高著称吗_提升Python程序运行效率的6个方法
  8. php 使用curl模拟登录人人(校内)网
  9. RPC Demo(二) 基于 Zookeeper 的服务发现
  10. [Win32]创建模态窗口
  11. call需要多大带宽 video_从游戏的发展趋势看,未来显存多大能够用?
  12. 项目实战之vue掘金小册`WebApp`
  13. office2010软件安装资料及教程
  14. (w10)Prtsc截图键无法正常使用——解决办法
  15. FFmpeg 视频添加水印
  16. ARM920T的Cache
  17. java实现token 过期,java – SQS ExpiredToken:请求中包含的安全令牌是过期状态码:403...
  18. Programming Ruby 读书笔记(七)
  19. 有80%的疾病都是由于不良生活习惯所导致的,常见8大不良习惯,既伤身又伤神
  20. window系统 node.js安装 (node-v14安装配置、node-v16及其他版本安装配置)

热门文章

  1. Python绘制和保存动态图(gif或MP4)
  2. dom(一)——获取文本内容的方法
  3. 如何在 Windows 上的 VirtualBox 中安装 macOS Big Sur
  4. swiper轮播图小圆点动态改变样式
  5. c#检测网络连接信息
  6. 积累按键精灵的编程技能减少一些繁琐操作增加效率
  7. 一款与众不同的壁纸应用——《MW地图壁纸》
  8. 拒绝屏幕失灵,电容屏的保养须知!
  9. 微信小程序基础之开发环境搭建
  10. 03-定制PPT主题