#yyds干货盘点#--k8s-网络模型

Posted 流年_火星程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#--k8s-网络模型相关的知识,希望对你有一定的参考价值。

今天讲讲kubernets网络模型,首先先来看pod通信原理.在容器启动前,会为容器创建一个虚拟Ethernet接口对,这个接口对类似于管道的两端,其中一端在主机命名空间中,另外一端在容器命名空间中,并命名为eth0。在主机命名空间的接口会绑定到网桥。网桥的地址段会IP赋值给容器的eth0接口。

#yyds干货盘点#--k8s-网络模型_canal

pod通信有的基于overlay网络实现,有的基于vxlan实现,vxlan 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网。它是一种 overlay 技术,通过三层的网络来搭建虚拟的二层网络,有的基于openvswitch实现,有的基于BGP实现。

1.vxlan协议格式 VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网。它是一种 overlay 技术,通过三层的网络来搭建虚拟的二层网络

#yyds干货盘点#--k8s-网络模型_canal_02

2.Flannel是CoreOS团队针对Kubernetes设计的一个网络规划实现,简单来说,它的功能有以下几点:

  • 使集群中的不同Node主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
  • 建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。覆盖网络是建立在另一个网络之上并由其基础设施支持的虚拟网络。
  • 创建一个新的虚拟网卡flannel0接收docker网桥的数据,通过维护路由表,对接收到的数据进行封包和转发(vxlan)。
  • 路由信息一般存放到etcd:多个node上的Flanneld依赖一个etcd cluster来做集中配置服务,etcd保证了所有node上flanned所看到的配置是一致的。
  • Flannel会在Node上创建一个名为flannel0的网桥(vxlan类型的设备),并且在每个Node上运行一个名为flanneld的代理.每个node上的flannel代理会从etcd上为当前node申请一个CIDR地址块用来给该node上的pod分配地址。

3.Calico

Calico是Kubernetes生态系统中另一种流行的网络选择,它提供收费的技术支持。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,更为复杂。它不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能。具体可查看github:​​https://github.com/projectcalico/cni-plugin​

4.Canal:

Canal 是一个项目的名称,它试图将Flannel提供的网络层与Calico的网络策略功能集成在一起。然而,当贡献者完成细节工作时却发现,很明显,如果Flannel和Calico这两个项目的标准化和灵活性都已各自确保了话,那集成也就没那么大必要了。结果,这个官方项目变得有些“烂尾”了,不过却实现了将两种技术部署在一起的预期能力。出于这个原因,即使这个项目不复存在,业界还是会习惯性地将Flannel和Calico的组成称为“Canal”

5.Weave Net

Weave Net是一个多主机容器网络方案,支持去中心化的控制平台,各个host上的wRouter间通过建立Full Mesh的TCP链接,并通过Gossip来同步控制信息。这种方式省去了集中式的K/V Store,能够在一定程度上减低部署的复杂性,Weave将其称为“data centric”,而非RAFT或者Paxos的“algorithm centric”。这篇文章很详细,大家可以参考下:​​https://my.oschina.net/u/2306127/blog/1822978​

6.macvlan

macvlan可以在主机的网卡上绑定多个二层mac地址,每个mac地址对应主机网卡(主接口)的一个子接口,每个container可以绑定一个子接口作为自己的网卡接口。

根据子接口通信方式的不同,macvlan存在四种工作模式:

  • private mode:主接口会过滤掉交换机返回来的来自其子接口的报文,不同子接口之间无法互相通信。
  • vepa(Virtual Ethernet Port Aggregator) mode: 发送出去的报文经过交换机,交换机再发送到对应的目标地址(即使目标地址就是主机上的其它macvlan子接口),也就是hairpin mode模式,这个模式需要主接口连接的交换机支持 VEPA/802.1Qbg 特性;这种方式允许一个主接口上的多个子接口借助外部交换机进行相互通信,而LAN里面的广播包也会被主接口forward到所有子接口。
  • bridge mode:通过主机上的macvlan bridge将主接口的所有子接口连接在一起,不同子接口之间能够不借助外部交换机而进行直接通信,不需要将报文发送到主机之外,一个高效的bridge实现。
  • passthru mode:container可以直接使用主机的网络接口,并具有对接口进行参数调整的能力。
  • 需要注意的是,如果使用macvlan模式,虽然主接口和子接口在同一LAN,但是在主机上通过主接口是没有办法直接和子接口通信的;需要额外建立一个子接口,把主接口的IP配置给这个子接口,这样才能借助原来主接口的IP和子接口进行通信。

对比图:

#yyds干货盘点#--k8s-网络模型_macvlan_03



以上是关于#yyds干货盘点#--k8s-网络模型的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#K8S 之网络互联通信

#yyds干货盘点#高级IO模型之kqueue和epoll

#yyds干货盘点#最全深入浅出聊聊IO

Java NIO 网络编程《Netty In Action》 #yyds干货盘点#

#yyds干货盘点#k8s中的核心组件

#yyds干货盘点#k8s集群IP段怎么规划最合适?