其他分享
首页 > 其他分享> > 【Cilium 1.10 重磅发布!】支持 Wireguard, BGP, Egress IP 网关, XDP 负载均衡, 阿里云集成

【Cilium 1.10 重磅发布!】支持 Wireguard, BGP, Egress IP 网关, XDP 负载均衡, 阿里云集成

作者:互联网

 

作者: 清弦

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


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


 

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

标签:网关,https,1.10,IP,cilium,Egress,io,Pod,Cilium
来源: https://blog.csdn.net/power886/article/details/117283653