什么是Flannel Flannel是一种跨主机容器间的网络通信方案,本身只是一个框架,真正提供网络功能的是其具体的后端实现 Flannel的后端实现有哪几种?...UDP VXLAN host-gw Flannel TUN设备的作用是什么?...Flannel会在宿主机上创建一个flannel0设备,它是一个TUN设备,TUN设备工作在三层,用来在操作系统内核和应用程序之间传递IP包。 Flannel中的子网是?...设备在收到数据包以后,会交给创建该设备的Flannel进程 Flannel进程在收到数据包后,发现目的IP是100.96.2.5,根据Etcd维护的子网信息,可以找到容器对应的宿主机IP是10.168.0.3...因此只需要将数据包发往目的主机的8285端口即可 此时只要源主机和目的主机网络是相通的,数据包即可被正常发送到目的主机 Flannel UDP模式下的通信图如下: Flannel UDP模式的缺点 Flannel
原始数据是在起始节点的Flannel服务上进行UDP封装的,投递到目的节点后就被另一端的Flannel服务还原成了原始的数据包,两边的Docker服务都感觉不到这个过程的存在。 ...这个IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。 ...第三个问题,为什么在发送节点上的数据会从docker0路由到flannel0虚拟网卡,在目的节点会从flannel0路由到docker0虚拟网卡? 我们来看一眼安装了Flannel的节点上的路由表。...回到顶部 3Flannel的安装和配置 Flannel是Golang编写的程序,因此的安装十分简单。 ...到此,整个Flannel集群也就正常运行了。 最后,前面反复提到过Flannel有一个保存在Etcd的路由表,可以在Etcd数据中找到这些路由记录,如下图。
Flannel 则使用虚拟网络(overlay network)来实现网络功能。...Flannel 支持多种 overlay 网络方案,例如 VXLAN、GRE 和 Host-gw。...Flannel 的配置和部署相对来说比较简单,因为它不需要为每个节点设置路由规则,而是使用 overlay 网络。...安全性Calico 和 Flannel 都提供了一定程度的安全性。Calico 可以通过网络策略来控制容器之间的通信,Flannel 则使用网络策略来限制容器之间的通信。...Flannel 的扩展性也非常好,因为它使用的是 overlay 网络,可以轻松地跨越多个节点和数据中心。
问题描述 etcd 3.3.1 flannel 0.11.0 flannel启动时报错,启动参数如下 1 ..../flannel -etcd-keyfile=/etc/kubernetes/ssl/etcd-client-key.pem -etcd-cafile=/etc/kubernetes/ssl/ca.pem...2331 main.go:382] Couldn't fetch network config: 100: Key not found (/coreos.com) [22] 其中coreos.com是启动flannel...coreos.com/network/config '{"Network":"192.168.0.0/16","SubnetLen":24,"Backend":{"Type":"vxlan"}}' OK 重新启动flannel...网上搜了下说是etcd api版本的问题,不是很明白,然后去看代码,发现flannel在使用etcd时只支持etcd v2版本的api,因为上线添加key-value时使用的是v3版本的api,所以导致虽然添加成功了
VXLAN是Linux内核本身支持的一种网络虚拟化技术。 VXLAN的目的是?...上述过程我们都是VTEP设备的信息,但是VTEP设备所在的宿主机在哪我们还不清楚,为了知道宿主机在哪,flannel.1设备在这里还会扮演网桥的角色,在Linux内核中,网桥转发的依据需要查找一个FDB...VTEP设备的MAC地址,此时会进行第一次封包工作,在原始数据包上增加一个二层的数据头,如下图: 上述封装出来的数据帧并不能在我们的宿主机二层网络里面进行传输,因此Linux内核需要进一步进行封装,以便通过我们宿主机的...进一步封装二层数据帧,首先会增加一个VXLAN头,该头里面有一个重要的标志称之为VNI,在Flannel中VNI的默认值是1, Flannel默认的VETP设备都是flannel.1,它是VTEP设备识别该数据帧需不需要自己处理的重要标志...Linux接着会将数据帧封装成一个UDP包进行转发,因此会增加UDP的header UDP包是一个四层数据包,因此Linux内核会通过FDB表找到目的设备VTEP对应宿主机的IP,紧接着在IP包前面添加二层数据帧头
Flannel的网络模式切换非常简单,这也符合这款CNI最初的设计理念——足够轻量级。 Flannel有两种网络模式:VxLAN和Host-GW,默认的模式是VxLAN。...首先找到Flannel的部署yaml文件,参考github上的文件 在部署文件中找到net-conf.json位置,如下: net-conf.json: | { "Network..."Type": "vxlan" } } 修改里面的Type即可更改网络模式,可选项: host-gw vxlan 然后使用kubectl apply -f kube-flannel.yml
操作环境 网络拓扑图 操作步骤 配置k8s-master 1.在k8s-master节点上创建flannel网络 [root@k8s-master yaml]# etcdctl mk /atomic.io...This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX...start flanneld.service 在启动flannel,通过ifconfig可以查看到flannel0 [root@k8s-master ~]# ifconfig ens192...This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX...start flanneld.service 3.启动flannel后,可以通过ifconfig查看到flannel0 [root@k8s-node1 ~]# ifconfig docker0
前言 今天来聊聊 Flannel,Flannel 是 Kubernetes 默认网络组件,再聊 Flannel 时,我们得先明白一个叫 CNI 东东,CNI 是什么?能有什么用?下文会做出解释。...CNI 简单介绍 CNI(Container Network Interface)是 CNCF 旗下的一个项目,由一组用于配置Linux容器网络接口的规范和库组成,同时还包含了一些插件。...它基于Linux TUN/TAP,使用UDP封装IP包来创建overlay网络,并借助etcd维护网络的分配情况。...Flannel 原理 Flannel 实质上是一种 覆盖网络(overlay network),也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持 UDP、VxLAN、Host Gw...一个是数据包的流出,当从节点出来的数据包,应该转发到哪个node上,这些都是由flannel去维护的。
cni0:是一个linux bridge,用于连接同一个宿主机上的pod。 vethf12090da@if3:容器内eth0网卡的对端设备,从名字上看,在容器内eth0网卡的编号应为3。...地址(也就是VTEP设备的MAC地址),封装成数据桢,发送给目的VTEP设备 ,封装过程只是加了一个二层头,不会改变“原始IP包”的内容, Linux会再加上一个VxLAN头,VxLAN头里有一个重要的标志叫...在Flannel中,VNI的默认值是1,这也是为什么宿主机的VTEP设备都叫flannel.1的原因 一个flannel.1设备只知道另一端flannel.1设备的MAC地址,却不知道对应的宿主机地址是什么...在linux内核里面,网络设备进行转发的依据,来自FDB的转发数据库 https://juejin.cn/post/6994825163757846565 http://just4coding.com/...2021/11/03/flannel/
flannel 没有VLAN划分 1、设置hosts (所有主机) vi /etc/hosts 192.168.118.77 k8smaster 192.168.118.72 k8snode01...172.17.1.0", "SubnetMax": "172.17.254.0"}' etcdctl -C http://192.168.118.77:4001 cluster-health 4、安装flannel...(所有主机) yum install -y flannel cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak vi /etc/sysconfig...start flanneld.service systemctl restart docker 5、设置DOCKER默认网络,(所有主机,每台的子网不一样,分别设置) cat /run/flannel.../subnet.env FLANNEL_NETWORK=172.17.0.0/16 FLANNEL_SUBNET=172.17.82.1/24 FLANNEL_MTU=1472 FLANNEL_IPMASQ
二、VXLAN VXLAN:Virtual Extensible LAN(虚拟可扩展局域网),是Linux内核本身就支持的一种虚拟化网络技术,它可以完全在内核态实现上述的封装和解封装过程,减少用户态到内核态的切换次数...MAC地址,并将其加原始包上,封装成二层数据帧(将源MAC地址和目的MAC地址封装在它们对应的IP头外部); Linux内核把这个数据帧封装成普通的可传输的数据帧,通过宿主机的eth0进行传输(也就是在原有的数据帧上面加一个...VXLAN头VNI,它是识别某个数据帧是不是归自己处理的的重要标识,而在flannel中,VNI的默认值就是1,这是由于宿主机上的VTEP设备名称叫flannel.1,这里的1就是VNI的值); 然后Linux...内核会把这个数据帧封装到UDP包里发出去; Node02收到包后发现VNI为 1,Linux内核会对其进行解包,拿到里面的数据帧,然后根据VNI的值把它交给Node02上的flannel.1设备,然后继续进行接下来的处理...; 在这种场景下,flannel.1设备实际扮演的是一个网桥的角色,在二层网络进行UDP包的转发,在Linux内核中,网桥设备进行转发的依据是一个叫做FDB(Foewarding Database)的转发数据库
安装 Flannel 的安装逻辑如下,通过安装的 yaml 文件里有两个 initContainer,专门就是用来做 CNI 和 Flannel 配置的安装,所以命名也是叫 install-cni-plugin...以及 install-cni 那么这两个容器主要是怎么安装的呢,其实很简单,可以看看 args 字段,实际上就是把 flannel 的二进制,以及 cni-conf.json 和 10-flannel.conflist...:v1.1.0 command: - cp args: - -f - /flannel - /opt/cni/bin/flannel volumeMounts: - name...Pod: ✔ kube-flannel-ds-82mww / # ls /etc/kube-flannel/ cni-conf.json net-conf.json 默认配置 vxlan 是 Flannel...自动改为1500 # cat /run/flannel/subnet.env FLANNEL_NETWORK=10.244.0.0/16 FLANNEL_SUBNET=10.244.0.1/24 FLANNEL_MTU
安装的过程非常简单,主要分为两步: 第一步安装flannel yum install flannel 或者通过kubernetes的daemonset方式启动,配置flannel用的etcd地址 第二步配置集群网络...flannel如何修改docker0网段呢?...可以看到每个主机上面都有到另外两台机器的路由,这个路由是onlink路由,onlink参数表明强制此网关是“在链路上”的(虽然并没有链路层路由),否则linux上面是没法添加不同网段的路由。...最后通过WriteSubnetFile写本地子网文件, # cat /run/flannel/subnet.env FLANNEL_NETWORK=10.254.0.0/16 FLANNEL_SUBNET...当然flannel启动后还需要持续的watch etcd里面的数据,这是当有新的flannel节点加入,或者变更的时候,其他flannel节点能够动态更新的那三张表。
异常现象 生产环境 三台服务器安装服务如下: 主机 服务 node01 docker、etcd、flannel node02 docker、etcd、flannel node03 docker、etcd...、flannel 三台服务器是一个etcd集群,然后基于flannel网络搭建的docker; 部署的服务node01上分别由config配置中心、discovery注册中心、gateway网关,剩下的服务都是基于前三个状态正常的情况下下才可以...systemctl stop firewalld && setenforce 0 flannel通过systemctl方式是可以正常启动,但是通过查看状态可以看到报错 systemctl status...flanneld 报错内容大概:连接不到X.X.X.X:2379那就是flannel连接不到etcd 连接出现异常 etcd是开机自启动的,然后需要启动flannel,接着启动docker但是没有效果!
# curl -L https://github.com/coreos/flannel/releases/download/v0.7.0/flannel-v0.7.0-linux-amd64.tar.gz...启动flannel 命令行方式运行 $ /opt/flannel/flanneld --etcd-endpoints="http://etcd1.hi-linux.com:2379" --ip-masq...] User=root ExecStart=/opt/flannel/flanneld \ --etcd-endpoints="http://etcd1.hi-linux.com:2379,http:/.../etcd2.hi-linux.com:2379,http://etcd3.hi-linux.com:2379" \ --iface=192.168.2.210 \ --ip-masq Restart=...验证flannel网络 在etcd1节点上看etcd中的内容 $ etcdctl --endpoints "http://etcd1.hi-linux.com:2379" ls /coreos.com
Flannel是一个专为kubernetes定制的三层网络解决方案,主要用于解决容器的跨主机通信问题。...首先,flannel利用Kubernetes API或者etcd用于存储整个集群的网络配置,其中最主要的内容为设置集群的网络地址空间。...二、Flannel Network 实现原理 Flannel为每个主机提供独立的子网,整个集群的网络信息存储在etcd上。对于跨主机的转发,目标容器的IP地址,需要从etcd获取。...进程监听8285端口,负责解封包 解封装的数据包将转发到虚拟 NIC Flannel0 Flannel0查询路由表,解封包,并将数据包发送到Docker0 Docker0确定目标容器并发送包到目标容器...在常用的vxlan模式中,涉及到上面步骤提到的封包和拆包,这也是Flannel网络传输效率相对低的原因。
flannel 使用etcd存储配置数据和子网分配信息。flannel 启动之后,后台进程首先检索配置和正在使用的子网列表,然后选择一个可用的子网,然后尝试去注册它。...这个IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。...3)为什么在发送节点上的数据会从docker0路由到flannel0虚拟网卡,在目的节点会从flannel0路由到docker0虚拟网卡?...flannel的key(这个只在安装了etcd的机器上操作) Flannel使用Etcd进行配置,来保证多个Flannel实例之间的配置一致性,所以需要在etcd上进行如下配置('/atomic.io/...这个IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。
一 Flannel组件 1.1 flannel介绍 Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平网络空间中。...flannel架构图: ? 如上图所示,Flannel首先创建了一个名为flannel0的网桥,而且这个网桥的一端连接docker0网桥,另一端连接一个叫作flanneld的服务进程。...而且在Flannel分配好地址段后,其余操作由Docker完成的,Flannel通过修改Docker的启动参数将分配给它的地址段传递进去: --bip=172.17.18.1/24 通过如上方式,Flannel...提示:更多flannel实现和部署参考:《008.Docker Flannel+Etcd分布式网络部署》。...Calico在每个计算节点都利用Linux Kernel实现了一个高效的vRouter来负责数据转发。
shell: systemctl daemon-reload && systemctl restart kube-proxy 更多tasks,defaults,templates,files见网盘 flannel...参考https://blog.csdn.net/wangzhkai/article/details/80294762 因为偷懒 flannel 没写成ansible是手动在两台机器安装中。...安装步骤 0.将flannel信息存入etcd中 //172.16.0.0/16 是docker的网段 etcdctl set /kubernetes/network/config '{ "Network.../mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env Restart=on-failure [Install...-H fd:// --containerd=/run/containerd/containerd.sock ExecReload=/bin/kill -s HUP $MAINPID 4.重启 flannel
领取专属 10元无门槛券
手把手带您无忧上云