Kubernetes集群中的高性能网络策略

简介: 自从7月份发布Kubernetes 1.3以来,用户已经能够在其集群中定义和实施网络策略。这些策略是防火墙规则,用于指定允许流入和流出的数据类型。如果需要,Kubernetes可以阻止所有未明确允许的流量。

自从7月份发布Kubernetes 1.3以来,用户已经能够在其集群中定义和实施网络策略。这些策略是防火墙规则,用于指定允许流入和流出的数据类型。如果需要,Kubernetes可以阻止所有未明确允许的流量。本文针对K8s的网络策略进行介绍并对网络性能进行测试。

网络策略  

​ K8s的网络策略应用于通过常用标签标识的pod组。然后,可以使用标签来模拟传统的分段网络,这些网络通常用于在多层应用程序中隔离层:例如,您可以通过特定的“段”标签来标识前端和后端pod。策略控制这些段之间的流量,甚至控制来自外部源的流量。

分段流量

​ 这对于应用程序开发人员意味着什么?最后,Kubernetes获得了提供 深度防御 的必要能力。流量可以分段,应用程序的不同部分可以独立保护。例如,您可以通过特定的网络策略非常轻松地保护每个服务:由服务器后的Replication Controller标识的所有窗格都已由特定标签标识。因此,您可以使用同一标签将策略应用于这些pod。

​ 长期以来,深度防御被建议作为最佳实践。在AWS和OpenStack上,通过将安全组应用于VM,可以轻松实现应用程序的不同部分或层之间的这种隔离。

​ 然而,在网络策略之前,这种对容器的隔离是不可能的。VXLAN覆盖可以提供简单的网络隔离,但是应用程序开发人员需要对流量访问pod进行更细粒度的控制。从这个简单的例子可以看出,Kubernetes网络策略可以根据源和源头,协议和端口来管理流量。

apiVersion: extensions/v1beta1 kind: NetworkPolicy metadata:
 name: pol1
spec:
 podSelector:
 matchLabels:
 role: backend
 ingress:
 - from:
 - podSelector:
 matchLabels:
 role: frontend
 ports:
 - protocol: tcp
 port: 80

并非所有的网络后端都支持策略

​ 网络策略是一个令人兴奋的功能,Kubernetes社区已经工作了很长时间。但是,它需要一个能够应用策略的网络后端。例如,简单路由网络或常用的 flannel 网络程序本身不能应用网络策略。

​ 今天Kubernetes只有几个具有政策功能的网络组件:RomanaCalicoCanal;与Weave在不久的将来指示支持。 Red Hat的OpenShift还包括网络策略功能。

​ 我们选择Romana作为这些测试的后端,因为它将pod配置为在完整L3配置中使用本地可路由的IP地址。因此,网络策略可以直接由Linux内核中的主机使用iptables规则应用。这个结果是一个高性能,易于管理的网络。

测试网络策略的性能影响

​ 在应用网络策略之后,需要根据这些策略来检查网络分组,以验证这种类型的业务是允许的。但是,对每个数据包应用网络策略的性能损失是多少?我们可以使用所有的策略功能,而不会影响应用程序性能?我们决定通过运行一些测试来找出。

​ 在深入研究这些测试之前,值得一提的是,“性能”是一个棘手的测量,网络性能尤其如此。吞吐量(即以Gpbs测量的数据传输速度)和延迟(完成请求的时间)是网络性能的常用度量。文章:K8s网络延迟比较k8s的网络方案已经检查了运行覆盖网络对吞吐量和延迟的性能影响。我们从这些测试中学到的是Kubernetes网络通常相当快,服务器没有麻烦使1G链路饱和,有或没有覆盖。只有当你有10G网络,你需要开始思考封装的开销。

​ 这是因为在典型的网络性能基准测试期间,没有用于主机CPU执行的应用逻辑,使得它可用于任何需要的网络处理。**为此,我们在不使链路或CPU饱和的操作范围内运行我们的测试。这具有隔离处理网络策略规则对主机的影响的效果。**对于这些测试,我们决定测量由在一系列响应大小范围内完成HTTP请求所需的平均时间来衡量的延迟。

测试步骤:

硬件

两台服务器采用IntelCore i5-5250U CPU(2核,每核2个线程),运行速度1.60GHz,16GBRAM和512GB SSD。

​ 对于测试,我们有一个客户端pod向服务器pod发送2,000个HTTP请求。 HTTP请求由客户端pod以确保服务器和网络均未饱和的速率发送。我们还确保每个请求通过禁用持久连接(如 HTTP 的Keep-alive)启动一个新的TCP会话。我们使用不同的响应大小运行每个测试,并测量平均请求持续时间(完成该大小的请求需要多长时间)。最后,我们用不同的策略配置重复每组测量。

​ Romana检测Kubernetes网络策略创建时,将其转换为Romana自己的策略格式,然后将其应用于所有主机。目前,Kubernetes网络策略仅适用于入口流量。这意味着传出的流量不受影响。

​ 首先,我们进行了没有任何政策的测试来建立基线。然后,我们再次运行测试,增加测试网段的策略数量。策略是常见的“允许给定协议和端口的流量”格式。为了确保数据包必须遍历所有策略,我们创建了一些不匹配数据包的策略,最后是一个将导致接受数据包的策略。

下表显示不同请求大小和策略数量的结果(以毫秒为单位):

​ 我们在这里看到的是,随着策略数量的增加,即使在应用200个策略之后,处理网络策略也会引入非常小的延迟,绝不会超过0.2ms。为了所有实际目的,当应用网络策略时不引入有意义的延迟。还值得注意的是,响应大小从0.5k增加到1.0k几乎没有效果。这是因为对于非常小的响应,创建新连接的固定开销支配整体响应时间(即传送相同数量的分组)。

注意: 0.5k和1k线在上图中的〜.8ms重叠

​ 即使作为基准性能的一个百分比,影响仍然很小。下表显示,对于最小响应大小,最差情况下的延迟保持在7%或更小,最多200个策略。对于较大的响应大小,延迟下降到约1%。

​ 在这些结果中还感兴趣的是,随着策略数量的增加,我们注意到较大的请求经历较小的相对(即百分比)性能降级。

​ 这是因为当Romana安装iptables规则时,它确保首先评估属于已建立连接的数据包。仅需要遍历连接的第一个数据包的完整策略列表。之后,连接被认为“建立”,并且连接的状态被存储在快速查找表中。因此,对于较大的请求,连接的大多数数据包都将在“已建立”表中进行快速查找,而不是对所有规则进行完全遍历。这个iptables优化结果的性能在很大程度上独立于网络策略的数量。

​ 这样的“流表”是网络设备中的常见优化,似乎iptables使用相同的技术相当有效。

​ 它还值得注意的是,在实践中,一个相当复杂的应用程序可以为每个段配置几打规则。同样的,诸如Websockets和持久连接之类的公共网络优化技术甚至会进一步提高网络策略的性能(特别是对于小请求大小),因为连接保持打开时间更长,因此可以从已建立的连接优化中受益。

​ 这些测试是使用Romana作为后端策略提供程序执行的,其他网络策略实现可能会产生不同的结果。但是,这些测试显示,对于几乎每个应用程序部署情形,可以使用Romana作为网络后端应用网络策略,而不会对性能产生任何负面影响。

​ 如果你想自己尝试,我们建议使用Romana。在我们的GitHub代码仓库中,您可以找到一个易于使用的安装程序,它与AWS,Vagrant VM或任何其他服务器配合使用。

总结

​ 通过以上的功能介绍和测试分析,k8s可以对应用之间流量以更小的颗粒度进行控制。网络性能损耗在可以接受的范围之内。

​ 好雨云帮目前的生产环境使用的是k8s 1.2.x版本,我们在使用个版本的时候k8s还没有网络策略控制的功能,因此我们是基于网络插件的方式来实现访问控制的。

​ 我们正在进行k8s 1.3.x版本生产环境的性能及兼容性测试,随后会将所有的企业版本中进行升级,社区版会在企业版升级后的当月25日进行升级。

​ 后续我们会针对calico与k8s结合的方式来完成网络互通和网络的隔离控制并对性能的损耗进行测试分析,在以后的文章中我会把测试的情况跟大家分享和讨论。

本文转移开源中国-Kubernetes集群中的高性能网络策略

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
12天前
|
存储 运维 Kubernetes
Kubernetes 集群的监控与维护策略
【4月更文挑战第23天】 在微服务架构日益盛行的当下,容器编排工具如 Kubernetes 成为了运维工作的重要环节。然而,随着集群规模的增长和复杂性的提升,如何确保 Kubernetes 集群的高效稳定运行成为了一大挑战。本文将深入探讨 Kubernetes 集群的监控要点、常见问题及解决方案,并提出一系列切实可行的维护策略,旨在帮助运维人员有效管理和维护 Kubernetes 环境,保障服务的持续可用性和性能优化。
|
13天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
|
23天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第12天】在微服务架构日益普及的当下,Kubernetes 作为容器编排的事实标准,承载着运行和管理大量服务的重要职责。本文将深入探讨 Kubernetes 集群的监控要点,并提出一系列切实可行的维护策略,旨在帮助运维人员确保集群的稳定性和性能优化。
|
1天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与维护策略
【5月更文挑战第4天】 在当今微服务架构盛行的时代,容器化技术已成为软件开发和部署的标准实践。Kubernetes 作为一个开源的容器编排平台,因其强大的功能和灵活性而广受欢迎。然而,随着 Kubernetes 集群规模的扩大,集群的监控和维护变得日益复杂。本文将探讨 Kubernetes 集群监控的重要性,分析常见的监控工具,并提出一套有效的集群维护策略,以帮助运维人员确保集群的健康运行和高可用性。
16 10
|
2天前
|
存储 运维 监控
Kubernetes 集群的持续监控与优化策略
【5月更文挑战第3天】在微服务架构和容器化部署日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排平台。然而,随着集群规模的增长和业务复杂度的提升,有效的集群监控和性能优化成为确保系统稳定性和提升资源利用率的关键。本文将深入探讨针对 Kubernetes 集群的监控工具选择、监控指标的重要性解读以及基于数据驱动的性能优化实践,为运维人员提供一套系统的持续监控与优化策略。
|
5天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第30天】 在现代云计算环境中,容器化技术已成为应用程序部署和管理的重要手段。其中,Kubernetes 作为一个开源的容器编排平台,以其强大的功能和灵活性受到广泛欢迎。然而,随之而来的是对 Kubernetes 集群监控和维护的复杂性增加。本文将探讨针对 Kubernetes 集群的监控策略和维护技巧,旨在帮助运维人员确保集群的稳定性和高效性。通过分析常见的性能瓶颈、故障诊断方法以及自动化维护工具的应用,我们将提供一套实用的解决方案,以优化 Kubernetes 环境的性能和可靠性。
|
5天前
|
运维 Kubernetes 监控
Kubernetes集群的持续性能优化策略
【4月更文挑战第30天】 在动态且不断扩展的云计算环境中,保持应用性能的稳定性是一个持续的挑战。本文将探讨针对Kubernetes集群的持续性能优化策略,旨在为运维工程师提供一套系统化的性能调优框架。通过分析集群监控数据,我们将讨论如何诊断常见问题、实施有效的资源管理和调度策略,以及采用自动化工具来简化这一过程。
|
5天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理策略
【4月更文挑战第30天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes成为了运维领域的重要话题。有效的监控和日志管理对于保障系统的高可用性和故障快速定位至关重要。本文将探讨在Kubernetes环境中实施监控和日志管理的最佳实践,包括选用合适的工具、部署策略以及如何整合这些工具来提供端到端的可见性。我们将重点讨论Prometheus监控解决方案和EFK(Elasticsearch, Fluentd, Kibana)日志管理堆栈,分析其在Kubernetes集群中的应用,并给出优化建议。
|
7天前
|
Kubernetes 网络协议 Python
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)

推荐镜像

更多