在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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愛(ài)好者 ? 來(lái)源:云原生技術(shù)愛(ài)好者社區(qū) ? 作者:云原生技術(shù)愛(ài)好者 ? 2022-11-18 15:34 ? 次閱讀


什么是 eBPF

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

內(nèi)核是操作系統(tǒng)的核心部分,分為用戶空間和內(nèi)核。我們通常編寫在用戶空間中運(yùn)行的應(yīng)用程序。每當(dāng)這些應(yīng)用程序想要以任何方式與硬件交互時(shí),無(wú)論是讀取還是寫入文件、發(fā)送或接收網(wǎng)絡(luò)數(shù)據(jù)包、訪問(wèn)內(nèi)存,所有這些都需要只有內(nèi)核才能擁有的特權(quán)訪問(wè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ù)包的到來(lái)。它可能是在內(nèi)核或用戶空間中進(jìn)行的函數(shù)調(diào)用。它可能是一個(gè)跟蹤點(diǎn)。我們可以在很多不同的地方附加 eBPF 程序,這看起來(lái)是一個(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)致我的跟蹤被打印出來(lái)。

如果我運(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)程訪問(wè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)證的過(guò)程。當(dāng)我們將程序加載到內(nèi)核中時(shí),eBPF 驗(yàn)證器會(huì)檢查程序是否將運(yùn)行完成。它永遠(yuǎn)不會(huì)取消引用空指針。它將執(zhí)行的所有內(nèi)存訪問(wèn)都是安全且正確的。

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

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

eBPF 允許我們?cè)趦?nèi)核中運(yùn)行自定義程序。這是我們改變內(nèi)核的行為方式。這是一個(gè)真正的游戲規(guī)則改變者。過(guò)去,如果要更改 Linux 內(nèi)核,需要很長(zhǎng)時(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)核無(wú)法正確處理數(shù)據(jù)包。

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

eBPF丟包

作為一個(gè)簡(jiǎn)單的例子,我將展示另一個(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ù)包。現(xiàn)在,我只允許他們繼續(xù)。XDP_PASS 意味著繼續(xù)做你對(duì)這個(gè)數(shù)據(jù)包所做的任何事情。這應(yīng)該發(fā)出你得到的任何追蹤。這實(shí)際上是一個(gè)名為 pingbox 的容器。

我將開始向該地址發(fā)送 ping,并且他們正在得到響應(yīng)。我們可以看到這里的序列號(hào)很好。眼下,我的 eBPF 程序沒(méi)有加載。我將運(yùn)行一個(gè) makefile 來(lái)編譯我的程序,清理之前連接到這個(gè)網(wǎng)絡(luò)接口的所有程序,然后加載我的程序。有make運(yùn)行編譯,然后在這里附加到網(wǎng)絡(luò)接口eth0。您立即看到它開始追蹤,得到 ICMP 數(shù)據(jù)包。這并沒(méi)有影響行為,我的序列號(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)槲覀儧](méi)有收到回復(fù)。讓我們把它改回PASS,然后再做一次。

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

抵御漏洞利用

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

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

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

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

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

我們可也可以通過(guò) 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í)例來(lái)繼續(xù)處理該流量。

在前面的示例中,我向您展示了一個(gè)連接到網(wǎng)絡(luò)接口的 eBPF 程序,或者更確切地說(shuō),它連接到稱為網(wǎng)絡(luò)接口的 eXpress 數(shù)據(jù)路徑的東西。在我看來(lái),eXpress 數(shù)據(jù)路徑非常酷。您可能有 也可能沒(méi)有允許您實(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

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

應(yīng)用程序通過(guò)套接字接口與網(wǎng)絡(luò)通信。我們可以附加到來(lái)自 pod 的消息,并且可能繞過(guò)網(wǎng)絡(luò)堆棧,因?yàn)槲覀兿雽⑺l(fā)送到不同機(jī)器上的 pod,或者我們可以繞過(guò)網(wǎng)絡(luò)堆棧并直接循環(huán)回到在同一物理機(jī)或同一虛擬機(jī)上運(yùn)行的應(yīng)用程序。通過(guò)盡早攔截?cái)?shù)據(jù)包,我們可以做出這些決策。我們可以避免遍歷整個(gè)內(nèi)核的網(wǎng)絡(luò)堆棧,它給我們帶來(lái)了一些令人難以置信的性能改進(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ù)雜。通過(guò)內(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ò)命名空間。通過(guò)擁有自己的網(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)連接。然后它穿過(guò) POD 網(wǎng)絡(luò)堆棧通過(guò)套接字訪問(wèn)應(yīng)用程序。如果我們使用 eBPF,特別是如果我們知道 Kubernetes 身份和地址,我們可以繞過(guò)主機(jī)上的那個(gè)堆棧。

當(dāng)我們?cè)谀莻€(gè) eth0 接口上接收到一個(gè)數(shù)據(jù)包時(shí),如果我們已經(jīng)知道該 IP 地址是否與特定的 pod 相關(guān)聯(lián),我們基本上可以進(jìn)行查找并將該數(shù)據(jù)包直接傳遞給 pod,然后通過(guò) 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 地址和端口,我們還可以通過(guò)代理路由來(lái)找出它是什么 HTTP 請(qǐng)求類型。我們可以將該數(shù)據(jù)流與 Kubernetes 身份相關(guān)聯(lián)。

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

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

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

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

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

故障恢復(fù)能力 ClusterMesh

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

每個(gè)集群中運(yùn)行的 Cilium 代理會(huì)讀取一定量的關(guān)于該 ClusterMesh 中其他集群狀態(tài)的信息。每個(gè)集群都有自己的配置和狀態(tài)數(shù)據(jù)庫(kù)存儲(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èn)該全局服務(wù)的 pod 可以在其自己的集群上訪問(wèn)它,或者在需要時(shí)在不同的集群上訪問(wèn)它。

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

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

讓我們?cè)囋嚳础W屛覀冄h(huán)運(yùn)行它。讓我們執(zhí)行 X-wings。不過(guò)哪個(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)大的方式。

故障的可見(jiàn)性

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

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

內(nèi)核對(duì)整個(gè)主機(jī)上發(fā)生的所有有趣的事情都有可見(jiàn)性。這意味著如果我們使用 eBPF 程序來(lái)檢測(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)行的信息。它聚合來(lái)自集群中每個(gè)節(jié)點(diǎn)上運(yùn)行的 eBPF 程序的信息,以生成整個(gè)集群如何使用 CPU 時(shí)間的概覽,并詳細(xì)介紹這些應(yīng)用程序正在調(diào)用的特定函數(shù)。

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

這對(duì)于我們所說(shuō)的邊車模型也有一個(gè)有趣的含義。在很多方面,與 sidecar 模型相比,eBPF 為我們提供了更多的簡(jiǎn)單性。在 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 來(lái)注入 sidecar。它可能是在準(zhǔn)入控制中完成的,或者作為 CI/CD 過(guò)程的一部分,可能會(huì)自動(dòng)執(zhí)行注入該 sidecar 的過(guò)程。然而它必須注入。

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

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

彈性、安全、可觀察性、無(wú)sidercar部署

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

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

我希望這能說(shuō)明為什么 eBPF 如此重要,它對(duì)于軟件的彈性部署如此具有革命性,尤其是在云原生空間中,但不一定限于此。無(wú)論您運(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ī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11466

    瀏覽量

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

    關(guān)注

    30

    文章

    4891

    瀏覽量

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

    關(guān)注

    0

    文章

    140

    瀏覽量

    16281

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

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

收藏 人收藏

    評(píng)論

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

    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 ?254次閱讀

    仿生傳感器:讓機(jī)器擁有“生命感知”的神奇科技

    在科幻電影中,機(jī)器人通過(guò)皮膚感知溫度、用“鼻子”識(shí)別氣味、用“耳朵”捕捉聲音的場(chǎng)景曾令人驚嘆。如今,這些“超能力”正通過(guò)仿生傳感器逐漸走進(jìn)現(xiàn)實(shí)。仿生傳感器,這一融合生物學(xué)與工程學(xué)的創(chuàng)新技術(shù),正在重塑
    的頭像 發(fā)表于 04-28 17:25 ?267次閱讀

    鏡子起霧?燈光太刺眼?三鍵觸控芯片,讓你的鏡子“活”過(guò)來(lái)!

    “冷暖自由”,甚至記住你的使用習(xí)慣!三個(gè)按鍵,六種“超能力”按鍵1(TP1):燈光總管家短按:一鍵開/關(guān)燈,默認(rèn)亮度50%(防眩目設(shè)計(jì),告別“亮瞎眼”)長(zhǎng)按:深夜模
    的頭像 發(fā)表于 04-24 15:28 ?219次閱讀
    鏡子起霧?燈光太刺眼?三鍵觸控芯片,讓你的鏡子“活”過(guò)來(lái)!

    振弦式應(yīng)變計(jì):從橋梁到大壩的7大應(yīng)用場(chǎng)景

    工程師提供關(guān)鍵的安全數(shù)據(jù)。今天,我們就來(lái)揭秘它的“超能力”——究竟能在哪些場(chǎng)景中發(fā)揮作用?一、什么是振弦式應(yīng)變計(jì)?振弦式應(yīng)變計(jì)是一種高精度傳感器,外形類似一根金屬棒,
    的頭像 發(fā)表于 04-23 16:26 ?241次閱讀
    振弦式應(yīng)變計(jì):從橋梁到大壩的7大應(yīng)用場(chǎng)景

    免費(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ā)工具鏈”,通過(guò)“實(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 ?199次閱讀
    免費(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)站上找到了庫(kù)存。該套件是為RaspberryPi5添加AI計(jì)算能力的簡(jiǎn)便方
    的頭像 發(fā)表于 03-25 09:47 ?437次閱讀
    如何為樹莓派添加人工智能<b class='flag-5'>超能力</b>!

    樹莓派+Ubuntu:工業(yè)界的“絕配”如何掀起智能風(fēng)暴!

    ,這就像是給了一塊普通的電路板注入了超能力!樹莓派,這個(gè)小巧的單板計(jì)算機(jī),憑借著它的“迷你身材”和“大能量”,早已俘獲了無(wú)數(shù)科技愛(ài)好者的芳心。而Ubuntu,這位開
    的頭像 發(fā)表于 03-25 09:25 ?259次閱讀
    樹莓派+Ubuntu:工業(yè)界的“絕配”如何掀起智能風(fēng)暴!

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

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

    AI4S科學(xué)研究的超能力時(shí)代是否已成必然

    ? 人類科研范式的巨變或?qū)⑹锹菪缴仙倪^(guò)程,它充滿了探索、挑戰(zhàn)與革新。 ? 世界上第一臺(tái)受專利保護(hù)的計(jì)算機(jī) 人類歷史上得到普遍認(rèn)可的較早期的機(jī)械式計(jì)算機(jī)之一,是1642年法國(guó)哲學(xué)家兼數(shù)學(xué)家布累斯·帕斯卡發(fā)明的加法器(Pascaline)。 帕斯卡發(fā)明它的目的,是幫助父親減少稅務(wù)計(jì)算上的勞作。而此后,二進(jìn)制和微積分的發(fā)明者萊布尼茨在加法器的基礎(chǔ)上,發(fā)明了人類第一臺(tái)可進(jìn)行四則運(yùn)算的機(jī)械計(jì)算機(jī)。 最早的計(jì)算機(jī)的誕生是讓數(shù)學(xué)家從繁冗、
    的頭像 發(fā)表于 01-20 09:10 ?594次閱讀
    AI4S科學(xué)研究的<b class='flag-5'>超能力</b>時(shí)代是否已成必然

    AI大模型賦能!移遠(yuǎn)通信打造具有“超能力”的AI智能玩具解決方案

    AI大模型賦能!移遠(yuǎn)通信打造具有“超能力”的AI智能玩具解決方案 ? 隨著無(wú)線通信、先進(jìn)算法以及AI大模型等前沿技術(shù)的蓬勃發(fā)展,許多玩具已經(jīng)從簡(jiǎn)單的互動(dòng)設(shè)備進(jìn)化為集教育、陪伴和娛樂(lè)功能于一身的AI
    發(fā)表于 01-13 15:05 ?245次閱讀
    AI大模型賦能!移遠(yuǎn)通信打造具有“<b class='flag-5'>超能力</b>”的AI智能玩具解決方案

    AI大模型賦能!移遠(yuǎn)通信打造具有“超能力”的AI智能玩具解決方案

    隨著無(wú)線通信、先進(jìn)算法以及AI大模型等前沿技術(shù)的蓬勃發(fā)展,許多玩具已經(jīng)從簡(jiǎn)單的互動(dòng)設(shè)備進(jìn)化為集教育、陪伴和娛樂(lè)功能于一身的AI智能玩具,在兒童群體中日漸風(fēng)靡。不僅如此,因其能提供滿滿的情緒價(jià)值,在成年人和老年人市場(chǎng)中也展現(xiàn)出巨大的市場(chǎng)潛力,成為許多玩具廠商競(jìng)相涌入的新賽道。為滿足諸多玩具廠商的智能化升級(jí)需求,移遠(yuǎn)通信宣布推出針對(duì)玩具市場(chǎng)的AI智能解決方案。該
    的頭像 發(fā)表于 01-13 13:05 ?435次閱讀
    AI大模型賦能!移遠(yuǎn)通信打造具有“<b class='flag-5'>超能力</b>”的AI智能玩具解決方案

    大核桃單北斗防爆手持終端,憑啥能在高危環(huán)境里“橫著走”?它到底有何超能力

    環(huán)境而生的通訊利器,它憑借著一系列卓越的“超能力”,在高危環(huán)境中“橫著走”,成為了眾多行業(yè)不可或缺的得力助手。一、精準(zhǔn)定位,守護(hù)安全大核桃單北斗防爆手持終端搭載了
    的頭像 發(fā)表于 01-07 17:31 ?323次閱讀
    大核桃單北斗防爆手持終端,憑啥能在高危環(huán)境里“橫著走”?它到底有何<b class='flag-5'>超能力</b>!

    聊聊std::move函數(shù)和std::forward函數(shù)

    今天我們聊聊Modern cpp的兩個(gè)非常重要的概念移動(dòng)語(yǔ)義和轉(zhuǎn)發(fā)引用。
    的頭像 發(fā)表于 11-05 16:58 ?890次閱讀

    算力系列基礎(chǔ)篇——算力與計(jì)算機(jī)性能:解鎖超能力的神秘力量!

    在《算力系列基礎(chǔ)篇——算力101:從零開始了解算力》中,相信各位粉絲初步了解到人工智能的“發(fā)動(dòng)機(jī)”和核心驅(qū)動(dòng)力:算力!算力!算力!(重要的事情說(shuō)三遍)今天,一起學(xué)習(xí)一下計(jì)算機(jī)性能是如何影響算力的?要想提高算力,都有哪些方法?一、算力的關(guān)鍵因素從算力的常見(jiàn)計(jì)量單位FPOPS(FloatingPointOperationsPerSecond,浮點(diǎn)運(yùn)算次數(shù)/秒)、
    的頭像 發(fā)表于 07-11 08:04 ?104次閱讀
    算力系列基礎(chǔ)篇——算力與計(jì)算機(jī)性能:解鎖<b class='flag-5'>超能力</b>的神秘力量!
    主站蜘蛛池模板: 毛片网站在线 | 中文字幕在线一区二区在线 | 亚洲国产婷婷香蕉久久久久久 | 手机看片神马午夜片 | 亚洲a在线播放 | 99久久免费精品国产免费高清 | 日本一级大片 | 影院在线观看免费 | 国产yw.8825.c免费 | 3344a毛片在线看 | 日本一区免费观看 | 天天夜夜啦啦啦 | 中文字幕卡二和卡三的视频 | 人人爱人人爽 | 午夜艹逼 | 伊人精品久久久大香线蕉99 | 国产日日操 | 天天干天天射天天插 | jiuse视频| 欧美一卡二卡科技有限公司 | 狠狠色狠狠色综合日日不卡 | 特黄a大片免费视频 | 国产福利在线观看一区二区 | 久久久精品2021免费观看 | 在线观看天堂 | 亚洲男人的天堂在线观看 | 天天做天天爱天天做天天吃中 | 日本xxxx色视频在线观看免费 | 丁香六月激情婷婷 | 国产精品无码永久免费888 | 四虎永久在线精品免费观看地址 | 欧美白人极品性喷潮 | 日本不卡视频免费 | 制服丝袜在线一区 | 国产欧美一区二区三区观看 | 91视频毛片 | 亚洲国产成人久久三区 | 成人免费观看一区二区 | 亚洲高清免费观看 | 夜夜爽爽爽 | 欧美h网|