欢迎光临散文网 会员登陆 & 注册

SpringCloudalibaba+Vue开发仿社交小程序-扈江离与辟芷兮

2023-04-03 23:44 作者:bili_68802470155  | 我要投稿


我们为何选择 Cilium 作为 Kubernetes 的网络接口

背景

SpringCloudalibaba+Vue开发仿社交小程序

download:https://www.zxit666.com/5959/

我们为不同行业、范围和技术堆栈的公司构建和维护根底设备。他们的应用程序部署到私有云和公共云以及裸机效劳器。他们对容错性、可扩展性、财务费用、平安性等方面有不同的请求。在提供我们的效劳时,我们需求满足一切这些希冀,同时足够高效以应对新兴的与根底设备相关的多样性。

多年前,当我们构建基于 Kubernetes 的早期平台时,我们着手完成基于牢靠开源组件的消费就绪、简单、牢靠的处理计划。为完成这一目的,我们的 CNI 插件的自然选择似乎是 Flannel(与 kube-proxy 一同运用)。

当时最受欢送的选择是 Flannel 和 Weave Net。Flannel 更成熟,依赖性最小,并且易于装置。我们的基准测试也证明它的性能很高。因而,我们选择了它,并最终对我们的选择感到称心。

同时,我们深信有一天会到达极限。

随着需求的增长

随着时间的推移,我们取得了更多的客户、更多的 Kubernetes 集群以及对平台的更详细的请求。我们遇到了对更好的平安性、性能和可观测性的日益增长的需求。这些需求适用于各种根底设备元素,而网络显然是其中之一。最终,我们认识到是时分转向更高级的 CNI 插件了。

许多问题促使我们跳到下一阶段:

  1. 一家金融机构执行了严厉的“默许制止一切”规则。
  2. 一个普遍运用的门户网站的集群有大量的效劳,这对 kube-proxy 产生了压倒性的影响。
  3. PCI DSS 合规性请求另一个客户施行灵敏而强大的网络战略管理,并在其之上具有良好的可观测性。
  4. 在 Flannel 运用的 iptables 和 netfilter 中,遇到大量传入流量的多个其他应用程序面临性能问题。

我们不能再受现有限制的障碍,因而决议在我们的 Kubernetes 平台中寻觅另一个 CNI —— 一个能够应对一切新应战的 CNI。



为什么选择 Cilium

今天有很多可用的 。我们想坚持运用 ,它被证明是一项强大的技术,在可观测性、平安性等方面提供了许多益处。思索到这一点,当您想到 CNI 插件时

总的来说,他们两个都十分棒。但是,我们依然需求选择其中之一。Cilium 似乎在社区中得到了更普遍的运用和讨论:更好的 GitHub 统计数据(例如 stars、forks 和 contributors)能够作为证明其价值的某种论据。它也是一个 CNCF 项目。固然它不能保证太多,但这依然是一个有效的观念,一切事情都是对等的。

在阅读了关于 Cilium 的各种文章后,我们决议尝试一下,并在几个不同的 K8s 集群上停止了各种测试。事实证明,这是一次地道的积极体验,提醒了比我们预期更多的功用和益处。

我们喜欢的 Cilium 的主要功用

在思索能否运用 Cilium 来处理我们遇到的上述问题时,我们喜欢 Cilium 的中央如下:

1. 性能

运用 bpfilter(而不是 iptables)停止路由将过滤任务转移到内核空间,这会产生令人印象深入的性能提升。这正是项目设计、大量文章和第三方基准测试所承诺的。我们本人的测试证明,与我们之前运用的 Flannel + kube-proxy 相比,处置流量速度有显着提升。

eBPF host-routing compared to using iptables. source:

有关此主题的有用材料包括:

2. 更好的网络战略

扩展了 Kubernetes NetworkPolicy API。它带来了 L7(而不只仅是 L3/L4)网络战略支持网络战略中的 ingress 和 egress 以及标准等功用。

正如 Cilium 开发人员所说:“理想状况下,一切功用都将兼并到规范资源格式中,并且不再需求此 CRD。”

3. 节点间流量控制

借您能够控制节点间流量。这些战略适用于整个集群(非命名空间),并为您提供将节点指定为源和目的的办法。它使过滤不同节点组之间的流质变得便当。

4. 战略执行形式

易于运用的 让生活变得愈加轻松。 default 形式合适大多数状况:没有初始限制,但一旦允许某些内容,其他一切内容都会遭到限制。Always* 形式 —— 当对一切端点执行战略时 —— 关于具有更高平安请求的环境很有协助。

5. Hubble 及其 UI

是一个真正出色的网络和效劳可观测性以及视觉渲染工具。详细来说,就是对流量停止监控,实时更新效劳交互图。您能够轻松查看正在处置的恳求、相关 IP、如何应用网络战略等。

如今举几个例子,阐明如何在我的 Kubernetes 沙箱中运用 Hubble。首先,这里我们有带有 Ingress-NGINX 控制器的命名空间。我们能够看到一个外部用户经过 Dex 受权后进入了 Hubble UI。会是谁呢?...

如今,这里有一个更有趣的例子:Hubble 花了大约一分钟的时间可视化 Prometheus 命名空间如何与集群的其他局部通讯。您能够看到 Prometheus 从众多效劳中抓取了指标。多么棒的功用!在您破费数小时为您的项目绘制一切这些根底架构图之前,您应该曾经晓得了!

6. 可视化战略编辑器

提供易于运用、鼠标友好的 UI 来创立规则并获取相应的 YAML 配置以应用它们。我在这里独一需求埋怨的是短少对现有配置停止反向可视化的功用。

再此阐明,这个列表远非完好的 Cilium 功用集。这只是我依据我们的需求和我们最感兴味的内容做出的有成见的选择。

Cilium 为我们做了什么

让我们回忆一下我们的客户遇到的详细问题,这些问题促使我们开端对在 Kubernetes 平台中运用 Cilium 产生兴味。

第一种状况下的“默许制止一切”规则是运用上述战略执行方式完成的。通常,我们会经过指定此特定环境中允许的内容的完好列表并制止其他一切内容来依赖 default 形式。

以下是一些可能对其别人有协助的相当简单的战略示例。您很可能会有几十个或数百个这样的战略。

  1. 允许任何 Pod 访问 Istio 端点:

apiVersion: cilium.io/v2 kind: CiliumClusterwideNetworkPolicy metadata: name: all-pods-to-istio-internal-access spec: egress: - toEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: infra-istio toPorts: - ports: - port: "8443" protocol: TCP endpointSelector: {}

  1. 允许给定命名空间内的一切流量:

apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: allow-ingress-egress-within-namespace spec: egress: - toEndpoints: - {} endpointSelector: {} ingress: - fromEndpoints: - {}

  1. 允许 VictoriaMetrics 抓取给定命名空间中的一切 Pod:

apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: vmagent-allow-desired-namespace spec: egress: - toEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: desired-namespace endpointSelector: matchLabels: k8s:io.cilium.k8s.policy.serviceaccount: victoria-metrics-agent-usr k8s:io.kubernetes.pod.namespace: vmagent-system

  1. 允许 Kubernetes Metrics Server 访问 kubelet 端口:

apiVersion: cilium.io/v2 kind: CiliumClusterwideNetworkPolicy metadata: name: host-firewall-allow-metrics-server-to-kubelet spec: ingress: - fromEndpoints: - matchLabels: k8s:io.cilium.k8s.policy.serviceaccount: metrics-server k8s:io.kubernetes.pod.namespace: my-metrics-namespace toPorts: - ports: - port: "10250" protocol: TCP nodeSelector: matchLabels: {}

至于其他问题,我们最初遇到的应战是:

  • 案例 #2 和 #4,由于基于 iptables 的网络堆栈性能不佳。我们提到的基准和我们执行的测试在实践操作中证明了本人。
  • Hubble 提供了足够程度的可观测性,这在案例 #3 中是必需的。

下一步是什么?

总结这次经历,我们胜利处理了与 Kubernetes 网络相关的一切痛点。

关于 Cilium 的总体将来,我们能说些什么?固然它目前是,但它已于去年年底。这需求一些时间才干完成,但这个项目正朝着一个十分明白的方向行进。最近,在 2023 年 2 月,Cilium 经过了两次平安审计,这是进一步毕业的重要一步。

我们正在关注该项目的,并等候一些功用和相关工具的施行或变得足够成熟。(没错, 将会很棒!)

例如,固然我们在高流量集群中运用 Kubernetes ,但相关的 目前处于 beta 阶段 —— 因而,我们正在等候其稳定发布。我们正在等候稳定的另一个测试版功用是 ,它将 Pod 流量本地重定向到节点内的另一个后端 Pod,而不是整个集群内的随机后端 Pod。

后记

在消费环境中肯定了我们新的网络根底设备并评价了它的性能和新功用之后,我们很快乐决议采用 Cilium,由于它的益处是显而易见的。关于多样化且不时变化的云原生世界来说,这可能不是灵丹妙药,而且绝不是最容易上手的技术。但是,假如你有动力、学问和一点冒险愿望,那么它 100% 值得尝试,而且很可能会得到多方面的报答。


SpringCloudalibaba+Vue开发仿社交小程序-扈江离与辟芷兮的评论 (共 条)

分享到微博请遵守国家法律