Kubernetes网络分析之Flannel

Flannel作为CNI插件,用于实现Kubernetes集群的网络互通。通过vxlan、UDP等模式,Flannel在不同主机间建立overlay网络。在vxlan模式下,数据包经过封包、路由、ARP和FDB处理,实现容器间的通信。文章详细解释了Flannel的工作原理、配置过程以及其在网络通信中的关键角色。
摘要由CSDN通过智能技术生成

Flannel是cereos开源的CNI网络插件,下图flannel官网提供的一个数据包经过封包、传输以及拆包的示意图,从这个图片里面里面可以看出两台机器的docker0分别处于不同的段:10.1.20.1/24 和 10.1.15.1/24 ,如果从Web App Frontend1 pod(10.1.15.2)去连接另一台主机上的Backend Service2 pod(10.1.20.3),网络包从宿主机192.168.0.100发往192.168.0.200,内层容器的数据包被封装到宿主机的UDP里面,并且在外层包装了宿主机的IP和mac地址。这就是一个经典的overlay网络,因为容器的IP是一个内部IP,无法从跨宿主机通信,所以容器的网络互通,需要承载到宿主机的网络之上。

 

1.png

flannel的支持多种网络模式,常用用都是vxlan、UDP、hostgw、ipip以及gce和阿里云等,vxlan和UDP的区别是vxlan是内核封包,而UDP是flanneld用户态程序封包,所以UDP的方式性能会稍差;hostgw模式是一种主机网关模式,容器到另外一个主机上容器的网关设置成所在主机的网卡地址,这个和calico非常相似,只不过calico是通过BGP声明,而hostgw是通过中心的etcd分发,所以hostgw是直连模式,不需要通过overlay封包和拆包,性能比较高,但hostgw模式最大的缺点是必须是在一个二层网络中,毕竟下一跳的路由需要在邻居表中,否则无法通行。

在实际的生产环境总,最常用的还是vxlan模式,我们先看工作原理,然后通过源码解析实现过程。

安装的过程非常简单,主要分为两步:

第一步安装flannel,

yum install flannel 或者通过kubernetes的daemonset方式启动,配置flannel用的etcd地址

 

第二步是配置集群网络,

curl -L http://etcdurl:2379/v2/keys/flannel/network/config -XPUT -d value="
{
\"Network\":\"172.16.0.0/16\",\"SubnetLen\":24,\"Backend\":
{
\"Type\":\"vxlan\",\"VNI\":1
}
}"
然后启动每个节点的flanned程序。

 工作原理:

1、容器的地址如何分配:

Docker容器启动时候通过docker0分配IP地址,flannel为每个机器分配一个IP段,配置在docker0上面,容器启动后就在本段内选择一个未占用的IP,那么flannel如何修改docker0网段的呢?

先看一下 flannel的启动文件 /usr/lib/systemd/system/flanneld.service


[Service]

Type=notify

EnvironmentFile=/etc/sysconfig/flanneld

ExecStart=/usr/bin/flanneld
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值