91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

聊聊eBPF的超能力

Linux愛好者 ? 來源:云原生技術(shù)愛好者社區(qū) ? 作者:云原生技術(shù)愛好者 ? 2022-11-18 15:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


什么是 eBPF

在開始之前,讓我們先談?wù)勈裁词?eBPF。該首字母縮寫詞代表可擴(kuò)展伯克利包過濾器。我不認(rèn)為這很有幫助。您真正需要知道的是,eBPF 允許您在內(nèi)核中運(yùn)行自定義代碼。它使內(nèi)核可編程。讓我們稍作停頓,確保我們都在同一個(gè)頁面上了解內(nèi)核是什么。

內(nèi)核是操作系統(tǒng)的核心部分,分為用戶空間和內(nèi)核。我們通常編寫在用戶空間中運(yùn)行的應(yīng)用程序。每當(dāng)這些應(yīng)用程序想要以任何方式與硬件交互時(shí),無論是讀取還是寫入文件、發(fā)送或接收網(wǎng)絡(luò)數(shù)據(jù)包、訪問內(nèi)存,所有這些都需要只有內(nèi)核才能擁有的特權(quán)訪問權(quán)限。用戶空間應(yīng)用程序必須在想要做任何這些事情時(shí)向內(nèi)核發(fā)出請(qǐng)求。內(nèi)核還負(fù)責(zé)諸如調(diào)度這些不同的應(yīng)用程序之類的事情,以確保多個(gè)進(jìn)程可以同時(shí)運(yùn)行。

通常,我們只能編寫在用戶空間中運(yùn)行的應(yīng)用程序。eBPF 允許我們編寫在內(nèi)核中運(yùn)行的內(nèi)核。我們將 eBPF 程序加載到內(nèi)核中,并將其附加到一個(gè)事件中。每當(dāng)該事件發(fā)生時(shí),它將觸發(fā) eBPF 程序運(yùn)行。事件可以是各種不同的事物。這可能是網(wǎng)絡(luò)數(shù)據(jù)包的到來。它可能是在內(nèi)核或用戶空間中進(jìn)行的函數(shù)調(diào)用。它可能是一個(gè)跟蹤點(diǎn)。我們可以在很多不同的地方附加 eBPF 程序,這看起來是一個(gè)完美的事件。

一個(gè)eBPF示例

為了更具體一點(diǎn),我將在這里展示一個(gè)示例。這將是 eBPF 的 Hello World。這是我的 eBPF 程序。實(shí)際的 eBPF 程序就是這里的這幾行代碼。它們是用 C 編寫的,我的程序的其余部分是用 Python 編寫的。我的 Python 代碼實(shí)際上將我的 C 程序編譯成 BPF 格式。我所有的 eBPF 程序要做的就是在這里寫一些跟蹤,它會(huì)輸出 QCon。我將把它附加到執(zhí)行系統(tǒng)調(diào)用的事件中。

Execve 用于運(yùn)行新的可執(zhí)行文件。每當(dāng)一個(gè)新的可執(zhí)行文件運(yùn)行時(shí),execve 就是它運(yùn)行的原因。每次在我的虛擬機(jī)上啟動(dòng)一個(gè)新的可執(zhí)行文件時(shí),都會(huì)導(dǎo)致我的跟蹤被打印出來。

如果我運(yùn)行這個(gè)程序,首先,我們應(yīng)該看到我們不允許加載 BPF,除非我們有一個(gè)特權(quán)調(diào)用 CAP BPF,它通常只保留給 root。我們需要超級(jí)用戶權(quán)限才能運(yùn)行。讓我們用 sudo 試試。我們開始看到很多這些跟蹤事件被寫出。我正在使用云虛擬機(jī),使用 VS Code 遠(yuǎn)程訪問它。事實(shí)證明正在運(yùn)行相當(dāng)多的可執(zhí)行文件。

在不同的 shell 中,讓我們運(yùn)行一些東西,讓我們運(yùn)行 ps。我們可以看到進(jìn)程 ID 1063059。這是我運(yùn)行該 ps 可執(zhí)行文件觸發(fā)的跟蹤行。我們可以在跟蹤輸出中看到,我們不僅獲得了文本,還獲得了一些有關(guān)觸發(fā)該程序運(yùn)行的事件的上下文信息。我認(rèn)為這是 eBPF 提供給我們的重要部分。

d59fddee-66f4-11ed-8abf-dac502259ad0.png

eBPF代碼必須是安全的

當(dāng)我們將 eBPF 程序加載到內(nèi)核中時(shí),它的安全運(yùn)行至關(guān)重要。如果它崩潰,那將導(dǎo)致整臺(tái)機(jī)器癱瘓。為了確保它是安全的,有一個(gè)稱為驗(yàn)證的過程。當(dāng)我們將程序加載到內(nèi)核中時(shí),eBPF 驗(yàn)證器會(huì)檢查程序是否將運(yùn)行完成。它永遠(yuǎn)不會(huì)取消引用空指針。它將執(zhí)行的所有內(nèi)存訪問都是安全且正確的。

這確保了我們正在運(yùn)行的 eBPF 程序不會(huì)讓我們的機(jī)器宕機(jī),并且它們可以正確地訪問內(nèi)存。由于這個(gè)驗(yàn)證過程,有時(shí) eBPF 被描述為一個(gè)沙箱。例如,我確實(shí)想明確一點(diǎn),這是一種與容器化不同的沙盒。

動(dòng)態(tài)改變內(nèi)核行為

eBPF 允許我們?cè)趦?nèi)核中運(yùn)行自定義程序。這是我們改變內(nèi)核的行為方式。這是一個(gè)真正的游戲規(guī)則改變者。過去,如果要更改 Linux 內(nèi)核,需要很長時(shí)間。它需要內(nèi)核編程方面的專業(yè)知識(shí)。如果您對(duì)內(nèi)核進(jìn)行更改,通常需要幾年時(shí)間才能從內(nèi)核進(jìn)入我們?cè)谏a(chǎn)中使用的不同 Linux 發(fā)行版。內(nèi)核中的新功能到達(dá)您的生產(chǎn)部署通常需要五年時(shí)間。這就是為什么 eBPF 突然成為如此流行的技術(shù)的原因。

大約在去年左右,幾乎所有生產(chǎn)環(huán)境都在運(yùn)行 Linux 內(nèi)核,這些內(nèi)核足夠新,可以在其中包含 eBPF 功能。這意味著幾乎每個(gè)人現(xiàn)在都可以利用 eBPF 并且“ 這就是為什么你突然看到這么多工具在使用它。當(dāng)然,使用 eBPF,我們不必等待 Linux 內(nèi)核推出。如果我們可以在 eBPF 程序中創(chuàng)建新的內(nèi)核功能,我們可以將其加載到機(jī)器中。我們不必重新啟動(dòng)機(jī)器。我們可以動(dòng)態(tài)地改變機(jī)器的行為方式。我們甚至不必停止并重新啟動(dòng)正在運(yùn)行的應(yīng)用程序,這些更改會(huì)立即影響內(nèi)核。

動(dòng)態(tài)漏洞修補(bǔ)

我們可以將其用于多種不同的目的,其中之一是動(dòng)態(tài)修補(bǔ)漏洞。我們可以使用 eBPF 讓自己對(duì)漏洞利用更具彈性。我喜歡這種動(dòng)態(tài)漏洞修補(bǔ)的一個(gè)例子是對(duì)死亡數(shù)據(jù)包的彈性。死亡數(shù)據(jù)包是利用內(nèi)核漏洞的數(shù)據(jù)包。隨著時(shí)間的推移,其中一些內(nèi)核無法正確處理數(shù)據(jù)包。

例如,如果您將一個(gè)不正確的長度字段放入該網(wǎng)絡(luò)數(shù)據(jù)包中,則隧道可能無法正確處理它,并且可能會(huì)崩潰或發(fā)生壞事。這很容易通過 eBPF 緩解,因?yàn)槲覀兛梢詫?eBPF 程序附加到網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)的事件上。我們可以看一下包,看看它是否以利用此漏洞的方式形成,即有問題的數(shù)據(jù)包。難道是死亡之包?如果是,我們可以丟棄該數(shù)據(jù)包。

eBPF丟包

作為一個(gè)簡單的例子,我將展示另一個(gè)程序示例,該程序?qū)G棄特定形式的網(wǎng)絡(luò)數(shù)據(jù)包。在此示例中,我將查找 ping 數(shù)據(jù)包。這就是 ICMP 協(xié)議。我可以放下它們。這是我的程序。這里的細(xì)節(jié)不用太擔(dān)心,我基本上只是在看網(wǎng)絡(luò)數(shù)據(jù)包的結(jié)構(gòu)。我確定我找到了一個(gè) ping 數(shù)據(jù)包?,F(xiàn)在,我只允許他們繼續(xù)。XDP_PASS 意味著繼續(xù)做你對(duì)這個(gè)數(shù)據(jù)包所做的任何事情。這應(yīng)該發(fā)出你得到的任何追蹤。這實(shí)際上是一個(gè)名為 pingbox 的容器。

我將開始向該地址發(fā)送 ping,并且他們正在得到響應(yīng)。我們可以看到這里的序列號(hào)很好。眼下,我的 eBPF 程序沒有加載。我將運(yùn)行一個(gè) makefile 來編譯我的程序,清理之前連接到這個(gè)網(wǎng)絡(luò)接口的所有程序,然后加載我的程序。有make運(yùn)行編譯,然后在這里附加到網(wǎng)絡(luò)接口eth0。您立即看到它開始追蹤,得到 ICMP 數(shù)據(jù)包。這并沒有影響行為,我的序列號(hào)仍然像以前一樣滴答作響。

d61e15f6-66f4-11ed-8abf-dac502259ad0.png

讓我們把它改成,丟棄。我們應(yīng)該看到的是這里的跟蹤仍在生成中。它繼續(xù)接收那些 ping 數(shù)據(jù)包。這些數(shù)據(jù)包正在被丟棄,因此它們永遠(yuǎn)不會(huì)得到響應(yīng)。在這邊,序列號(hào)已經(jīng)停止上升,因?yàn)槲覀儧]有收到回復(fù)。讓我們把它改回PASS,然后再做一次。

我們應(yīng)該看到,有我的序列號(hào),有 40 個(gè)左右的數(shù)據(jù)包丟失了,但現(xiàn)在它又可以工作了。我首先想說明的是,如何連接到網(wǎng)絡(luò)接口并處理網(wǎng)絡(luò)數(shù)據(jù)包。此外,我們可以動(dòng)態(tài)地改變這種行為。我們不必停下來開始 ping。我們不必停下來開始任何事情。我們所做的只是改變內(nèi)核的行為。我正在說明這一點(diǎn),以說明如何處理死亡場(chǎng)景包。

抵御漏洞利用

d656d13e-66f4-11ed-8abf-dac502259ad0.png

使用 BPF Linux 安全模塊,我們可以對(duì)許多其他不同的漏洞利用具有彈性。您可能遇到過 Linux 安全模塊,例如 AppArmor 或 SELinux。內(nèi)核中有一個(gè) Linux 安全模塊 API,它為我們提供了許多不同的事件,例如 AppArmor 可以查看并確定該事件是否符合策略,并允許或禁止該特定行為繼續(xù)進(jìn)行。例如,允許或禁止文件訪問。

我們可以編寫附加到同一個(gè) LSM API 的 BPF 程序。這給了我們更多的靈活性,更多的動(dòng)態(tài)安全策略。例如,有一個(gè)名為 Tracee 的應(yīng)用程序,它是由我在 Aqua 的前同事編寫的,它將附加到 LSM 事件并決定它們是否符合策略。

故障恢復(fù)能力 - 負(fù)載均衡

d6778ab4-66f4-11ed-8abf-dac502259ad0.png

我們可也可以通過 eBPF 實(shí)現(xiàn)哪些其他類型的彈性?另一個(gè)例子是負(fù)載均衡。負(fù)載均衡可用于跨多個(gè)不同后端實(shí)例擴(kuò)展請(qǐng)求。我們經(jīng)常這樣做不僅是為了擴(kuò)展,而且是為了實(shí)現(xiàn)故障恢復(fù)和高可用性。我們可能有多個(gè)實(shí)例,因此如果其中一個(gè)實(shí)例以某種方式失敗,我們?nèi)匀挥凶銐虻钠渌麑?shí)例來繼續(xù)處理該流量。

在前面的示例中,我向您展示了一個(gè)連接到網(wǎng)絡(luò)接口的 eBPF 程序,或者更確切地說,它連接到稱為網(wǎng)絡(luò)接口的 eXpress 數(shù)據(jù)路徑的東西。在我看來,eXpress 數(shù)據(jù)路徑非常酷。您可能有 也可能沒有允許您實(shí)際運(yùn)行 XDP 程序的網(wǎng)卡,所以在網(wǎng)絡(luò)接口卡的硬件上運(yùn)行 eBPF 程序。XDP 盡可能接近網(wǎng)絡(luò)數(shù)據(jù)包的物理到達(dá)運(yùn)行。如果你的網(wǎng)卡支持,可以直接在網(wǎng)卡上運(yùn)行。在這種情況下,內(nèi)核的網(wǎng)絡(luò)堆棧甚至永遠(yuǎn)不會(huì)看到該數(shù)據(jù)包。它的處理速度非常快。

如果網(wǎng)卡不支持它,內(nèi)核可以再次運(yùn)行您的 eBPF 程序,在收到該網(wǎng)絡(luò)數(shù)據(jù)包后盡可能早地運(yùn)行。仍然超快,因?yàn)閿?shù)據(jù)包不需要遍歷網(wǎng)絡(luò)堆棧,肯定永遠(yuǎn)不會(huì)被復(fù)制到用戶空間內(nèi)存中。

我們可以使用 XDP 非常快速地處理我們的數(shù)據(jù)包。我們可以做出決定,比如我們是否應(yīng)該重定向那個(gè)數(shù)據(jù)包。我們可以非??斓卦趦?nèi)核中進(jìn)行第 3 層、第 4 層負(fù)載平衡,甚至可能在內(nèi)核中,也可能在網(wǎng)卡上決定我們是否應(yīng)該將此數(shù)據(jù)包向上傳遞到網(wǎng)絡(luò)堆棧并傳遞給用戶這臺(tái)機(jī)器上的空間。也許我們應(yīng)該將負(fù)載均衡到完全不同的物理機(jī)器上。我們可以重定向數(shù)據(jù)包。我們可以非??斓刈龅竭@一點(diǎn)。所以可以將其用于負(fù)載平衡。

Kube proxy代理

d6a7bc84-66f4-11ed-8abf-dac502259ad0.png

讓我們簡單地把我們的想法轉(zhuǎn)向 Kubernetes。在 Kubernetes 中,我們有一個(gè)稱為 kube-proxy 的負(fù)載均衡器。kube-proxy 允許負(fù)載均衡或告訴 pod 流量如何到達(dá)其他 pod。來自一個(gè) pod 的消息如何到達(dá)另一個(gè) pod?它充當(dāng)代理服務(wù)。如果本質(zhì)上不是負(fù)載均衡器,什么是代理?使用 eBPF,我們不僅可以選擇附加到盡可能靠近物理接口的 XDP 接口。我們也有機(jī)會(huì)附加到套接字接口上,以便盡可能靠近應(yīng)用程序。

應(yīng)用程序通過套接字接口與網(wǎng)絡(luò)通信。我們可以附加到來自 pod 的消息,并且可能繞過網(wǎng)絡(luò)堆棧,因?yàn)槲覀兿雽⑺l(fā)送到不同機(jī)器上的 pod,或者我們可以繞過網(wǎng)絡(luò)堆棧并直接循環(huán)回到在同一物理機(jī)或同一虛擬機(jī)上運(yùn)行的應(yīng)用程序。通過盡早攔截?cái)?shù)據(jù)包,我們可以做出這些決策。我們可以避免遍歷整個(gè)內(nèi)核的網(wǎng)絡(luò)堆棧,它給我們帶來了一些令人難以置信的性能改進(jìn)。與基于 iptables 的 Kube-proxy 相比,Kube-proxy 的替換性能可以顯著提高。

高效支持K8S的感知網(wǎng)絡(luò)

d6fbfaba-66f4-11ed-8abf-dac502259ad0.png

我現(xiàn)在想更深入地探討一下為什么 eBPF 可以啟用這種真正高效的網(wǎng)絡(luò),尤其是在 Kubernetes 中。通常,網(wǎng)絡(luò)堆棧非常復(fù)雜。通過內(nèi)核網(wǎng)絡(luò)堆棧的數(shù)據(jù)包會(huì)經(jīng)歷一大堆不同的步驟和階段,因?yàn)閮?nèi)核決定如何處理它。在 Kubernetes 中,我們不僅在主機(jī)上擁有網(wǎng)絡(luò)堆棧,而且我們通常為每個(gè) pod 運(yùn)行一個(gè)網(wǎng)絡(luò)命名空間。通過擁有自己的網(wǎng)絡(luò)命名空間,每個(gè) pod 都必須運(yùn)行自己的網(wǎng)絡(luò)堆棧。

想象一個(gè)到達(dá)物理 eth0 接口的數(shù)據(jù)包。它遍歷整個(gè)內(nèi)核的網(wǎng)絡(luò)堆棧,以到達(dá)它注定要去的 pod 的虛擬以太網(wǎng)連接。然后它穿過 POD 網(wǎng)絡(luò)堆棧通過套接字訪問應(yīng)用程序。如果我們使用 eBPF,特別是如果我們知道 Kubernetes 身份和地址,我們可以繞過主機(jī)上的那個(gè)堆棧。

當(dāng)我們?cè)谀莻€(gè) eth0 接口上接收到一個(gè)數(shù)據(jù)包時(shí),如果我們已經(jīng)知道該 IP 地址是否與特定的 pod 相關(guān)聯(lián),我們基本上可以進(jìn)行查找并將該數(shù)據(jù)包直接傳遞給 pod,然后通過 pod 的網(wǎng)絡(luò)堆棧,但不必經(jīng)歷主機(jī)網(wǎng)絡(luò)堆棧上發(fā)生的所有復(fù)雜性。

d728f92a-66f4-11ed-8abf-dac502259ad0.png

使用像 Cilium 這樣為 Kubernetes 啟用 eBPF 的網(wǎng)絡(luò)接口,我們可以啟用此網(wǎng)絡(luò)堆棧快捷方式,因?yàn)槲覀冎?Kubernetes 身份。我們知道哪些 IP 地址與哪些 pod 相關(guān)聯(lián),也知道哪些 pod 與哪些服務(wù)相關(guān)聯(lián),以及命名空間。有了這些知識(shí),我們就可以構(gòu)建這些服務(wù)地圖,顯示集群內(nèi)不同組件之間的流量是如何流動(dòng)的。eBPF 讓我們可以看到數(shù)據(jù)包。我們可以看到,不僅僅是目標(biāo) IP 地址和端口,我們還可以通過代理路由來找出它是什么 HTTP 請(qǐng)求類型。我們可以將該數(shù)據(jù)流與 Kubernetes 身份相關(guān)聯(lián)。

在 Kubernetes 網(wǎng)絡(luò)中,IP 地址一直在變化,Pod 來來去去。IP 地址一分鐘可能意味著一件事,兩分鐘后,它意味著完全不同的事情。IP 地址對(duì)于理解 Kubernetes 集群中的流量并沒有太大幫助。Cilium 可以將這些 IP 地址映射到正確的 pod、任何給定時(shí)間點(diǎn)的正確服務(wù),并為您提供更多可讀信息。它明顯更快。無論您是使用 Cilium 還是其他 eBPF 網(wǎng)絡(luò)實(shí)現(xiàn),在主機(jī)上獲取網(wǎng)絡(luò)堆棧的能力都為我們帶來了可衡量的性能改進(jìn)。

我們可以在這里看到,左邊的藍(lán)線是每秒請(qǐng)求數(shù)的請(qǐng)求-響應(yīng)率,我們可以在沒有任何容器的情況下實(shí)現(xiàn),只是直接在節(jié)點(diǎn)之間發(fā)送和接收流量。我們可以獲得幾乎與使用 eBPF 一樣快的性能。中間的黃色和綠色下方的條向我們展示了如果我們不使用 eBPF 會(huì)發(fā)生什么,并且我們使用通過主機(jī)網(wǎng)絡(luò)堆棧的傳統(tǒng)主機(jī)路由方法,它明顯變慢了。

eBPF網(wǎng)絡(luò)決策

我們還可以利用 Kubernetes 身份和丟棄數(shù)據(jù)包的能力來構(gòu)建非常有效的網(wǎng)絡(luò)策略實(shí)施。你看到丟包是多么容易。與其只是檢查數(shù)據(jù)包并確定它是 ping 數(shù)據(jù)包,不如將數(shù)據(jù)包與策略規(guī)則進(jìn)行比較并決定是否應(yīng)該轉(zhuǎn)發(fā)它們。這是我們擁有的非常好的工具。

你可以在 networkpolicy.io 上找到它來可視化 Kubernetes 網(wǎng)絡(luò)策略。我們討論了負(fù)載均衡,以及如何在 Kubernetes 集群中以 kube-proxy 的形式使用負(fù)載均衡。畢竟,Kubernetes 為我們提供了巨大的彈性。如果pod中的應(yīng)用程序崩潰,它可以在沒有任何操作員干預(yù)的情況下動(dòng)態(tài)重新創(chuàng)建。我們可以自動(dòng)擴(kuò)展而無需操作員干預(yù)。

故障恢復(fù)能力 ClusterMesh

如果您的集群在特定數(shù)據(jù)中心運(yùn)行并且您失去與該數(shù)據(jù)中心的連接,那么集群作為一個(gè)整體的彈性會(huì)怎樣?通常,我們可以使用多個(gè)集群。我想展示 eBPF 如何使多個(gè)集群之間的連接變得非常簡單。在 Cilium 中,我們使用一個(gè)稱為 ClusterMesh 的功能來做到這一點(diǎn)。使用 ClusterMesh,我們有兩個(gè) Kubernetes 集群。

每個(gè)集群中運(yùn)行的 Cilium 代理會(huì)讀取一定量的關(guān)于該 ClusterMesh 中其他集群狀態(tài)的信息。每個(gè)集群都有自己的配置和狀態(tài)數(shù)據(jù)庫存儲(chǔ)在 etcd 中。我們運(yùn)行一些 etcd 代理組件,使我們能夠找出我們需要的多集群特定信息,以便所有集群上的 Cilium 代理可以共享該多集群狀態(tài)。

多集群狀態(tài)是什么意思?通常,這將是關(guān)于創(chuàng)建高度可用的服務(wù)。我們可能會(huì)在多個(gè)集群上運(yùn)行一個(gè)服務(wù)的多個(gè)實(shí)例,以使它們具有高可用性。使用 ClusterMesh,我們只需將服務(wù)標(biāo)記為全局,并將它們連接在一起,以便訪問該全局服務(wù)的 pod 可以在其自己的集群上訪問它,或者在需要時(shí)在不同的集群上訪問它。

我認(rèn)為這是 Cilium 的一個(gè)非常好的功能,并且非常容易設(shè)置。如果一個(gè)集群上的后端 pod 因某種原因被破壞,或者整個(gè)集群出現(xiàn)故障,我們?nèi)匀豢梢詫碜栽摷荷掀渌?pod 的請(qǐng)求路由到另一個(gè)集群上的后端 pod。它們可以被視為一項(xiàng)分布式集群服務(wù)。

我想我有一個(gè)例子。我有兩個(gè)集群。我的第一個(gè)集群啟動(dòng)了,我們可以看到 cm-1(代表 ClusterMesh 1)和第二個(gè)集群 cm-2。他們都在運(yùn)行一些 pod。我們經(jīng)常在 Cilium 做一些星球大戰(zhàn)主題的演示。在這種情況下,我們有一些希望能夠與 Rebel 基地通信的X-wings戰(zhàn)斗機(jī)。我們?cè)诘诙€(gè)集群上也有一些類似的 X-wings 和 Rebel 基地。

讓我們看一下服務(wù)。實(shí)際上,我們來描述一下 Rebel base,service rebel-base。你可以看到它被 Cilium 注釋為一項(xiàng)全球服務(wù)。作為配置的一部分,我已對(duì)其進(jìn)行了注釋,說我希望這是一項(xiàng)全球服務(wù)。如果我查看那里的第二個(gè)集群,情況也是如此。它們都被描述為全球性的。這意味著,我可以從任一集群上的 X-wing 發(fā)出請(qǐng)求,它會(huì)收到來自這兩個(gè)不同集群、這兩個(gè)不同集群后端的負(fù)載平衡的響應(yīng)。

讓我們?cè)囋嚳?。讓我們循環(huán)運(yùn)行它。讓我們執(zhí)行 X-wings。不過哪個(gè) X-wings并不重要。我們想向 Rebel 基地發(fā)送消息。希望我們應(yīng)該看到的是,我們有時(shí)會(huì)從集群 1 中隨機(jī)獲得響應(yīng),有時(shí)是集群 2。

如果其中一個(gè)集群上的 Rebel 基地 pod 發(fā)生了不好的事情怎么辦?讓我們看看代碼上有哪些節(jié)點(diǎn)。讓我們刪除集群 2 上的 Pod。實(shí)際上,我將刪除 Rebel 基于第二個(gè)集群的整個(gè)部署。我們應(yīng)該看到的是,所有請(qǐng)求現(xiàn)在都由集群 1 處理。確實(shí),您可以看到,集群 1 已經(jīng)有一段時(shí)間了。我們實(shí)際上只需將我們的服務(wù)標(biāo)記為全球性的彈性,它是實(shí)現(xiàn)多集群高可用性的一種非常強(qiáng)大的方式。

故障的可見性

以免我給你留下 eBPF 只是關(guān)于網(wǎng)絡(luò)的印象,以及網(wǎng)絡(luò)的優(yōu)勢(shì),讓我也談?wù)勎覀內(nèi)绾问褂?eBPF 來實(shí)現(xiàn)可觀察性。畢竟,如果確實(shí)出現(xiàn)問題,這非常重要。我們需要可觀察性,以便我們了解發(fā)生了什么。在 Kubernetes 集群中,我們有許多主機(jī),而每臺(tái)主機(jī)只有一個(gè)內(nèi)核。

無論我們運(yùn)行多少用戶空間應(yīng)用程序,無論我們運(yùn)行多少容器,它們都在每臺(tái)主機(jī)共享一個(gè)內(nèi)核。如果它們?cè)赑OD中,無論P(yáng)OD有多少,仍然只有一個(gè)內(nèi)核。每當(dāng) pod 中的應(yīng)用程序想要做任何有趣的事情時(shí),比如讀取或?qū)懭胛募?,或者發(fā)送或接收網(wǎng)絡(luò)流量,每當(dāng) Kubernetes 想要?jiǎng)?chuàng)建一個(gè)容器時(shí)。任何復(fù)雜的事情都涉及內(nèi)核。

內(nèi)核對(duì)整個(gè)主機(jī)上發(fā)生的所有有趣的事情都有可見性。這意味著如果我們使用 eBPF 程序來檢測(cè)內(nèi)核,我們可以了解整個(gè)主機(jī)上發(fā)生的一切。因?yàn)槲覀儙缀蹩梢詸z測(cè)內(nèi)核中發(fā)生的任何事情,我們可以將它用于各種不同的指標(biāo)和可觀察性工具、不同類型的跟蹤,它們都可以使用 eBPF 構(gòu)建。

例如,這是一個(gè)名為 Pixie 的工具,它是一個(gè) CNCF 沙盒項(xiàng)目。它為我們提供了這個(gè)火焰圖,關(guān)于整個(gè)集群中運(yùn)行的信息。它聚合來自集群中每個(gè)節(jié)點(diǎn)上運(yùn)行的 eBPF 程序的信息,以生成整個(gè)集群如何使用 CPU 時(shí)間的概覽,并詳細(xì)介紹這些應(yīng)用程序正在調(diào)用的特定函數(shù)。

真正有趣的是,您無需對(duì)應(yīng)用程序進(jìn)行任何更改,甚至無需更改配置即可獲得此工具。因?yàn)檎缥覀兯吹降?,?dāng)您對(duì)內(nèi)核進(jìn)行更改時(shí),它會(huì)立即影響在該內(nèi)核上運(yùn)行的任何內(nèi)容。我們不必重新啟動(dòng)這些進(jìn)程或任何東西。

這對(duì)于我們所說的邊車模型也有一個(gè)有趣的含義。在很多方面,與 sidecar 模型相比,eBPF 為我們提供了更多的簡單性。在 sidecar 模型中,我們必須將一個(gè)容器注入到我們想要檢測(cè)的每個(gè) pod 中。它必須在 pod 內(nèi),因?yàn)檫@是一個(gè)用戶空間應(yīng)用程序可以了解該 pod 中發(fā)生的其他事情的方式。它必須與該 pod 共享命名空間。我們必須將那個(gè)邊車注入到每個(gè) pod 中。

為此,需要在該 pod 的定義中引入一些 YAML。您可能不會(huì)手動(dòng)編寫該 YAML 來注入 sidecar。它可能是在準(zhǔn)入控制中完成的,或者作為 CI/CD 過程的一部分,可能會(huì)自動(dòng)執(zhí)行注入該 sidecar 的過程。然而它必須注入。

另一方面,如果我們使用 eBPF,我們?cè)趦?nèi)核中運(yùn)行我們的工具,那么我們不需要更改 pod 定義。我們會(huì)自動(dòng)從內(nèi)核的角度獲得這種可見性,因?yàn)閮?nèi)核可以看到該主機(jī)上發(fā)生的一切。只要我們將 eBPF 程序添加到每個(gè)主機(jī)上,我們就會(huì)獲得全面的可見性。這也意味著我們可以抵御攻擊。

如果我們的主機(jī)以某種方式受到威脅,如果有人設(shè)法逃離容器并進(jìn)入主機(jī),或者即使他們以某種方式運(yùn)行單獨(dú)的 pod,您的攻擊者可能不會(huì)費(fèi)心使用您的可觀察性工具來檢測(cè)他們的進(jìn)程和他們的 pod。如果您的可觀察性工具在內(nèi)核中運(yùn)行,那么無論如何都會(huì)看到它們。你無法躲避那些' s 在內(nèi)核中運(yùn)行。這種在沒有 sidecar 的情況下運(yùn)行檢測(cè)的能力正在創(chuàng)建一些非常強(qiáng)大的可觀察性工具。

彈性、安全、可觀察性、無sidercar部署

d752b54e-66f4-11ed-8abf-dac502259ad0.png

它還讓我們想到了無邊服務(wù)網(wǎng)格的想法。服務(wù)網(wǎng)格具有彈性、可觀察性和安全性?,F(xiàn)在有了 eBPF,我們可以在不使用 sidecar 的情況下實(shí)現(xiàn)服務(wù)網(wǎng)格。我在圖表之前展示了我們?nèi)绾问褂?eBPF 繞過主機(jī)上的網(wǎng)絡(luò)堆棧。對(duì)于服務(wù)網(wǎng)格,我們可以更進(jìn)一步。 在傳統(tǒng)的 sidecar 模型中,我們?cè)谙M蔀榉?wù)網(wǎng)格一部分的每個(gè) pod 中運(yùn)行一個(gè)代理,也許是 Envoy。該代理的每個(gè)實(shí)例都有路由信息,每個(gè)數(shù)據(jù)包都必須通過該代理。您可以在此圖的左側(cè)看到,網(wǎng)絡(luò)數(shù)據(jù)包的路徑非常曲折。它基本上經(jīng)歷了五個(gè)網(wǎng)絡(luò)堆棧實(shí)例。我們可以用 eBPF 大大縮短它。我們不能總是避免代理。 如果我們?cè)诘?7 層做某事,我們需要那個(gè)代理,但我們可以避免在每個(gè) pod 中都有一個(gè)代理實(shí)例。我們可以通過少得多的路由信息和配置信息副本來提高可擴(kuò)展性。我們可以通過網(wǎng)絡(luò)堆棧內(nèi) XDP 層或套接字層的 eBPF 連接繞過許多這些網(wǎng)絡(luò)步驟。 eBPF 將為我們提供資源消耗更少、效率更高的服務(wù)網(wǎng)格。我希望這能體現(xiàn)出我認(rèn)為 eBPF 圍繞網(wǎng)絡(luò)、可觀察性和安全性實(shí)現(xiàn)的一些東西,這將為我們提供更具彈性和可擴(kuò)展性的部署。我們可以通過少得多的路由信息和配置信息副本來提高可擴(kuò)展性。我們可以通過網(wǎng)絡(luò)堆棧內(nèi) XDP 層或套接字層的 eBPF 連接繞過許多這些網(wǎng)絡(luò)步驟。eBPF 將為我們提供資源消耗更少、效率更高的服務(wù)網(wǎng)格。 我希望這能體現(xiàn)出我認(rèn)為 eBPF 圍繞網(wǎng)絡(luò)、可觀察性和安全性實(shí)現(xiàn)的一些東西,這將為我們提供更具彈性和可擴(kuò)展性的部署。我們可以通過少得多的路由信息和配置信息副本來提高可擴(kuò)展性。我們可以通過網(wǎng)絡(luò)堆棧內(nèi) XDP 層或套接字層的 eBPF 連接繞過許多這些網(wǎng)絡(luò)步驟。eBPF 將為我們提供資源消耗更少、效率更高的服務(wù)網(wǎng)格。我希望這能體現(xiàn)出我認(rèn)為 eBPF 圍繞網(wǎng)絡(luò)、可觀察性和安全性實(shí)現(xiàn)的一些東西,這將為我們提供更具彈性和可擴(kuò)展性的部署。

總結(jié)

到目前為止,我?guī)缀跻恢痹谡務(wù)?Linux。它也將出現(xiàn)在 Windows 中。微軟一直致力于 Windows 上的 eBPF。他們與 Isovalent 和許多其他對(duì)大規(guī)模可擴(kuò)展網(wǎng)絡(luò)感興趣的公司一起參與其中。我們共同組建了 eBPF 基金會(huì),它是 Linux 基金會(huì)下的一個(gè)基金會(huì),真正負(fù)責(zé)跨不同操作系統(tǒng)的 eBPF 技術(shù)。

我希望這能說明為什么 eBPF 如此重要,它對(duì)于軟件的彈性部署如此具有革命性,尤其是在云原生空間中,但不一定限于此。無論您運(yùn)行的是 Linux 還是 Windows,都有 eBPF 工具可幫助您優(yōu)化這些部署并使其更具彈性。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11763

    瀏覽量

    219079
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73999
  • 網(wǎng)格
    +關(guān)注

    關(guān)注

    0

    文章

    151

    瀏覽量

    16622

原文標(biāo)題:說說 eBPF 的超能力

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    電流傳感器到底是啥?3分鐘看懂它的“超能力

    給手機(jī)充電時(shí),你是否好奇充電器如何精準(zhǔn)控制電流避免電池受損?新能源汽車快充時(shí),又是什么在保障充電效率與安全?答案藏在一個(gè)“隱形衛(wèi)士”身上——電流傳感器。這個(gè)聽起來專業(yè)的器件,其實(shí)早已滲透我們生活的方方面面,今天就用3分鐘揭開它的神秘面紗。一、本質(zhì)揭秘:電流傳感器與電流表的核心區(qū)別很多人會(huì)將電流傳感器與電流表混淆,二者核心功能存在顯著差異。電流表僅能直觀顯示電
    的頭像 發(fā)表于 12-04 09:14 ?938次閱讀
    電流傳感器到底是啥?3分鐘看懂它的“<b class='flag-5'>超能力</b>”

    華為云Flexus AI智能體,讓每家企業(yè)都擁有開箱即用的AI超能力

    2024年,不談AI的企業(yè)已被時(shí)代拋下。但真正試過的人都知道:大模型很強(qiáng),落地很難。招不到AI工程師、搞不懂復(fù)雜參數(shù)、擔(dān)心數(shù)據(jù)泄露、算力成本燒不起……這些痛點(diǎn)讓90%的企業(yè)在智能化門口徘徊。Flexus AI智能體的出現(xiàn),正是要撕掉"高門檻"的標(biāo)簽——無需開發(fā)經(jīng)驗(yàn),無需巨額投入,20+款經(jīng)過華為云驗(yàn)證的行業(yè)Agent,一鍵部署即可讓AI真正跑在業(yè)務(wù)現(xiàn)場(chǎng)。
    的頭像 發(fā)表于 11-17 17:07 ?910次閱讀
    華為云Flexus AI智能體,讓每家企業(yè)都擁有開箱即用的AI<b class='flag-5'>超能力</b>

    光纖的“超能力”:為何它能成為通信之王?

    與銅纜相比,光纖在帶寬、距離和抗干擾性上具有碾壓性優(yōu)勢(shì),其核心特性可歸納為“三高一低”。 1. 超高帶寬:信息容量的“無底洞” 光纖的理論帶寬可達(dá)100THz(1THz=1000GHz),是銅纜的1000倍以上。實(shí)際商用系統(tǒng)中,單模光纖已實(shí)現(xiàn)800Gbps傳輸速率(通過波分復(fù)用技術(shù)疊加80個(gè)100Gbps信道),而銅纜(如八類線)僅支持40Gbps短距離傳輸。 2. 超長距離:跨洲傳輸?shù)摹澳土ν酢?單模光纖的中繼距離可達(dá)100公里以上(通過摻鉺光纖放大器),而銅纜每百米就需信號(hào)放大。
    的頭像 發(fā)表于 10-30 11:01 ?818次閱讀
    光纖的“<b class='flag-5'>超能力</b>”:為何它能成為通信之王?

    聊聊FPGA中的TDC原理

    今天我們不談高大上的物理學(xué),只聊聊如何在 FPGA 中,用一串加法器和 D 觸發(fā)器,“數(shù)清楚時(shí)間”——這就是時(shí)間數(shù)字轉(zhuǎn)換器(TDC)的魅力。
    的頭像 發(fā)表于 09-02 15:15 ?2147次閱讀
    <b class='flag-5'>聊聊</b>FPGA中的TDC原理

    Microsoft Edge瀏覽器iOS端插件功能上線

    在最新發(fā)布的 139 版本中,Microsoft Edge 瀏覽器 iOS 端正式支持插件功能!與此同時(shí),Microsoft Edge 安卓端的插件數(shù)量已躍升至近 30 款。廣告攔截、雙語翻譯、資源下載……你的手機(jī)瀏覽器,也能擁有自定義的「超能力」。
    的頭像 發(fā)表于 08-19 14:29 ?1766次閱讀

    揭秘短波紅外相機(jī)的 “超能力

    短波紅外相機(jī)憑借高靈敏度、夜視能力、穿透性強(qiáng)等特點(diǎn),在科研、工業(yè)、安防等領(lǐng)域具有廣泛應(yīng)用。
    的頭像 發(fā)表于 08-05 09:25 ?1147次閱讀
    揭秘短波紅外相機(jī)的 “<b class='flag-5'>超能力</b>”

    毫秒洞察,分毫不差:直線電機(jī)如何賦予3C AOI/SPI設(shè)備“超能力

    直線電機(jī)#直線電機(jī)平臺(tái)
    的頭像 發(fā)表于 08-04 16:51 ?672次閱讀
    毫秒洞察,分毫不差:直線電機(jī)如何賦予3C AOI/SPI設(shè)備“<b class='flag-5'>超能力</b>”

    基于eBPF的Kubernetes網(wǎng)絡(luò)異常檢測(cè)系統(tǒng)

    作為一名在云原生領(lǐng)域深耕多年的運(yùn)維工程師,我見過太多因?yàn)榫W(wǎng)絡(luò)問題導(dǎo)致的生產(chǎn)事故。傳統(tǒng)的監(jiān)控手段往往是事后諸葛亮,當(dāng)你發(fā)現(xiàn)問題時(shí),用戶已經(jīng)在抱怨了。今天,我將分享如何利用 eBPF 這一革命性技術(shù),構(gòu)建一套能夠?qū)崟r(shí)檢測(cè) Kubernetes 網(wǎng)絡(luò)異常的系統(tǒng)。
    的頭像 發(fā)表于 07-24 14:09 ?742次閱讀

    顛覆玻纖制造!PROFIBUS DP轉(zhuǎn)ETHERNET/IP如何激活機(jī)器人“超能力

    互通,為玻纖生產(chǎn)注入智能化動(dòng)能,推動(dòng)制造效率與產(chǎn)品質(zhì)量雙提升。 西門子PLC憑借強(qiáng)大的邏輯控制能力與穩(wěn)定的抗干擾性能,在玻纖生產(chǎn)線中擔(dān)任核心調(diào)度角色。作為主站,PLC通過PROFIBUS DP協(xié)議連接各類從站設(shè)備,精準(zhǔn)執(zhí)行配料、拉絲、卷繞等工藝指令。而機(jī)器人承擔(dān)
    的頭像 發(fā)表于 06-24 16:40 ?455次閱讀

    汽車智造“破界”!PROFIBUS DP轉(zhuǎn)ETHERNET/IP激活機(jī)器人手臂超能力

    在工業(yè)自動(dòng)化4.0浪潮中,汽車制造車間對(duì)設(shè)備協(xié)同與柔性生產(chǎn)的需求愈發(fā)迫切。PROFIBUS DP與ETHERNET/IP協(xié)議的融合,成為打破西門子PLC與機(jī)器人手臂通信壁壘的關(guān)鍵技術(shù),為汽車生產(chǎn)線的智能化轉(zhuǎn)型注入強(qiáng)勁動(dòng)力。 西門子PLC以其穩(wěn)定可靠的控制性能,長期作為汽車制造車間的核心控制中樞。通過PROFIBUS DP協(xié)議,PLC作為主站可精準(zhǔn)調(diào)度從站設(shè)備,確保生產(chǎn)流程的有序執(zhí)行。而機(jī)器人手臂作為汽車焊接、裝配等關(guān)鍵工序的主力設(shè)備,采用ETHERNET/IP協(xié)議更能發(fā)揮其
    的頭像 發(fā)表于 06-24 16:35 ?454次閱讀

    Modbus轉(zhuǎn)Profinet賦予數(shù)據(jù)采集儀高效通信的超能力

    /RTU主站或從站協(xié)議,且具備大數(shù)據(jù)量通訊能力,最大1440字節(jié)輸入數(shù)據(jù) + 1440字節(jié)輸出數(shù)據(jù) 連接設(shè)備準(zhǔn)備 設(shè)備清單 1. Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)**:選擇合適型號(hào)的網(wǎng)關(guān),如上述提到
    發(fā)表于 05-20 16:46

    搭載天璣9400+旗艦AI芯片的真我GT7性能超能

    ? ? ? 游戲神機(jī)真我GT7 登場(chǎng): 真我 GT7?搭載天璣 9400+ 旗艦芯, 性能超能打 適配多款主流游戲的原生 144 幀模式,游戲超能打 100W 光速秒充 + 7200mAh 泰坦電池
    的頭像 發(fā)表于 05-12 18:28 ?1484次閱讀

    免費(fèi)解鎖MCU超能力!4月AIoT實(shí)戰(zhàn)培訓(xùn)三城巡演

    RT-Thread聯(lián)合恩智浦半導(dǎo)體(NXP),以及鼎好DH3,共同推動(dòng)AI浪潮下的工業(yè)與物聯(lián)網(wǎng)創(chuàng)新應(yīng)用。本次培訓(xùn)聚焦“MCXA系列MCU”與“邊緣AI開發(fā)工具鏈”,通過“實(shí)戰(zhàn)實(shí)驗(yàn)+案例解析”,幫助開發(fā)者快速掌握嵌入式AI開發(fā)核心技能。培訓(xùn)日程培訓(xùn)時(shí)間:下午13:00開始簽到13:30正式開始17:30結(jié)束站點(diǎn)日期地址北京站2025年4月12日中關(guān)村?鼎好DH
    的頭像 發(fā)表于 04-03 12:41 ?524次閱讀
    免費(fèi)解鎖MCU<b class='flag-5'>超能力</b>!4月AIoT實(shí)戰(zhàn)培訓(xùn)三城巡演

    如何為樹莓派添加人工智能超能力!

    的RaspberryPiAI套件,但供應(yīng)情況并不穩(wěn)定。在撰寫本文時(shí),我在亞馬遜和芝加哥電子供應(yīng)商網(wǎng)站上找到了庫存。該套件是為RaspberryPi5添加AI計(jì)算能力的簡便方
    的頭像 發(fā)表于 03-25 09:47 ?934次閱讀
    如何為樹莓派添加人工智能<b class='flag-5'>超能力</b>!

    服務(wù)管理中的AI應(yīng)用:Jira Service Management賦能IT運(yùn)維、員工支持及HR服務(wù)管理

    Jira Service Management全新AI功能來了!十大超能力,賦能你的IT運(yùn)維、員工支持和HR服務(wù)管理:自動(dòng)關(guān)聯(lián)歷史事件,撰寫分析報(bào)告,隨時(shí)隨地答疑......體驗(yàn)升級(jí),效率更升級(jí)!
    的頭像 發(fā)表于 03-13 10:42 ?1049次閱讀
    服務(wù)管理中的AI應(yīng)用:Jira Service Management賦能IT運(yùn)維、員工支持及HR服務(wù)管理