CILIUM 1.10版本增加了WIGUARD透明加密的支持

2021-06-23 06:01:07

Cilium Core团队很高兴地宣布Cilium 1.10释放。为280名越来越多的社区贡献了2042名新犯罪。贡献来自不同的公司列表,包括阿里巴巴,DataDog,谷歌,Isovalent,Suse,Wallantir之间的许多人。我们听说过与更广泛的网络越来越感兴趣的用户,无论您是'在您的overdater环境中或云中运行纤毛。因此,该发行版的主要焦点确保了Kubernetes网络和预售的基础设施之间的无缝集成。

EIGRES IP网关:在将云本机应用程序与在Kubernetes集群外部操作的LefacyCounterpart集成时,IP地址管理程序是止点,因为POD IP比传统的网络命令更加动态。通过一个新的Kubernetes CRD,静态IPS现在可以随着Kubernetes集群的数据包出口而与流量相关联。此允许使用指定的静态IP地址,查看一致的IPS和过滤流量的一致性IPS和过滤流量。(更多细节)

集成的BGP支持:我们简化了通过BGP告知Kubernetes Service IPS的能力,以允许KubernetEnvironment外部的工作负载,以便与云本机应用程序轻松通信。与1.10we' ve将BGP服务公告直接纳入CILIUMSO,即无需任何额外的额外组件就可以曝光这些服务。(更多细节)

独立负载平衡器:纤西' S高性能,RobustLoad平衡实现被调整为庞大的本机环境的规模和流失。现在,您可以用纤西作为独立负载平衡器来更换昂贵的网络中的昂贵盒子。这解锁了DSR和Maglev的支持,用于处理北/南交通inon楼宇环境,而无需kubernetes管理网络订单。(更多细节)

通过启用完整或部分数据包捕获Fortraffic匹配特定的N组滤波器,PCAP Recorder将网络可观察性提供给TheStandalone负载平衡器。 ( 更多细节)

除了通过更广泛的网络集成更好的关注,我们投入了不管环境,进一步提高性能,并增加了一整套高度要求的纤西,更容易安装和运行纤西:

Wireguard®支持:最常见的功能之一,icilium现在使用现代行行协议作为现有IPSec实现的替代方案来加密群集中的POD之间的流量。(更多细节)

新的群集管理CLI:一个实验新的纤毛命令-Line接口简化了安装,故障排除和功能启用,可以自动检测您的环境约束和配置最佳选项的配置。(更多细节)

比以往更好的表现:CILIUM现在有能力SKIPNETFILTER连接跟踪,在不需要的地方,具有改善/南方服务处理,我们' VE加倍的吞吐量性能改进了Linux隧道。将所有这些与新的调整指南一起检查,以帮助您从网络中获得最大限度!(更多细节)

许多其他改进:此版本为kubernetesdual-stack服务,阿里巴巴云的本机Ipam带来了支持,并且是第一个为Arm64分发官方图像的版本。用于牧场主和牧场主Kubernetes Engine的新导游使其成为在预境中部署的纤毛Kubernetes环境。

CILIUM是开放的源软件,用于透明提供和确保使用LinuxContainer管理平台(如Kubernetes)部署的应用程序服务之间的API连接。

在Cilium的基础上是一个名为EBPF的新的Linux内核技术,依赖于Linux本身内的强大安全性,可见性和NetworkingControl逻辑的动态插入。 EBPF用于提供函数为多簇路由,负载平衡以替换Kube-Proxy,透明加密以及网络和服务安全性。除了提供传统的网络级安全性,EBPF EnableSecurity的灵活性与应用程序协议和DNS请求/响应的内容都与Envoy紧密集成,并提供了Go的扩展框架。由于EBPF在Linux内核内运行,因此可以应用所有Cileium功能,而无需对应用程序代码或通道配置的任何更改。

随着Kubernetes成为Containize AndModernize应用程序工作负载的事实上标准平台,它的显着痛点成为遗留环境中的组件的新服务。传统的Workenloads具有固定和唯一的IP,可以由防火墙识别。来自集装箱化应用的运输工具将来自许多overs,因为容器根据需要向上和向下旋转,并且最常用为每个容器坐在的节点上的掌点。这使得难以为应用程序设定upsecurity边界并审核其行为。

1.10释放将出口网关能力带给纤毛。 Cilium Nowallows用户指定出EORTERNAT NAT策略,使得TheSelected Pods的出口流量将用一致的用户定义的IP地址伪装成一致的用户定义的IP地址。如下图所示,而不是通过eth0直接出口,而不是在工作节点中运行的POD通过Gateway节点出口群集。此节点,SNAT应用于提供一致的外部IP出发流量。从那里,网络组件可以配置为根据源IP地址的不同方式进行处理。例如,LegacyFireWALL能够通过纯粹在入站流量的源IP地址匹配,过滤源自具有特定标签的流量。

作为示例,以下策略指示纤细用于使用默认命名空间中所有POD的流量EIL IP 192.168.33.100,并发出外部CIDR 192.168.33.13/32。将重定向到出口流量将被重定向到(网关)节点,为分配192.168.33.100的节点。更多信息可以在入门指南中找到出口网关。

apierion:cilium.io/v2alpha1种类:ciliumegressnatpolicy元数据:名称:Egress -sample spec:出口: - podselector:matchlabels:#下面的标签选择默认命名空间io.kubernetes.pod.namespace:默认目的地cidrs: - 192.168.33.13/32 EIGRESSOURCEIP:" 192.168.33.100"

由于Kubernetes在内部内部环境中变得更加普遍,因此用户可以使用传统的应用程序和云本机应用程序。为了将它们连接在一起并允许OutsideAccess,需要一种集成Kubernetes和运行BGP的现有网络帧的机制。

1.10纤毛释放为BGP带来了一体化支持,将kubernetes曝光到外部,同时简化用户'部署。集成通过MetallB完成,利用“服务IP分配器的有效实现”和“BGP的L3 ProtocalSupport”。有了这个,Cilium现在能够分配LoadBalancer类型的服务IPS服务,并通过BGP向其BGProuters宣布它们。现在,能够从集群外部的流量外部达到服务,而无需任何其他组件。

未来,我们也计划通过BGP支持宣布POD CIDR和EIGRINGEIP网关。这将进一步改善云本机和传统环境之间的织布。

以下是' s用于配置纤毛的示例configmap和#39; s bgpfeature。配置的两个主要方面是对等体和地址池。前者用于与现有的BGP路由器连接网络,因此需要IP地址和ASN。后者是Cilium将IP分配给LoadBalancer服务的池。对于Bubber of Background,Kubernetes中的LoadBalancer类型的服务依靠OnAlother组件来填充分配外部IP的间隙,这是需要配置该信息的WhiConium。

apiersion:v1种:configmap元数据:名称:bgp -config命名空间:kube -system data:config.yaml:|同行: - PEER-Address:10.0.0.1 PEER-ASN:64512 MY-ASN:64512地址池: - 名称:默认协议:BGP地址: - 192.0.2.0/24

Cilium一直在逐步增加用于从云API分配IP地址的支持,特别是从AWS ENI(v1.6)和Azure(v1.8)。这一版本为阿里巴巴云添加了IPAM模式,允许纤毛到UtilizeAlibaba云ENI(弹性网络POD IPS的接口)。只有单个操作员与阿里巴巴云APISTO通信的架构,避免了大集群中的速率限制问题。

在此模式下,PODS与ENI IPS分配,可在Thealababacloud VPC中直接路由。这简化了VPCS中POD流量的通信anavoids对SNAT的需求。使用云本机网络解决方案,用户可以轻松地使用云企业网络(CEN)或VPN网关的云资源,或者将VPN网关连接到您的本地数据中心。

通过1.10版本,我们正在通过Wiguard协议增加对透明加密的支持。透明加密可以通过安全的隧道始终透明地,确保纤毛管理的POD之间的流量,从而允许用户运行Kubernetes inntrusted网络。

Cilium已支持自版本1.4以来,通过IPsec提供了透明加密,但我们被激励添加Wieguard作为替代选项的成分原因。首先,Wioguard是一个非常自以为派的协议,并且不允许调整键大小和密码套件的参数,这使得可以易于使用和简化部署和操作。每个节点的加密密钥对自动生成icilium andkey生成。旋转由Wioguard内核模块透明地执行。

WIREGUARD还具有在IPSec上具有特定工作负载的性能优势。 Inour最近的CNI性能分析博客文章,我们评估了两个协议,发现Wioguard可以实现流动工作负载的非常稳久化,但IPSec仍然可以实现更好的延迟,并且在某些情况下可以将加密算法卸载到CPU。上面的图表我们的实验中的简短摘录,让SureTo阅读完整博客帖子以获取更多细节和解释。

Wioguard的另一个技术优势在于它集成了纤毛数据库的划线部件。由于安全隧道暴露ASA Linux网络接口,因此WIREGUARD使得从容器中粗略地标记为加密,然后转发它们的安全隧道设备。下面的动画显示了Cilium中的Wireguardencrypted Packet的生活:

在直接路由和特隧道模式下,Cilium 1.10中的Wioguard加密支持,如果底层Linux内核支持它,也可以在托管的Kubernetes环境中启用。在即将举行的纤细发布中,目前缺少对主机级加密和纤细的纤细' S L7策略执行和可见性功能。

如果您想了解更多关于Cilium中的Wioguard集成,请将SureTo Watch录制到回声集第3集Livestream和读取我们入门指南的录音。

Cilium具有IPv4 / V6双堆栈支持,因为它创建。事实上,在纤毛中,在非常早期的原型中,我们开始使用IPv6实现。鉴于kubernetes一段时间缺乏官方双堆栈集成,IPv6对豆荚和服务的支持有点繁琐。随着释放的最后一个Kubernetes稳定的版本,现在已经改变了:Kubernetes 1.21引入了双堆栈的测试版支持默认情况下启用.WithCilium 1.10,我们集成了Kubernetes双堆栈支持,因此现在可以正确地集成PiliumeBPF Kube-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy-Proxy替换时集成了kubernetes双堆栈支持,以便允许对双堆栈IP地址allocationand进行了正确集成。 。

$ Helm Install Cilium cilium / cilium -version 1.10.0 \ - innespace kube-system \ --set ipv4.enabled = true \ --set ipv6.enabled = true $ kubectl get cep-n kube-system name端点ID身份ID端点状态IPv4 IPv6coreDNS-755CD654D4-MSQGM 2205 11023 Ready 10.16.115.242 FD02 :: 71CF

在以前的版本中,Cilium Core团队已经为初始测试提供了Snapshots Onarm64平台。但是,直到现在现在尚未为这个平台做好准备官方形象。在此开发循环期间,我们在若干工程中对图像构建基础设施进行了几种改进,允许自动构建用于双林/ amd64和Linux / ARM64平台的多拱形Docker图像。从Cilium 1.10开始,Docker Hub和Quay.IO上的Nexterncilium存储库将托管这些多拱像阀。

在ARM64上安装CILIUM与其他平台上的设置类似,使用相同的图像标签和摘要作为AMD64 Docker图像。这使得在包括AWS Gravitonistances和Azure Linux / ARM64管道的一系列新硬件上运行纤毛的戏剧性。纤毛甚至在威尔赛中发现了智能手机!

在Snapdragon 835(oneplus 5)上运行K8s和Cilium EBPF @Ambian @ciliumproject @kubernetesio🎉pic.twitter.com/qxmciox12x

- Ricardo Pardini(@Silviosantoz)2021年5月12日

可以使用新的CLI,可用于安装和管理纤细集群。 CLI直接与Kubernetesapi进行谈话,提供各种功能来管理yscilium的不同方面。 CLI向后兼容旧版本的纤毛。

Cilium Status命令允许快速确定AnyCillium安装的状态。它将指示不健康的纤毛组件数量,并在任何节点中快速公开失败状态:

$ cilium status / milium:__ \ cilium:好的\ __ /¯\ __ /运算符:OK / \ \ __ /¯¯\:禁用\ __ /¯\ __ / ClusterMesh:禁用\ __ /部署纤西运算符所需:2,准备:2/2,可用:2 / 2daemonset Cilium所需:2,准备:2/2,可用:2/2 Containers:Cilium运行:2厘米运行:2Image版本番荔枝Quay.io/cilium/cilium :v1.10.0:2 icilium-operator quay.io/cilium/operator-generic :v1.10.0:2

可以使用单个命令(Cilium ConnectiveTtest)运行新的连接测试。它确保网络中的正确性,Kubernetes Services和Networkpolicy强制,非常适于验证CILIUM是否已安装。

$ cilium连接测试¶[gke_cilium-dev_us-west2-a_test-21504]创建连接的命名空间,用于连接检查......✨[gke_cilium-dev_us-west2-a_test-21504]部署回声相同节点服务... [... ... ] --------------------------------------------- ---------------------------------------------------------------- ----------------🔌[Pod-to-pod]测试纤毛测试/ client-68c6675687-tcw9f - >纤毛 - 测试/回声 - 其他 - 节点-588bf78fbb-84fvc ... ---------------------------------------------------------------- ---------------------------------------------------------------- ------------------------------ [Pod-to-pod]纤毛 - 测试/客户端-68C6675687-TCW9F (10.96.6.173) - >纤毛 - 测试/回声 - 其他 - 节点-588bf78fbb-84fvc(10.96.5.226)[...] ------------------------- ---------------------------------------------------------------- ---------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ----------✅9/9测试成功(0警告)

从以前的版本开始工作,我们继续严格评估纤钙' S网络性能。我们的最新功能最近被概述在一个博客帖子以及indodationInto cilium' s文档中,我们为不同类型的直接路由工作负载提供了数字,显示了eBPF,用于低延迟以及高CNI吞吐量性能,并与之计算的Wineoguard IPsec。

通过我们深入的绩效评估,Cilium 1.10包括一个数量的atdatapath改进,这次主要集中在Vxlan / Geneve TunneDingperforcance以及NetFilter开销的减少。最为显着地:

BPF主机Routingwas扩展到支持封装。这意味着现在可以在直接路由和隧道模式中实现最大化性能EBPF。不纯,这改善了南北服务处理与直接路由模式相接的北方服务处理,因为网络流量不需要通过上主堆不再处理。

我们在Linux内核中识别和固定的性能问题,其中vxlan和geneve的CencapsulateDP数据包的Gro聚合被延迟,导致使用纤毛封装的封装性能。该修复程序已被返回到所有稳定性库(例如,4.9)以及集成到下游分布中,如Ubuntu LTS变体。在我们的测试环境中,这增加了Gbit / S TCP单流程率,对VXLAN的流量增加了一倍以上的流量Geneve封装。

最后,Cilium现在可以配置为跳过NetFilter Conntrack:我们推出了一种新的选项 - “禁止Conntrack-Iptables-Truel”,它允许在尽可能跳过XTIPNETFilter连接跟踪。您可以在调优指南中阅读更多。

我们将在即将介绍的博客文章中进行跟进并发布我们的绩效评估的绩效评估结果。我们的测试环境的初步结果产生了显着的改进,如下所示的延迟区域。

对于常规POD到Pod的情况,其中流量需要通过VXLAN / Geneve隧道遍历,我们能够显着提高大量数据传输的批量性能,通常通过Netperf TCP_Stream Tests进行基准测试。我们为Linux内核添加了一个小的改进。 GRO Engine,它是Orkingibleto优化Linux'通过聚合MTU大小的数据包来跨越高达64K超级数据包的堆栈遍历,以减少历史的每包处理成本。我们发现聚合将仅发生在VXLAN / Genevedriver' S Gro小区而不是接收时的物理设备,意思,必须通过UDP堆栈单独遍历以汇总。将聚合移动到物理设备显着提高了性能。

对于外部客户端在纤毛管理编码上连接到POD的情况下,例如,通过NodePort服务,那么与直接路由案之前的那样可以使用相同的改进。含义,转发可以在Thetc EBPF层中执行,而不是必须将数据包推送到主堆栈。该结果在单流吞吐量(TCP_STREAM)中的显着提升以及请求/响应类型工作负载(TCP_RR和TCP_CRR)的延迟中的显着延迟。当数据包必须遍历THETUNNEL时,这种情况的增益不太可见(例如,用于普通豆荚POD CASE)由于此任务通过uppeudp堆栈,但是,对于节点上的后退本地的服务,这不是服务。典型用例是NoderTrafficpolicy = Local下的NodePort。

对于最后一个情况,我们调查了直接路由性能,当用户有必要通过Hoststack中的NetFilter子系统时,它是由于运行旧的内核,或者只是由于具有自定义NetFilter规则的Cilium。特别是NetFilter连接跟踪器CANADD在所有部署中可能不需要在快速路径中,特别是因为我们添加了基于EBPF的伪装,因此可以使用ASAN替代品。然后可以通过禁用所有POD流量的连接跟踪要求来最小化这种遍历成本,从而绕过网络

......