SpringCloudalibaba+Vue開(kāi)發(fā)仿社交小程序-扈江離與辟芷兮
我們?yōu)楹芜x擇 Cilium 作為 Kubernetes 的網(wǎng)絡(luò)接口
背景
SpringCloudalibaba+Vue開(kāi)發(fā)仿社交小程序
download:https://www.zxit666.com/5959/
我們?yōu)椴煌袠I(yè)、范圍和技術(shù)堆棧的公司構(gòu)建和維護(hù)根底設(shè)備。他們的應(yīng)用程序部署到私有云和公共云以及裸機(jī)效勞器。他們對(duì)容錯(cuò)性、可擴(kuò)展性、財(cái)務(wù)費(fèi)用、平安性等方面有不同的請(qǐng)求。在提供我們的效勞時(shí),我們需求滿足一切這些希冀,同時(shí)足夠高效以應(yīng)對(duì)新興的與根底設(shè)備相關(guān)的多樣性。
多年前,當(dāng)我們構(gòu)建基于 Kubernetes 的早期平臺(tái)時(shí),我們著手完成基于牢靠開(kāi)源組件的消費(fèi)就緒、簡(jiǎn)單、牢靠的處理計(jì)劃。為完成這一目的,我們的 CNI 插件的自然選擇似乎是 Flannel(與 kube-proxy 一同運(yùn)用)。
當(dāng)時(shí)最受歡送的選擇是 Flannel 和 Weave Net。Flannel 更成熟,依賴性最小,并且易于裝置。我們的基準(zhǔn)測(cè)試也證明它的性能很高。因而,我們選擇了它,并最終對(duì)我們的選擇感到稱心。
同時(shí),我們深信有一天會(huì)到達(dá)極限。
隨著需求的增長(zhǎng)
隨著時(shí)間的推移,我們?nèi)〉昧烁嗟目蛻?、更多?Kubernetes 集群以及對(duì)平臺(tái)的更詳細(xì)的請(qǐng)求。我們遇到了對(duì)更好的平安性、性能和可觀測(cè)性的日益增長(zhǎng)的需求。這些需求適用于各種根底設(shè)備元素,而網(wǎng)絡(luò)顯然是其中之一。最終,我們認(rèn)識(shí)到是時(shí)分轉(zhuǎn)向更高級(jí)的 CNI 插件了。
許多問(wèn)題促使我們跳到下一階段:
- 一家金融機(jī)構(gòu)執(zhí)行了嚴(yán)厲的“默許制止一切”規(guī)則。
- 一個(gè)普遍運(yùn)用的門戶網(wǎng)站的集群有大量的效勞,這對(duì) kube-proxy 產(chǎn)生了壓倒性的影響。
- PCI DSS 合規(guī)性請(qǐng)求另一個(gè)客戶施行靈敏而強(qiáng)大的網(wǎng)絡(luò)戰(zhàn)略管理,并在其之上具有良好的可觀測(cè)性。
- 在 Flannel 運(yùn)用的 iptables 和 netfilter 中,遇到大量傳入流量的多個(gè)其他應(yīng)用程序面臨性能問(wèn)題。
我們不能再受現(xiàn)有限制的障礙,因而決議在我們的 Kubernetes 平臺(tái)中尋覓另一個(gè) CNI —— 一個(gè)能夠應(yīng)對(duì)一切新應(yīng)戰(zhàn)的 CNI。
為什么選擇 Cilium
今天有很多可用的 。我們想堅(jiān)持運(yùn)用 ,它被證明是一項(xiàng)強(qiáng)大的技術(shù),在可觀測(cè)性、平安性等方面提供了許多益處。思索到這一點(diǎn),當(dāng)您想到 CNI 插件時(shí)
總的來(lái)說(shuō),他們兩個(gè)都十分棒。但是,我們依然需求選擇其中之一。Cilium 似乎在社區(qū)中得到了更普遍的運(yùn)用和討論:更好的 GitHub 統(tǒng)計(jì)數(shù)據(jù)(例如 stars、forks 和 contributors)能夠作為證明其價(jià)值的某種論據(jù)。它也是一個(gè) CNCF 項(xiàng)目。固然它不能保證太多,但這依然是一個(gè)有效的觀念,一切事情都是對(duì)等的。
在閱讀了關(guān)于 Cilium 的各種文章后,我們決議嘗試一下,并在幾個(gè)不同的 K8s 集群上停止了各種測(cè)試。事實(shí)證明,這是一次地道的積極體驗(yàn),提醒了比我們預(yù)期更多的功用和益處。
我們喜歡的 Cilium 的主要功用
在思索能否運(yùn)用 Cilium 來(lái)處理我們遇到的上述問(wèn)題時(shí),我們喜歡 Cilium 的中央如下:
1. 性能
運(yùn)用 bpfilter(而不是 iptables)停止路由將過(guò)濾任務(wù)轉(zhuǎn)移到內(nèi)核空間,這會(huì)產(chǎn)生令人印象深入的性能提升。這正是項(xiàng)目設(shè)計(jì)、大量文章和第三方基準(zhǔn)測(cè)試所承諾的。我們本人的測(cè)試證明,與我們之前運(yùn)用的 Flannel + kube-proxy 相比,處置流量速度有顯著提升。
eBPF host-routing compared to using iptables. source:
有關(guān)此主題的有用材料包括:
2. 更好的網(wǎng)絡(luò)戰(zhàn)略
擴(kuò)展了 Kubernetes NetworkPolicy API。它帶來(lái)了 L7(而不只僅是 L3/L4)網(wǎng)絡(luò)戰(zhàn)略支持網(wǎng)絡(luò)戰(zhàn)略中的 ingress 和 egress 以及標(biāo)準(zhǔn)等功用。
正如 Cilium 開(kāi)發(fā)人員所說(shuō):“理想狀況下,一切功用都將兼并到規(guī)范資源格式中,并且不再需求此 CRD?!?/p>
3. 節(jié)點(diǎn)間流量控制
借您能夠控制節(jié)點(diǎn)間流量。這些戰(zhàn)略適用于整個(gè)集群(非命名空間),并為您提供將節(jié)點(diǎn)指定為源和目的的辦法。它使過(guò)濾不同節(jié)點(diǎn)組之間的流質(zhì)變得便當(dāng)。
4. 戰(zhàn)略執(zhí)行形式
易于運(yùn)用的 讓生活變得愈加輕松。 default 形式合適大多數(shù)狀況:沒(méi)有初始限制,但一旦允許某些內(nèi)容,其他一切內(nèi)容都會(huì)遭到限制。Always* 形式 —— 當(dāng)對(duì)一切端點(diǎn)執(zhí)行戰(zhàn)略時(shí) —— 關(guān)于具有更高平安請(qǐng)求的環(huán)境很有協(xié)助。
5. Hubble 及其 UI
是一個(gè)真正出色的網(wǎng)絡(luò)和效勞可觀測(cè)性以及視覺(jué)渲染工具。詳細(xì)來(lái)說(shuō),就是對(duì)流量停止監(jiān)控,實(shí)時(shí)更新效勞交互圖。您能夠輕松查看正在處置的懇求、相關(guān) IP、如何應(yīng)用網(wǎng)絡(luò)戰(zhàn)略等。
如今舉幾個(gè)例子,闡明如何在我的 Kubernetes 沙箱中運(yùn)用 Hubble。首先,這里我們有帶有 Ingress-NGINX 控制器的命名空間。我們能夠看到一個(gè)外部用戶經(jīng)過(guò) Dex 受權(quán)后進(jìn)入了 Hubble UI。會(huì)是誰(shuí)呢?...
如今,這里有一個(gè)更有趣的例子:Hubble 花了大約一分鐘的時(shí)間可視化 Prometheus 命名空間如何與集群的其他局部通訊。您能夠看到 Prometheus 從眾多效勞中抓取了指標(biāo)。多么棒的功用!在您破費(fèi)數(shù)小時(shí)為您的項(xiàng)目繪制一切這些根底架構(gòu)圖之前,您應(yīng)該曾經(jīng)曉得了!
6. 可視化戰(zhàn)略編輯器
提供易于運(yùn)用、鼠標(biāo)友好的 UI 來(lái)創(chuàng)立規(guī)則并獲取相應(yīng)的 YAML 配置以應(yīng)用它們。我在這里獨(dú)一需求埋怨的是短少對(duì)現(xiàn)有配置停止反向可視化的功用。
再此闡明,這個(gè)列表遠(yuǎn)非完好的 Cilium 功用集。這只是我依據(jù)我們的需求和我們最感興味的內(nèi)容做出的有成見(jiàn)的選擇。
Cilium 為我們做了什么
讓我們回憶一下我們的客戶遇到的詳細(xì)問(wèn)題,這些問(wèn)題促使我們開(kāi)端對(duì)在 Kubernetes 平臺(tái)中運(yùn)用 Cilium 產(chǎn)生興味。
第一種狀況下的“默許制止一切”規(guī)則是運(yùn)用上述戰(zhàn)略執(zhí)行方式完成的。通常,我們會(huì)經(jīng)過(guò)指定此特定環(huán)境中允許的內(nèi)容的完好列表并制止其他一切內(nèi)容來(lái)依賴 default 形式。
以下是一些可能對(duì)其別人有協(xié)助的相當(dāng)簡(jiǎn)單的戰(zhàn)略示例。您很可能會(huì)有幾十個(gè)或數(shù)百個(gè)這樣的戰(zhàn)略。
- 允許任何 Pod 訪問(wèn) Istio 端點(diǎn):
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: {}
- 允許給定命名空間內(nèi)的一切流量:
apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: allow-ingress-egress-within-namespace spec: egress: - toEndpoints: - {} endpointSelector: {} ingress: - fromEndpoints: - {}
- 允許 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
- 允許 Kubernetes Metrics Server 訪問(wèn) 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: {}
至于其他問(wèn)題,我們最初遇到的應(yīng)戰(zhàn)是:
- 案例 #2 和 #4,由于基于 iptables 的網(wǎng)絡(luò)堆棧性能不佳。我們提到的基準(zhǔn)和我們執(zhí)行的測(cè)試在實(shí)踐操作中證明了本人。
- Hubble 提供了足夠程度的可觀測(cè)性,這在案例 #3 中是必需的。
下一步是什么?
總結(jié)這次經(jīng)歷,我們勝利處理了與 Kubernetes 網(wǎng)絡(luò)相關(guān)的一切痛點(diǎn)。
關(guān)于 Cilium 的總體將來(lái),我們能說(shuō)些什么?固然它目前是,但它已于去年年底。這需求一些時(shí)間才干完成,但這個(gè)項(xiàng)目正朝著一個(gè)十分明白的方向行進(jìn)。最近,在 2023 年 2 月,Cilium 經(jīng)過(guò)了兩次平安審計(jì),這是進(jìn)一步畢業(yè)的重要一步。
我們正在關(guān)注該項(xiàng)目的,并等候一些功用和相關(guān)工具的施行或變得足夠成熟。(沒(méi)錯(cuò), 將會(huì)很棒?。?/p>
例如,固然我們?cè)诟吡髁考褐羞\(yùn)用 Kubernetes ,但相關(guān)的 目前處于 beta 階段 —— 因而,我們正在等候其穩(wěn)定發(fā)布。我們正在等候穩(wěn)定的另一個(gè)測(cè)試版功用是 ,它將 Pod 流量本地重定向到節(jié)點(diǎn)內(nèi)的另一個(gè)后端 Pod,而不是整個(gè)集群內(nèi)的隨機(jī)后端 Pod。
后記
在消費(fèi)環(huán)境中肯定了我們新的網(wǎng)絡(luò)根底設(shè)備并評(píng)價(jià)了它的性能和新功用之后,我們很快樂(lè)決議采用 Cilium,由于它的益處是顯而易見(jiàn)的。關(guān)于多樣化且不時(shí)變化的云原生世界來(lái)說(shuō),這可能不是靈丹妙藥,而且絕不是最容易上手的技術(shù)。但是,假如你有動(dòng)力、學(xué)問(wèn)和一點(diǎn)冒險(xiǎn)愿望,那么它 100% 值得嘗試,而且很可能會(huì)得到多方面的報(bào)答。