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相关推荐

  1. Kubernetes网络插件flannel和calico

    网络插件flannel 跨主机通信的一个解决方案是Flannel,由CoreOS推出,支持3种实现:UDP.VXLAN.host-gw udp模式:使用设备flannel.0进行封包解包,不是内核原生 ...

  2. 3、kubeadm部署Kubernetes 网络插件flannel、Calico、weave 并设置集群角色

    Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. Kubernetes不仅支持Docker,还支持Rocket,这是另一种容器技术. 使用Kubern ...

  3. 云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版

    前言: 前面写了一些关于calico的文章,但感觉好像是浅尝辄止,分散在了几篇文章内,并且很多地方还是没有说的太清楚云原生|kubernetes|kubernetes的网络插件calico和flann ...

  4. K8s网络插件Flannel,Calico

    文章目录 一.K8s网络插件flannel与calico 1. k8s网络解决方案 容器虚拟化网络方案 基于隧道 基于路由 2. CNI(容器网络接口) flannel与calico 选型比较 3. ...

  5. Kubernetes网络插件对比分析(Flannel、Calico、Weave)

    文章目录 Kubernetes网络插件对比分析(Flannel.Calico.Weave) 1.Flannel 2.Calico 3.Weave 结语 Kubernetes网络插件对比分析(Flann ...

  6. 安装pod网络插件flannel

    官网地址 https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml 感觉网络这块有点复杂,抠脑壳 ...

  7. 理解Kubernetes网络之Flannel网络

    理解Kubernetes网络之Flannel网络 第一次采用kube-up.sh脚本方式安装的Kubernetes cluster目前运行良好,master node上的组件状态也始终是"没 ...

  8. K8s NetworkPolicy与网络插件flannel、calico详细版

    Pod是Kubernetes调度的最小单元.一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机.Pod的设计理念是为了支持多个容器在一个Pod中共享网络和文件系统.那么为什么Po ...

  9. KubeEdge环境搭建(支持网络插件flannel)

    KubeEdge环境搭建 准备工作--K8s集群环境搭建 准备开始 配置国内镜像(仅amd64架构,如果是arm架构的不要更改镜像) 安装docker 安装K8s 初始化Master节点 网络插件安装 ...

最新文章

  1. wso2 esb_WSO2 ESB的一种消息传递方式
  2. 定界符在php中,php定界符如何使用
  3. 单继承模式下的JAVA和C++
  4. 【学习笔记】【C语言】进制
  5. 大数据分析平台应注意哪些方面
  6. Excel怎么快速选中相同背景颜色单元格
  7. excel导入,用反射匹配字段名
  8. 写给青春,写给军乐团
  9. 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
  10. 2020厦大计算机专硕分数,2020考研初试,你得考多少分才能上厦大?
  11. vs2017下配置Xamarin
  12. 教你用Python绘制炫酷专业插图
  13. 科研用matlab还是python_科的解释|科的意思|汉典“科”字的基本解释
  14. ESP32+阿里云+vscode_Pio
  15. 揭开物联网的神秘面纱--物联网小灯
  16. C 语言 rand() 和 srand() 使用方法
  17. MAX6951EEE+T LED显示驱动器MAXIM 共阴极显示驱动器
  18. logback-spring.xml配置详解
  19. 基于帝企鹅算法优化BP神经网络实现数据预测matlab代码
  20. Origin更改图的尺寸大小

热门文章

  1. python中multiply函数_函数API中的Keras Multiply()层
  2. vue+Springboot+easyexecl 导出excel文件打不开
  3. 未来集市八月哥:致所有未来集市观望者的一封信
  4. Qrcode生成二维码支持中文,带图片,带文字
  5. 计算机毕业设计ssm基于Java通识课程管理系统v87xr系统+程序+源码+lw+远程部署
  6. 判断设备是否为移动端
  7. ·乔布斯的接班人Tim Cook是神马人物
  8. java三国猛将4_云顶之弈4.5决斗三国猛将-云顶4.5三国决斗阵容推荐
  9. 臧天朔 - 朋友.wma经典老歌下载
  10. CodeBlocks 安装教程(百度网盘)