Flannel是一个专为kubernetes定制的三层网络解决方案,主要用于解决容器的跨主机通信问题。...首先,flannel利用Kubernetes API或者etcd用于存储整个集群的网络配置,其中最主要的内容为设置集群的网络地址空间。...二、Flannel Network 实现原理 Flannel为每个主机提供独立的子网,整个集群的网络信息存储在etcd上。对于跨主机的转发,目标容器的IP地址,需要从etcd获取。...进程监听8285端口,负责解封包 解封装的数据包将转发到虚拟 NIC Flannel0 Flannel0查询路由表,解封包,并将数据包发送到Docker0 Docker0确定目标容器并发送包到目标容器...在常用的vxlan模式中,涉及到上面步骤提到的封包和拆包,这也是Flannel网络传输效率相对低的原因。
说明 本文主要包括以下内容: vxlan简单介绍 为什么要使用vxlan k8s使用flannel(vxlan)如何进行pod之间的通信 vxlan简单介绍 VXLAN(Virtual eXtensible...解决这个问题同时保证二层的广播域不会过分扩大,这也是云计算网络的要求 k8s中使用flannel(vxlan) 说明:我这里使用kubeadm安装的k8s,version为1.19,flannel的网络模式为...wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 安装flannel...之后,它对主机做了什么 创建一个名为flannel.1的VXLAN网卡 [root@master huazai]# ip -d link show flannel.1 4: flannel.1: <BROADCAST...dstport为8472,local IP为节点IP,查看flannel.1的信息如下 [root@master huazai]# ifconfig flannel.1 flannel.1: flags
flannel网络 flannel网络有三种: 1、vxlan(隧道方案)不需要后续操作,pod与pod之间网络是互通的。...部署 获取flannel部署文件 github地址:https://github.com/flannel-io/flannel 从GitHub上可以找到相关部署说明 kubectl apply -f https.../flannel created clusterrolebinding.rbac.authorization.k8s.io/flannel created serviceaccount/flannel.../flannel deleted serviceaccount/flannel deleted configmap/kube-flannel-cfg deleted daemonset.apps/kube-flannel-ds.../flannel created serviceaccount/flannel created configmap/kube-flannel-cfg created daemonset.apps/kube-flannel-ds
Flannel是一个专为kubernetes定制的三层网络解决方案,主要用于解决容器的跨主机通信问题。...首先,flannel利用Kubernetes API或者etcd用于存储整个集群的网络配置,其中最主要的内容为设置集群的网络地址空间。...0x01 Flannel实现原理 Flannel为每个主机提供独立的子网,整个集群的网络信息存储在etcd上。对于跨主机的转发,目标容器的IP地址,需要从etcd获取。 先上图,比较直观: ?...Docker0确定Container3的IP地址,通过查询本地路由表到外部容器,并将数据包发送到虚拟NIC Flannel0。 Flannel0收到的数据包被转发到Flanneld进程。...Flannel0查询路由表,解封包,并将数据包发送到Docker0。 Docker0确定目标容器并发送包到目标容器。
Flannel网络是在以太网的基础上再封装的一个包含容器IP地址的虚拟网络。...在master节点上建一个文件夹 mkdir flannel cd flannel 下载安装包 wget https://github.com/coreos/flannel/releases/download.../v0.9.1/flannel-v0.9.1-linux-amd64.tar.gz 解压 tar -xzvf flannel-v0.9.1-linux-amd64.tar.gz 将解压后的两个文件flanneld...ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env...的网关 比如我在host2上ping host1的flannel网关 # ping 172.17.27.1 PING 172.17.27.1 (172.17.27.1) 56(84) bytes of
我们在之前文章里采用的是基于flannel的underlay网络方式,所以这里主要介绍flannel underlay网络,以之前文章中安装的nginx-app为例: nginx-app的service...当然,这个也是flannel的underlay网络host gw方式的限制,既要求所有的k8s worker node节点都在同一个二层网络里(也可以认为是在同一个ip子网里)。...所以综上总结,对于underlay(flannel host gw方式),数据包: 从源pod的network namespace到host network namespace的docker0 linux
/coreos.com/network/subnets/10.0.2.0-24 获取子网列表 $ etcdctl ls /k8s/network/subnets /k8s/network.../subnets/10.0.86.0-24 /k8s/network/subnets/10.0.35.0-24 /k8s/network/subnets/10.0.24.0-24 3、启动flannel...验证flannel网络: 在node1节点上看etcd中的内容: $ etcdctl --endpoints "http://node1.etcd.tulingapi.com:2379" ls /k8s.../network/subnets /k8s/network/subnets/10.0.24.0-24 [root@k8s-master flannel.../k8s/network/subnets/10.0.24.0-24 在各个节点安装好以后最后要更改Docker的启动参数,使其能够使用flannel进行IP分配,以及网络通讯。
5、使用flannel+canal实现k8s的NetworkPolicy Flannel是解决容器网络方案最为普遍和简单的方案,Canal代表了针对云原生应用程序的最佳网络策略解决方案,旨在让用户轻松的将...Calico和Flannel网络部署在一起作为统一的网络解决方案,将Calico的网络策略执行和Flannel的叠加及非叠加网络连接选项的丰富功能相结合。...在Calico的官方文档的相应部分中描述到此种方案是:用于策略的Calico和用于网络的Flannel相组合。...实验k8s环境是kubeadm搭建的1master+2node最新版本1.16.2版本k8s,cni版本为0.3.1,flannel版本为0.11.0,flannel后端是vxlan模式并且已经开启了...结合flannel工作时,Calico提供的默认配置清单中是以flannel默认使用的10.244.0.0/16 为Pod网络,因此,请确保kube-controller-manager程序在启动时通过
k8s 集群部署 flannel 报错 查看 flannel 日志报错如下: Couldn't fetch network config: client: response is invalid json...计时结束 然后检查 etcd 和 flannel 版本 # ..../flanneld --version v0.11.0 然后查阅 flanneld 官网文档,上面标准了 flannel 这个版本不能给 etcd 3 进行通信,所以才造成了上面的问题,下面进行如下操作.../network 3, 开启 etcd v2 API 接口 在 etcd 启动命令里面添加上如下内容,然后重启 etcd 集群 --enable-v2 4, 使用 etcd v2 去创建 flannel...网络插件 1,停止 flannel 网络插件 2, 删除 etcdctl 里面的内容 ETCDCTL_API=2 .
在上一篇文章里我们介绍了k8s集群中flannel vxlan overlay网络中pod到pod的通讯。...在这里我们主要介绍flannel udp overlay网络setup,以便后面分析flannel udp overlay网络中pod到pod的通讯过程。...对于flannel udp overlay网络我们需要把以前文章setup的docker,flannel,kubelet,kube-proxy,kube-apiserver,kube-scheduler...是因为flannel upd overlay网络利用udp包的payload来封装三层ip包,所以导致最大传输单元mtu变小了。...目前先写到这里,下一篇文章里我们继续介绍k8s集群flannel udp overlay网络下pod到pod的通讯过程。
1.由于容器的网络暂时还没有,coredns无法分配的ip会处于pending状态,这里需要手动部署flannel插件 [root@k8s-01 ~]# kubectl -n kube-system get...node "$node" -p '{"spec":{"podCIDR":"'"$cidr"'"}}' } done wget http://down.i4t.com/k8s1.18/kube-flannel.yml...kubectl apply -f kube-flannel.yml 3.flannel如果存在多网卡,需要在kube-flannel.yml中指定网卡 containers: -...name: kube-flannel image: quay.io/coreos/flannel:v0.12.0-amd64 command: - /opt...kube-subnet-mgr - --iface=eth0 # 如果是多网卡的话,指定内网网卡的名称 温馨提示: 在kubeadm.yaml文件中设置了podSubnet网段,同时在flannel
在上一篇文章里我们对基于iptable和ipvs模式下cluster ip类型的service和node port类型的service做了总结和对比,在这里我们主要介绍flannel overlay网络...对于flannel overlay网络有vxlan 方式和udp方式,这里我们介绍vxlan 方式的setup。对于vxlan 是一种overlay网路技术,意在利用在三层网络之上构建二层网络。...更多关于vxlan可以参考https://tools.ietf.org/html/rfc7348 对于flannel vxlan overlay网络我们需要把以前文章setup的docker,flannel...启动所有节点的flannel service并查看网络生成情况: systemctl start flanneld systemctl status flanneld etcdctl --ca-file...目前先写到这里,下一篇文章里我们继续介绍k8s集群flannel vxlan overlay网络下pod到pod的通讯过程。
在上一篇文章里我们介绍了k8s集群中flannel udp overlay网络的创建,这在里我们基于上一篇文章中的例子,来介绍在flannel udp overlay网络中pod到pod的通讯。...flannel udp模式就是利用TUN device,由flannel进程完成对原始ip包的udp封包,然后转发并解包。...我们发现10.1.0.0/16网段的访问是直连路由,并且用flannel0设备发送。而这个flannel0设备就是flannel启动的时候在宿主机上创建的TUN device。...flannel确定upd封包源ip ?...当前host的TUN设备flannel0将数据从内核空间交给用户空间应用程序flannel。
安装完成之后我们要在etcd里创建k8s pod的通讯网络,启动flanneld生成docker绑定的环境变量,然后把这些环境变量设置到docker的启动参数里。...下载并解压flannel: 注意这里在github下载flannel(flannel-v0.10.0-linux-amd64.tar.gz) mkdir -p /opt/sw/flanneld/install...在其它2台vm环境上重复上述步骤完成flannel安装,并设置开机启动flannel,start flannel服务检查状态 systemctl enable flanneld systemctl start...检查flannel为docker生成的网络环境变量配置文件: cat /run/flannel/docker source /run/flannel/docker echo ${DOCKER_NETWORK_OPTIONS...enable-forward.service << EOF [Unit] Description=Enable linux forward and also TCP/UDP package forward for k8s
在上一篇文章里我们介绍了k8s集群中flannel vxlan overlay网络的创建,这在里我们基于上一篇文章中的例子,来介绍在flannel vxlan overlay网络中pod到pod的通讯。...而这个flannel.1设备就是flannel启动的时候根据vxlan类型网络在宿主上创建的,它属于vxlan设备,会完成对二层eth以太数据包到udp数据包的封装与拆封。...查询vtep端点mac地址转发接口: 由于flannel.1设备是vxlan设备,会有转发接口与它的mac对应,我们继续在pod 10.1.55.2的宿主172.20.11.42上查询flannel.1...我们发现flannel.1设备mac地址5e:75:7d:bf:98:03对应的转发接口为172.20.11.43,代表flannel.1设备将会把原始二层数据包(源ip为10.1.55.2,目标ip为...因为所有的host都运行flannel服务,而flannel连接etcd存储中心,所以每个host就知道自己的子网地址cidr是什么,也知道在这个cidr中自己的flannel.1设备ip地址和mac地址
什么是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
这个IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。 ...第三个问题,为什么在发送节点上的数据会从docker0路由到flannel0虚拟网卡,在目的节点会从flannel0路由到docker0虚拟网卡? 我们来看一眼安装了Flannel的节点上的路由表。...回到顶部 3Flannel的安装和配置 Flannel是Golang编写的程序,因此的安装十分简单。 ...全是对k8s的二次开发吗? 答: CoreOS公司,不是k8s的二次开发,独立的开源项目,给k8s提供基础网络环境。 问:Flannel支持非封包的纯转发吗?这样性能就不会有损失了? ...问: Flannel只是负责通信服务,那是不是还要安装k8s? 答:是的,k8s是单独的。 问:现在Docker的网络组件还有什么可以选择或者推荐的?
这里我们做一下回顾总结和对比,相关文章可以参考如下: flannel underlay网络 flannel vxlan overlay网络setup flannel vxlan overlay网络 flannel...对于flannel udp overlay网络: 每个宿主都有名字为flannel0的TUN网络设备来完成对于原始ip数据包的udp封包与拆包,upd数据在宿主的8285端口上(端口值可配置)的flannel...当前host的TUN设备flannel0将数据从内核空间交给用户空间应用程序flannel。...对于flannel vxlan overlay网络和flannel udp overlay网络都有封包与拆包,并且外层包都是udp包。...flannel vxlan overlay网络内层包是二层以太包,flannel udp overlay网络内层包是三层ip包。
深入理解kubernetes(k8s)网络原理之五-flannel原理 flannel有udp、vxlan和host-gw三种模式,udp模式因为性能较低现在已经比较少用到,host-gw我们在前面简单介绍过...在vlan模式下,每个节点会有一个符合cni规范的二进制可执行文件flannel(下面简称flannel-cni),一个以k8s的daemonset方式运行的kube-flannel,下面来分别介绍下它们是干啥的...=10.244.1.1/24 FLANNEL_MTU=1450 FLANNEL_IPMASQ=true 这个文件也是kube-flannel启动时写入的 flannel读取该文件内容后,紧接着会生成一个符合...kube-flannel kube-flannel以k8s的daemonset方式运行,主要负责编织跨节点pod通信,启动后会完成以下几件事情: 启动容器会把/etc/kube-flannel/cni-conf.json...假设现在有一个k8s集群拥有master、node1和node2三个节点,这时候新增了一个节点node3,node3的IP为:192.168.3.10,node3上的kube-flannel为node3
领取专属 10元无门槛券
手把手带您无忧上云