Kubernetes选择CNI插件的11个注意事项

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Kubernetes选择CNI插件的11个注意事项

目录

CNI插件的常见限制

1. 依赖软件定义的网络(Software Defined Networking)

2. 在集群外公开应用程序

3. 通过主机网络路由所有流量

4. 流量隔离

5. 负载不均衡

6. 额外 hops

7. 多宿主网络

8. 静态端点配置

9. Noisy Neighbors 和SLA性能

10. 多区域支持

11. 存储流量无分隔

另一种联网方法Diamanti



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

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

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


CNI插件的常见限制

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

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

这些CNI插件的一些示例是Open vSwitch(OVS),Calico,Flannel,Canal和Weave。

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


1. 依赖软件定义的网络(Software Defined Networking)

SDN(Software Defined Networking)网络功能是作为软件设备提供的,从而增加了各种复杂性,包括其他iptables和NATing。

SDN软件消耗了15%到20%的可用主机资源(CPU和内存),从而降低了效率并增加了运行实际应用程序所需的资源数量。


2. 在集群外公开应用程序

由于大多数联网解决方案都使用L3联网,因此Pod IP的存在位于集群本身内。将这些Pod暴露于外界仍然是一个挑战。Kubernetes利用ServiceType中的“ NodePort”和“ LoadBalancers”公开应用程序。

ServiceType中的 NodePort通过在主机网络接口随机唯一端口上,路由在节点上运行的所有应用程序。

在公共云中,云负载均衡器的可用性使生活变得更加轻松,因为它会自动将公共IP分配给Kubernetes中ServiceType为 LoadBalancer的服务。但是,此功能不适用于本地云。诸如MetalLB之类的解决方案可以用来解决此问题,但是它们有其自身的局限性和挑战。


3. 通过主机网络路由所有流量

当使用用ServiceType中的“ NodePort”和“ LoadBalancers”时,Kubernetes利用主机网络接口路由所有流量。由于安全性和性能问题,这不是企业环境中的理想方案。

NodePort和Loadblancer服务的数据包流


4. 流量隔离

大多数Kubernetes网络解决方案都使用相同的物理网络(主机网络)接口来处理各种流量。

这意味着控制,pod和存储流量共享同一网络接口。这可能会带来安全风险,并且还会影响Kubernetes控制平面的性能,因为Pod和存储流量很容易消耗可用带宽(反之亦然)。


5. 负载不均衡

大多数网络解决方案都依赖于外部负载均衡器,当Pod分布在集群中的多个节点上时,这不是问题。

但是,同一后端服务的多个Pod也可以在同一节点上运行。这可能会导致负载不平衡问题,因为外部负载均衡器只能在节点之间进行负载均衡,而不能在Pod之间进行负载均衡。


6. 额外 hops

1)在数据包转发网络中,hop指数据包经过路由器或直接通过节点转移到其他网络的过程。在互联网或者采用TCP/IP协议的网络中,hop数目会在数据包的包头上面有所记录。如果hop数目过大,就将此数据包忽略掉。

2)在蜂窝式数字分组数据(CDPD)中,hop是指到别的射频信道的交换过程。

参考自:https://searchcio.techtarget.com.cn/whatis/8-24231/

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


7. 多宿主网络

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


8. 静态端点配置

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

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


9. Noisy Neighbors 和SLA性能

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

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


10. 多区域支持

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

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


11. 存储流量无分隔

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


另一种联网方法Diamanti

Diamanti凭借其独特的网络体系结构解决了常见CNI插件中发现的大多数缺点。

Diamanti的Kubernetes数据平面解决方案内置了对L2网络的支持,并且硬件卸载了智能NIC。这允许将真正的L2 MAC地址分配给外部可路由网络上的每个Pod,从而使联网更加容易。它还支持使用OVS的L3overlay networking(覆盖网络),流量隔离,VLAN/VXLAN分段,多宿主网络,静态端点配置,网络感知调度,有保证的SLA以及许多其他独特功能。

你可以在Diamanti网站上查看有关Diamanti网络体系结构的更多详细信息。

Kubernetes中的网络堆栈是企业生产部署中最重要的架构决策之一。在为基础架构选择CNI插件时,需要注意其局限性,并确定最适合你的插件。


译文链接:https://thenewstack.io/top-considerations-when-selecting-cni-plugins-for-kubernetes/



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
125 3
|
4月前
|
Kubernetes Cloud Native 开发者
OpenKruise:Kubernetes的超级插件,一键解锁容器运行时操作的超能力!
【8月更文挑战第8天】在云原生领域,Kubernetes虽已成为容器编排的标准,但仍有限制,比如批量操作不便和高级调度功能缺失。OpenKruise是一款增强工具,提供CloneSet、Advanced StatefulSet等功能,既保持Kubernetes API特性又增加了扩展性,使Pod管理更灵活。可通过Helm安装OpenKruise,并使用CloneSet轻松实现批量部署。这类增强工具让开发者能更高效地突破原生Kubernetes的限制,预计未来将更加受到欢迎。
77 8
|
4月前
|
Kubernetes 安全 Linux
在K8S中,calico和cilium这两种cni有什么区别?cailico的ipip模型和ciliume的vxlan模型,两种不通模型性能也不同,它们怎么处理数据的?
在K8S中,calico和cilium这两种cni有什么区别?cailico的ipip模型和ciliume的vxlan模型,两种不通模型性能也不同,它们怎么处理数据的?
|
4月前
|
canal Kubernetes 负载均衡
在K8S中,优先优选哪个CNI插件?为何使用该插件?
在K8S中,优先优选哪个CNI插件?为何使用该插件?
|
4月前
|
存储 canal Kubernetes
在K8S中,什么是CNI?平时K8s集群常用什么网络插件?
在K8S中,什么是CNI?平时K8s集群常用什么网络插件?
|
4月前
|
Kubernetes 网络协议 网络架构
在K8S中,CNI有什么作用?
在K8S中,CNI有什么作用?
|
4月前
|
JSON Kubernetes Cloud Native
在k8S中,CNI模型概念是什么?
在k8S中,CNI模型概念是什么?
|
5月前
|
JSON Kubernetes 网络架构
Kubernetes CNI 网络模型
【7月更文挑战第5天】CNI定义了容器运行时与插件间的简单交互,允许容器加入多个网络,通过JSON配置。
|
6月前
|
机器学习/深度学习 JSON Kubernetes
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
485 0
|
2天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。

热门文章

最新文章