简述Kubernetes CNI模型?

云原生应用程序的时代,引入了思考网络架构的新方法。

Kubernetes网络被设计为一种干净的,向后兼容的模型,从而消除了将容器端口映射到主机端口的需求。为了支持这一点,Kubernetes引入了许多围绕网络的基本结构,例如Pod网络,服务,集群IP,容器端口,主机端口和节点端口,这些将用户从底层基础结构中解放出来。

尽管Kubernetes中有许多网络基础的构建,但Kubernetes仍然存在许多以使其与基础架构无关。网络中的这些空白大部分由网络插件填补,这些插件通过容器网络接口(CNI)与Kubernetes交互。

Kubernetes使用插件模型进行网络连接,使用CNI来管理集群上的网络资源。大多数常见的利用overlay networking(覆盖网络),该网络在现有第2层(L2)网络之上在集群内部创建了私有第3层(L3)网络。

使用这些CNI插件,专用网络只能由集群中的Pod访问。在节点之间甚至在集群外部交换数据包的过程在很大程度上取决于iptable规则以及专用和公用IP地址的网络地址转换(NAT)。

每个可用于Kubernetes的网络CNI插件都有其优缺点。让我们探讨一下CNI插件的一些常见限制:



在L3网络中,外部访问总是通过暴露节点本身上的接口或端口来完成的。在这种情况下,如果请求通过错误的节点,则Pod和外部通信可能会产生额外的hop,从而影响性能和延迟。

在许多情况下,该应用程序可能需要用于Pod网络的多个接口,以便它可以连接到不同的隔离网络/子网。目前,大多数CNI插件均不支持多个接口。

Kubernetes中的Pod IP是动态的,并且在Pod重新启动时会更改。大多数CNI插件不支持为Pod分配静态端点或IP。

这意味着只能通过服务公开Pod,这对于某些类型的部署可能不是理想的选择。

在同一节点上运行多个应用程序时,来自每个应用程序的流量都流经同一网络管道。如果一个应用程序行为不正常,则可能会影响其他应用程序的性能。

大多数CNI插件不支持在应用程序级别提供网络性能保证。

高可用性对任何组织都至关重要,并且已成为生产Kubernetes部署中的要求。

拥有对多区域集群的网络支持非常重要,该支持可将应用分布在不同的域中。

11. 存储流量无分隔

大多数CNI插件无法区分存储流量和常规流量。他们使用相同的共享接口来进行存储数据交换,从而导致网络和存储流量(在某些情况下甚至控制流量)相互竞争。这会影响性能和安全性。

}

[版权声明] 本站所有资料由用户提供并上传,若内容存在侵权,请联系邮箱。资料中的图片、字体、音乐等需版权方额外授权,请谨慎使用。网站中党政主题相关内容(国旗、国徽、党徽)仅限个人学习分享使用,禁止广告使用和商用。

}

一直以来,kubernetes 并没有专门的网络模块负责网络配置,它需要用户在主机上已经配置好网络。

  • 容器之间(包括同一台主机上的容器,和不同主机的容器)可以互相通信
  • 容器和集群中所有的节点也能直接通信

kubernetes 网络的发展方向是希望通过插件的方式来集成不同的网络方案, CNI 就是这一努力的结果。CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。

在Kubernetes创建Pod后CNI提供网络的过程主要分三个步骤:

  • Kubelete触发CNI插件,指定网络类型(网络类型决定哪一个CNI plugin将会被使用)
  • CNI插件将创建veth pair, 检查IPAM类型和数据,触发IPAM插件,获取空闲的IP地址并将地址分配给容器的网络接口



calicoctl默认是会读取/etc/calico/calicoctl.cfg的配置文件(也可以通过--config选项来指定要读取的配置文件),配置里指定etcd集群的地址,文件的格式请见。

下面以我的实际文件为例进行讲解:


 
 
 
 
 


 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 





 

 
 
 
 
 
 
 
 
 
 

 

 
整体流量具体怎么走的,请参考(有时间再整理):


 
更多精彩内容,请订阅本人微信公众号:K8SPractice
}

我要回帖

更多关于 kubernetes安装配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信