热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Cilium1.10重磅发布!】支持Wireguard,BGP,EgressIP网关,XDP负载均衡,阿里云集成

 作者:清弦阿里云技术专家,主要负责ACK容器网络设计与研发,阿里云开源CNI项目Terway主要维护者,CiliumAlibabaIPAM贡献者本文翻译自Cilium1.10发布


 

作者: 清弦


阿里云技术专家,主要负责ACK 容器网络设计与研发,阿里云开源CNI项目Terway 主要维护者,Cilium Alibaba IPAM 贡献者





本文翻译自Cilium 1.10 发布文档[1] 由于译者水平有限,本文不免存在遗漏或错误之处。如有疑问,请查阅原文。 以下是译文。




 


  • Egress IP Gateway
  • BGP for LoadBalancer VIP
  • 阿里云集成
  • Wireguard 透明加密
  • Cilium ARM64 镜像
  • Cilium CLI
    • 集群范围 Cilium Status
    • 连通性和一致性测试
  • Cilium网络性能改进
    • Case 1: Pod 到 Pod 隧道模式
    • Case 2: 主机到 Service/Pod 隧道模式
    • Case 3: Pod 到 Pod 直接路由模式
  • XDP-based Standalone Load Balancer
    • DSR with IPIP Encapsulation and L4 DNAT
    • n-Tuple PCAP Recorder
    • 参考资料

Cilium 团队宣布 Cilium 1.10 版本正式发布。此版本总共包含了 2042 个新的提交。280位贡献者来自不同的企业包括: 阿里巴巴、Datadog、Google、 Isovalent、 SuSE、Palantir 等。 无论是自建数据中心,还是云上使用Cilium的用户,对更好、更广泛的网络集成提出了很多反馈。 此版本的主要重点是确保Kubernetes网络与企业内部部署基础结构之间的无缝集成。

 


  • Egress IP gateway: 当将云原生应用程序与在集群之外运行的传统应用程序集成时,由于Pod IP比传统网络更具弹性,因此IP地址管理可能会成为一个难题。 通过新的Kubernetes CRD,可以在数据包离开Kubernetes集群时将静态IP与流量相关联。 这使外部防火墙可以识别固定IP,并且过滤特定pod的流量。[More details][2]

  • Integrated BGP Support: 我们简化了通过BGP公告 Kubernetes service IP的功能,以允许外部负载轻松和集群内云原生应用程序进行通信。 在1.10版本中,我们在Cilium中集成了 BGP 服务公告,因而无需任何其他外部组件就能暴露这些 service。[More details][3]

  • 独立 Load Balancer: Cilium的高性能、强大的负载平衡实现针对云原生环境的规模和客户需求进行了调整。 现在,您可以使用Cilium作为独立的负载平衡器来替换网络中昂贵的硬件负载均衡。 无需Kubernets,也可使用DSR和Maglev在本地环境中处理南北流量。 [More details][4]
    • PCAP Recorder 通过全部或部分抓包,在独立负载均衡器模式下提供可观测性能力。 [More details][5]

除了着眼于与更广泛的网络集成外,我们还致力于简化Cilium安装部署,进一步提升网络性能,并添加了一系列急需的功能:


  • 支持 Wireguard: 作为最受人追捧的功能之一,Cilium现在支持使用Wireguard协议替代现有IPsec实现对集群中Pod之间的流量进行加密。[More details][6]

  • 集群管理 CLI (New): 增加了实验性的Cilium CLI 工具,通过自动检测您的环境限制并使用最佳选项集来配置Cilium,从而简化了安装、故障排除和功能启用。[More details][7]

  • 更好的性能: Cilium现在具有跳过 Netfilter 连接跟踪的功能,改进了北/南服务处理,并且通过改进的Linux隧道将吞吐量性能提高了一倍。 [More details][8]

  • 更多增强: 该版本带来了对[Kubernetes双栈][9][阿里云原生IPAM][10],并发布[ARM64的第一个官方版本][11]。新的 Rancher 、Rancher Kubernetes Engine 指南使得在本地Kubernetes环境中部署Cilium更容易。


Egress IP Gateway

主要贡献: Yongkun Gui (Google) and Bolun Zhao (Google)

随着Kubernetes成为应用容器化的标准平台,将这些新服务连接到遗留环境变得很痛苦。传统工作负载具有可以被防火墙识别的固定且唯一的IP。当容器根据需要伸缩时,来自容器应用程序的流量将来自许多不同的IP,通常会以每个容器所在节点的IP的形式出现。这使得很难为应用程序设置安全边界并审核其行为。

1.10版本将出口网关功能引入了Cilium。现在,Cilium允许用户指定出口NAT策略,以便将所选的Pod的出口流量伪装成用户定义的IP地址。如下图所示,来自工作节点中运行的Pod的流量不是通过eth0直接流出,而是通过网关节点从群集中流出。在此节点上,将应用SNAT为出站流量提供一致的外部IP。从那里,可以将网络组件配置为根据源IP地址不同地处理流量。例如,传统防火墙能够通过完全匹配入站流量的源IP地址来过滤源自具有特定标签的Pod的流量。

例下面策略,Cilium 会把 default 命名空间下,发到外部地址 192.168.33.13/32的 Pod的流量,重定向到 192.168.33.100的(网关)节点。 可在[入门指南][12]中找到有关出口网关的更多信息。

apiVersion: cilium.io/v2alpha1
kind: CiliumEgressNATPolicy
metadata:
  name: egress-sample
spec:
  egress:
  - podSelector:
      matchLabels:
        # The following label selects default namespace
        io.kubernetes.pod.namespace: default
  destinationCIDRs:
  - 192.168.33.13/32
  egressSourceIP: "192.168.33.100"

BGP for LoadBalancer VIP

主要贡献: Chris Tarazi (Isovalent)

随着Kubernetes在本地环境中变得越来越普遍,用户在其环境中越来越多地同时使用传统应用程序和Cloud Native应用程序。 为了将它们连接在一起并允许外部访问,需要一种机制来集成Kubernetes和运行BGP的现有网络基础结构。

Cilium 1.10版本带来了对BGP的集成支持,将Kubernetes暴露于外部,同时简化了用户的部署。 集成通过[MetalLB][13]进行,利用了service IP 和BGP的L3协议支持。 现在Cilium 可为LoadBalancer的service 分配 IP,并通过BGP向其BGP路由器通告它们。 现在无需其他组件就可以把 serivce 暴露到集群外部。

将来,我们计划也支持通过BGP发布Pod CIDR和出口IP网关。 这将进一步改善Cloud Native与传统环境之间的桥梁。以下是用于配置Cilium的BGP功能的ConfigMap示例。 配置的两个主要方面是对等方和地址池。 前者用于与网络中现有的BGP路由器连接,因此需要IP地址和ASN。 后者是Cilium将为LoadBalancer服务分配IP的池。

apiVersion: v1
kind: ConfigMap
metadata:
  name: bgp-config
  namespace: kube-system
data:
  config.yaml: |
    peers:
    - peer-address: 10.0.0.1
      peer-asn: 64512
      my-asn: 64512
    address-pools:
    - name: default
      protocol: bgp
      addresses:
      - 192.0.2.0/24

更多请参阅文档中的[BGP指南][14]


阿里云集成

主要贡献: Bokang Li (Alibaba)

Cilium 支持从公有云上分配IP给Pod,之前已经支持的有 AWS ENI (v1.6)、Azure (v1.8)模式。 在1.10版本里增加了阿里云的支持,使得 Cilium 可以直接为Pod 分配 ENI (Elastic Network Interface)上的IP。

这种模式下,Cilium 为Pod 直接分配 ENI 的IP,这个地址在阿里云的 VPC 上可以被直接路由。这种模式简化了 Pod 间流量模型避免了封装、SNAT。作为云原生的网络解决方案,用户可以轻易使用云企业网(CEN)、VPN网关将自建集群接入到阿里云上。

更多信息参考[阿里云使用文档][15]


Wireguard 透明加密

主要贡献: Martynas Pumputis (Isovalent) and Sebastian Wicki (Isovalent)

在1.10版本中,我们加入Wireguard协议进行透明加密。 透明加密是一项功能,可确保Pod之间的流量通过安全隧道传输,从而允许用户在不受信任的网络中运行Kubernetes。 自1.4版开始,Cilium就已经支持通过IPSec进行透明加密。现在,我们也引入了 Wireguard。Wireguard 协议不允许对诸如密钥大小和密码套件之类的参数进行调整,这使其非常易于使用并简化了部署和操作。 每个节点的加密密钥对由Cilium自动生成,并且密钥旋转由Wireguard内核模块透明地执行。

对于某些工作负载,Wireguard还具有优于IPSec的性能优势。 在我们最近的[CNI性能分析][16] 博客文章中,我们对这两种协议进行了评估,发现Wireguard可以为流工作负载实现非常高的吞吐量,但是IPSec仍可以实现更好的延迟,并且在某些情况下可以将加密算法卸载到CPU。 上图显示了我们实验的简短摘录,请阅读完整的博客以获取更多详细信息。

Wireguard的另一个技术优势是,它可以很好地集成到Cilium datapath 体系中。 由于安全隧道是作为Linux网络接口公开的,因此Wireguard可以非常轻松地标记来自容器的数据包以进行加密,然后将其转发到安全隧道设备。 下面的动画显示了Cilium中Wireguard加密数据包的路径:

Cilium 1.10中直接路由和隧道模式均支持的Wireguard加密,如果基础Linux内核支持的话,也可以在托管Kubernetes环境中启用Wireguard加密。 当前缺少对主机级别加密以及Cilium L7 策略和可观测性的支持,并将在后面Cilium版本中添加。 如果您想了解有关Cilium中的Wireguard集成的更多信息,请确保观看[eCHO第3集直播的录制][17],并阅读Cilium文档中的[入门指南][18]


Kubernetes 双栈

主要贡献: Deepesh Pathak (Microsoft), André Martins (Isovalent)

Cilium 创建之初就支持 IPv4 / v6双栈。 在Cilium的早期原型中也支持 IPv6 单栈模式。 鉴于Kubernetes一直缺乏双栈支持,Cilium 对Pods、 Services的 IPv6 支持有点麻烦。 在最新的Kubernetes 稳定版本中IP双栈已经默认开启: [Kubernetes 1.21默认开启IP双栈(beta)][19]。 Cilium IPv4/v6 双栈功能可以通过 helm 部署时开启,设置 ipv6.enabled:

$ helm install cilium cilium/cilium --version 1.10.0 \
   --namespace kube-system \
   --set ipv4.enabled=true \
   --set ipv6.enabled=true
$ kubectl get cep -n kube-system
NAME                       ENDPOINT ID   IDENTITY ID   ENDPOINT STATE   IPV4            IPV6
coredns-755cd654d4-msqgm   2205          11023         ready            10.16.115.242   fd02::71cf

Cilium ARM64 镜像

主要贡献: André Martins (Isovalent)

在以前的版本中,Cilium核心团队已在ARM64平台上提供了快照以用于初始测试。 但是没发布到Cilium的官方镜像。 在个迭代中我们对镜像构建进行了一些改进,以允许自动构建多架构镜像docker镜像。 从Cilium 1.10开始,Docker Hub和Quay.io上的官方Cilium存储库将托管这些多架构镜像。 在ARM64上安装Cilium与在其他平台上安装类似,使用与AMD64 docker镜像相同的映像标签。 这让Cilium 具备在AWS Graviton 实例、Azure Linux/ARM64 Pipelines 等一系列新硬件上运行的能力。 Cilium甚至可以在智能手机上运行!


Armbian trunk on a Snapdragon 835 (OnePlus 5) running k8s and Cilium eBPF @armbian @ciliumproject @kubernetesio 

推荐阅读
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 深入理解Java多线程与并发机制
    本文探讨了Java多线程和并发机制的核心概念,包括多线程类的分类、执行器框架、并发容器及控制工具。通过详细解析这些组件,帮助开发者更好地理解和应用多线程技术。 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文探讨了如何将个人经历,特别是非传统的职业路径,转化为职业生涯中的优势。通过作者的亲身经历,展示了舞蹈生涯对商业思维的影响。 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • 本文详细介绍了如何在Android应用中实现重复报警功能。示例代码可在以下路径找到:https://developer.android.com/samples/RepeatingAlarm/index.html。首先,我们将从Manifest文件开始分析。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
author-avatar
手机用户2502898397
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有