深入剖析Flannel-简介
随着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-简介相关推荐
- webserver获取http请求方的服务器ip_光大科技基础设施团队剖析HTTP协议
/HTTP协议剖析/ 团队简介 我们是光大科技有限公司智能云计算部基础设施团队,致力于规划.设计.运维管理集团基础设施环境,保障集团基础设施环境稳定运行,我们团队拥有经验丰富的网络,应用交付,安全专家 ...
- Kubernetes二进制部署——Flannel网络
Kubernetes二进制部署--Flannel网络 一.Flannel简介 二.Flannel原理 三.Flannel的作用 四.Flannel 网络配置 1.node 节点安装 docker 2. ...
- k8s——flannel网络
文章目录 一.Flannel简介 二.Flannel网络概述 三.部署 一.Flannel简介 1.当一个k8s集群创建好后一般会存在三种IP,分别是:Pod IP.Node IP.Cluster I ...
- Spark入门(三)——SparkRDD剖析(面试点)
Spark RDD剖析 RDD简介 如下案例: RDD容错 RDD 宽窄依赖 Sage划分(重点) 小结 RDD缓存机制 Check Point 机制 RDD简介 Spark计算中一个重要的概念就是可 ...
- Kubernetes网络插件Flannel
1.Kubernetes网络通信 (1) 容器间通信 同一个Pod内的多个容器间的通信, lo (2)Pod通信 Pod IP <-(直达)-> Pod IP 意思就是pod和pod之间使 ...
- 斯坦福大学计算机专业培养方案剖析
斯坦福大学计算机专业培养方案剖析 作者简介:许忠信,博士,清华大学计算机科学与技术系副教授,2003年2月至8月于美国斯坦福大学任访问学者.研究方向:科学计算可视化. 该文发表于<计算机教育&g ...
- 20本经典云计算书籍和内容简介
云计算 : 深刻改变未来 内容简介 · · · · · · 本书概述了云计算的起源.发展以及商业模式,介绍了云计算的关键技术.典型应用以及开源软件和社区. 云计算既是机遇也是挑战,中国科技何去何从?需 ...
- Python源码学习:启动流程简析
Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...
- cni k8s 插件安装_第一次,如此清晰脱俗的直解K8S网络
图片出自:<你女儿也能看懂的插画版 Kubernetes 指南> K8S 网络设计原则 K8S 网络设计原则如下: 每个 Pod 都拥有一个独立 IP 地址,Pod 内所有容器共享该 IP ...
- 转 -- 推荐几本云计算的经典书籍
几本经典的云计算方面的书籍下载 几本经典的云计算方面的书籍下载:虚拟化与云计算, 走近云计算, 云计算宝典:技术与实践, 云计算核心技术剖析 虚拟化与云计算 编辑推荐 作为全球第一本系统.全面介绍虚拟 ...
最新文章
- PESCMS Ticket 客服工单系统 v1.2.5 发布
- Linux-使用 Find 命令找到那些需要清理的文件
- 数据导出到Excel
- Tomcat启动设置环境变量
- 【C语言进阶深度学习记录】二十三 数组的本质分析
- duilib中界面的布局方式
- python以运行效率高著称吗_提升Python程序运行效率的6个方法
- php 使用curl模拟登录人人(校内)网
- RPC Demo(二) 基于 Zookeeper 的服务发现
- [Win32]创建模态窗口
- call需要多大带宽 video_从游戏的发展趋势看,未来显存多大能够用?
- 项目实战之vue掘金小册`WebApp`
- office2010软件安装资料及教程
- (w10)Prtsc截图键无法正常使用——解决办法
- FFmpeg 视频添加水印
- ARM920T的Cache
- java实现token 过期,java – SQS ExpiredToken:请求中包含的安全令牌是过期状态码:403...
- Programming Ruby 读书笔记(七)
- 有80%的疾病都是由于不良生活习惯所导致的,常见8大不良习惯,既伤身又伤神
- window系统 node.js安装 (node-v14安装配置、node-v16及其他版本安装配置)