Kubernetes网络插件Flannel
1.Kubernetes网络通信
(1) 容器间通信
同一个Pod内的多个容器间的通信, lo
(2)Pod通信
Pod IP <-(直达)-> Pod IP 意思就是pod和pod之间使用自己的IP不经过任何转换直达,通信双方所见的地址就是双方的地址
(3)Pod与Service通信
PodIP <–> ClusterIP IPVS和iptables规则可以实现,ipvs可以做负载但是无法取代iptables,因为很多功能ipvs做不到
(4)Service与集群外部客户端的通信
Nodeport,ingress等等
2.K8s网络解决方案
(1)方案介绍
①k8s网络实现要靠网络插件–CNI(容器Container 网络Network 接口Interface)
②K8s本身不提供网络解决方案,允许托管去使用第三方的任何解决方案来代为解决k8s集群中这4种通信模型当中的需要执行的通信问题任何一种程序都可以(简单来说就是用第三方插件解决4中k8s集群的通信模型,能解决就可以用)
③CNI:flannel、calico、canel、cube-router
(2)方案所涉及的技术
①虚拟网桥
隧道or叠加网络,可以实现更强的控制功能但是开销会比较大
能保证pod和容器有专用的网络接口,一半留在pod或者容器上,一半留在宿主机上接入到网桥中去使用,类似于docker的bridge
② 多路复用
MacVLAN----基于Mac的方式去创建VLAN(为每个虚拟接口配置一个独有的Mac,让一个物理网卡可以承载多个容器去使用,这样子直接使用物理网卡,并基于物理网卡中的MacVLAN去跨节点通信)
③ 硬件交换
SR-IOV-----单根IO虚拟化(一个物理网卡可以直接虚拟多个网卡,直接给容器使用)
3.加载配置文件
Kubelet在启动时直接通过路径去加载配置文件 /etc/cni/net.d
任何其他网络插件部署完以后,也要把配置文件仍在这个路径下,从而被kubelet所加载,从而可以被kubelet作为必要时创建一个pod,pod要有网络,那么kubelet就调用这个目录下的配置文件,由网络插件代为实现地址分配,网络创建,接口创建等各种功能这叫CNI
[root@k8s-master net.d]# pwd
/etc/cni/net.d
[root@k8s-master net.d]# cat 10-flannel.conflist
{"name": "cbr0", "plugins": [ #插件类型{"type": "flannel", "delegate": { #授权使用方式"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap", #类型"capabilities": {"portMappings": true #支持端口映射(叠加网络)}}]
}
4.网络插件功能介绍
(1)flannel简介
网络插件flannel最为简单,但是缺点是在k8s集群上网络插件不仅仅要实现网络地址分配,网络管理等功能,还要实现网络策略,flannel不支持网络策略
(2)策略的重要性
虽然k8s有命名空间管理隔离,和所谓管理隔离就是说rolebinding的user是无法对其他命名空间的资源做管控,但是他可以控制自己的pod去访问别的命名空间的pod的,比如两个项目之间互相不认识,但是pod访问pod万一出事,容易背锅,那么我们继续要一些网络插件进行设置pod与pod访问策略之类的
(3)解决方案
基本解决方案可以先使用flannel然后需要策略的时候去加calico,虽然加calico但是不让他做网络地址分配等等的工作,只让他做策略,这样就没必要用canel这种合起来的
5.flannel的三种模式
后端传输方式:下面的长条封装报文守护分别是 以太网、IP、UDP、VxLAN (额外的开销)所以说基于VxLAN性能可能会低,但是可以独立管理一个网络跟物理不冲突
flannel:
支持多种后端:
(1)VxLAN (扩展的虚拟局域网)
(1) vxlan
(2) Directrouting
支持同一网段我们使用直接路由通信(源和目标在同意网络),如果不在同一网段我们就使用VxLAN
后端传输方式:下面的长条封装报文守护分别是 以太网、IP、UDP、VxLAN (额外的开销)所以说基于VxLAN性能可能会低,但是可以独立管理一个网络跟物理不冲突
(2)host-gw: Host Gateway (主机网关)
在node节点上虚拟一个虚拟网卡,所有pod都是虚拟网卡所属网段,那么通过路由条目,路由转发可以送达至其他node节点,虽然这种方式性能高,但是面临的就是说如果node节点数量过多,路由条目会非常大,并且一旦有广播报文所有都会受到波及,而且所有node节点必须工作再同一个2层或3层网络
(3)UDP(性能极差)
6.配置flannel的模式
(1)configmap配置参数介绍
flannel的配置参数:
Network:flannel使用的CIDR格式的网络地址,用于为Pod配置网络功能;
10.244.0.0/16 ->
master: 10.244.0.0/24
node01: 10.244.1.0/24
…
node255: 10.244.255.0/24
10.0.0.0/8
10.0.0.0/24
…
10.255.255.0/24
SubnetLen:把Network切分子网供各节点使用时,使用多长的掩码进行切分,默认为24位;
SubnetMin:10.244.10.0/24
SubnetMax: 10.244.100.0/24
Backend:vxlan, host-gw, udp
vxlan:
(2)修改VxLAN改为Directrouting
因为我们把flannel封装为容器运行了,所以修改flannel的configmap
方法1(不推荐)
kubectl edit configmaps -n kube-system kube-flannel-cfg
net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan","Directrouting": true #修改这个参数切记 vxlan后面会有个逗号}}
修改完以后需要重启所有节点的flannel
方法2(推荐)
准备好flannel的yaml文件,直接修改yaml文件
net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan", #注意这里有个逗号"Directrouting": true}}
kubectl apply -f kube-flannel.yml
如果你的flannel没有作过其他的改动可以直接应用,如果作过网段之间的什么修改的话,需要查看是否一致,然后再进行应用,前面提到过就是说apply和edit或者create之间不要混着用,所以既然我们apply声明的flannel,那么我们最好也是apply应用一下
测试方法(测试是否修改成功)
修改之前
改完以后
可以在node节点分别来一个pod,用节点1的pod去ping节点2的 然后在node1上抓包
如果他还是隧道的话 我们在ens33上面是抓不到icmp的因为已经封装为udp了
注意:需要注意的是就是说这个网络策略应该是在装好k8s集群以后就该有的策略,而不是半途改的,因为修改需要重启flannel,可能会导致服务出现问题,所以我们需要提前想到这个问题,而且这个配置仅是为了可能集群内node节点过多,网络性能出现瓶颈
Kubernetes网络插件Flannel相关推荐
- Kubernetes网络插件flannel和calico
网络插件flannel 跨主机通信的一个解决方案是Flannel,由CoreOS推出,支持3种实现:UDP.VXLAN.host-gw udp模式:使用设备flannel.0进行封包解包,不是内核原生 ...
- 3、kubeadm部署Kubernetes 网络插件flannel、Calico、weave 并设置集群角色
Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. Kubernetes不仅支持Docker,还支持Rocket,这是另一种容器技术. 使用Kubern ...
- 云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版
前言: 前面写了一些关于calico的文章,但感觉好像是浅尝辄止,分散在了几篇文章内,并且很多地方还是没有说的太清楚云原生|kubernetes|kubernetes的网络插件calico和flann ...
- K8s网络插件Flannel,Calico
文章目录 一.K8s网络插件flannel与calico 1. k8s网络解决方案 容器虚拟化网络方案 基于隧道 基于路由 2. CNI(容器网络接口) flannel与calico 选型比较 3. ...
- Kubernetes网络插件对比分析(Flannel、Calico、Weave)
文章目录 Kubernetes网络插件对比分析(Flannel.Calico.Weave) 1.Flannel 2.Calico 3.Weave 结语 Kubernetes网络插件对比分析(Flann ...
- 安装pod网络插件flannel
官网地址 https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml 感觉网络这块有点复杂,抠脑壳 ...
- 理解Kubernetes网络之Flannel网络
理解Kubernetes网络之Flannel网络 第一次采用kube-up.sh脚本方式安装的Kubernetes cluster目前运行良好,master node上的组件状态也始终是"没 ...
- K8s NetworkPolicy与网络插件flannel、calico详细版
Pod是Kubernetes调度的最小单元.一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机.Pod的设计理念是为了支持多个容器在一个Pod中共享网络和文件系统.那么为什么Po ...
- KubeEdge环境搭建(支持网络插件flannel)
KubeEdge环境搭建 准备工作--K8s集群环境搭建 准备开始 配置国内镜像(仅amd64架构,如果是arm架构的不要更改镜像) 安装docker 安装K8s 初始化Master节点 网络插件安装 ...
最新文章
- wso2 esb_WSO2 ESB的一种消息传递方式
- 定界符在php中,php定界符如何使用
- 单继承模式下的JAVA和C++
- 【学习笔记】【C语言】进制
- 大数据分析平台应注意哪些方面
- Excel怎么快速选中相同背景颜色单元格
- excel导入,用反射匹配字段名
- 写给青春,写给军乐团
- http://nianjian.xiaze.com/tags.php?/%E5%B9%BF%E5%B7%9E%E7%BB%8F%E6%B5%8E%E5%B9%B4%E9%89%B4/1/1360241
- 2020厦大计算机专硕分数,2020考研初试,你得考多少分才能上厦大?
- vs2017下配置Xamarin
- 教你用Python绘制炫酷专业插图
- 科研用matlab还是python_科的解释|科的意思|汉典“科”字的基本解释
- ESP32+阿里云+vscode_Pio
- 揭开物联网的神秘面纱--物联网小灯
- C 语言 rand() 和 srand() 使用方法
- MAX6951EEE+T LED显示驱动器MAXIM 共阴极显示驱动器
- logback-spring.xml配置详解
- 基于帝企鹅算法优化BP神经网络实现数据预测matlab代码
- Origin更改图的尺寸大小
热门文章
- python中multiply函数_函数API中的Keras Multiply()层
- vue+Springboot+easyexecl 导出excel文件打不开
- 未来集市八月哥:致所有未来集市观望者的一封信
- Qrcode生成二维码支持中文,带图片,带文字
- 计算机毕业设计ssm基于Java通识课程管理系统v87xr系统+程序+源码+lw+远程部署
- 判断设备是否为移动端
- ·乔布斯的接班人Tim Cook是神马人物
- java三国猛将4_云顶之弈4.5决斗三国猛将-云顶4.5三国决斗阵容推荐
- 臧天朔 - 朋友.wma经典老歌下载
- CodeBlocks 安装教程(百度网盘)