色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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ā)出請求。內(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 允許我們在內(nèi)核中運(yùn)行自定義程序。這是我們改變內(nèi)核的行為方式。這是一個(gè)真正的游戲規(guī)則改變者。過去,如果要更改 Linux 內(nèi)核,需要很長時(shí)間。它需要內(nèi)核編程方面的專業(yè)知識(shí)。如果您對內(nèi)核進(jìn)行更改,通常需要幾年時(shí)間才能從內(nèi)核進(jìn)入我們在生產(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 讓自己對漏洞利用更具彈性。我喜歡這種動(dòng)態(tài)漏洞修補(bǔ)的一個(gè)例子是對死亡數(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ù)包。現(xiàn)在,我只允許他們繼續(xù)。XDP_PASS 意味著繼續(xù)做你對這個(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),以說明如何處理死亡場景包。

抵御漏洞利用

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

使用 BPF Linux 安全模塊,我們可以對許多其他不同的漏洞利用具有彈性。您可能遇到過 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ò)展請求。我們經(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)我們在那個(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 請求類型。我們可以將該數(shù)據(jù)流與 Kubernetes 身份相關(guān)聯(lián)。

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

我們可以在這里看到,左邊的藍(lán)線是每秒請求數(shù)的請求-響應(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 的請求路由到另一個(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ī)。我們在第二個(gè)集群上也有一些類似的 X-wings 和 Rebel 基地。

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

讓我們試試看。讓我們循環(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)該看到的是,所有請求現(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)勢,讓我也談?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)核。如果它們在POD中,無論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)核對整個(gè)主機(jī)上發(fā)生的所有有趣的事情都有可見性。這意味著如果我們使用 eBPF 程序來檢測內(nèi)核,我們可以了解整個(gè)主機(jī)上發(fā)生的一切。因?yàn)槲覀儙缀蹩梢詸z測內(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ù)。

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

這對于我們所說的邊車模型也有一個(gè)有趣的含義。在很多方面,與 sidecar 模型相比,eBPF 為我們提供了更多的簡單性。在 sidecar 模型中,我們必須將一個(gè)容器注入到我們想要檢測的每個(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,我們在內(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)心使用您的可觀察性工具來檢測他們的進(jìn)程和他們的 pod。如果您的可觀察性工具在內(nèi)核中運(yùn)行,那么無論如何都會(huì)看到它們。你無法躲避那些' s 在內(nèi)核中運(yùn)行。這種在沒有 sidecar 的情況下運(yùn)行檢測的能力正在創(chuàng)建一些非常強(qiáng)大的可觀察性工具。

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

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

它還讓我們想到了無邊服務(wù)網(wǎng)格的想法。服務(wù)網(wǎng)格具有彈性、可觀察性和安全性。現(xiàn)在有了 eBPF,我們可以在不使用 sidecar 的情況下實(shí)現(xiàn)服務(wù)網(wǎng)格。我在圖表之前展示了我們?nèi)绾问褂?eBPF 繞過主機(jī)上的網(wǎng)絡(luò)堆棧。對于服務(wù)網(wǎng)格,我們可以更進(jìn)一步。 在傳統(tǒng)的 sidecar 模型中,我們在希望成為服務(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 大大縮短它。我們不能總是避免代理。 如果我們在第 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 和許多其他對大規(guī)模可擴(kuò)展網(wǎng)絡(luò)感興趣的公司一起參與其中。我們共同組建了 eBPF 基金會(huì),它是 Linux 基金會(huì)下的一個(gè)基金會(huì),真正負(fù)責(zé)跨不同操作系統(tǒng)的 eBPF 技術(shù)。

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

審核編輯 :李倩

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

    關(guān)注

    87

    文章

    11319

    瀏覽量

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

    關(guān)注

    30

    文章

    4801

    瀏覽量

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

    關(guān)注

    0

    文章

    139

    瀏覽量

    16026

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    eBPF技術(shù)實(shí)踐之virtio-net網(wǎng)卡隊(duì)列可觀測

    時(shí),這一路徑難以進(jìn)行觀測。一些復(fù)雜的網(wǎng)絡(luò)抖動(dòng)問題很可能是由于網(wǎng)卡隊(duì)列不正常工作引起的。為了解決這類問題,我們基于eBPF技術(shù)擴(kuò)展了網(wǎng)卡隊(duì)列的可觀測能力,使得virtio網(wǎng)卡前后端的定界問題不再困擾。 virtio-net 前后端驅(qū)動(dòng)簡介 virtio-net (后面稱為
    的頭像 發(fā)表于 11-14 11:18 ?230次閱讀
    <b class='flag-5'>eBPF</b>技術(shù)實(shí)踐之virtio-net網(wǎng)卡隊(duì)列可觀測

    傳感器助力物流自動(dòng)化設(shè)備火力全開,就是這么Passion!

    、智能的特性,為這場年度盛宴保駕護(hù)航,讓Passion與效率并飛,共同書寫智慧物流的新篇章!智能倉儲(chǔ)精準(zhǔn)快速,暢通無阻在雙十一的倉儲(chǔ)戰(zhàn)場上,智能傳感器如同擁有超能力
    的頭像 發(fā)表于 11-12 11:04 ?183次閱讀
    傳感器助力物流自動(dòng)化設(shè)備火力全開,就是這么Passion!

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

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

    事件視覺技術(shù):解鎖邊緣AI新視野,賦能工業(yè)制造釋放革新生產(chǎn)力

    在智能工廠的璀璨圖景中,AGV/ARM機(jī)器人憑借先進(jìn)的三維視覺感知技術(shù),精準(zhǔn)捕捉貨架上的細(xì)微之物,與人類伙伴默契配合,安全高效地將貨物送達(dá)生產(chǎn)核心。生產(chǎn)線上,智能攝像頭如同擁有超能力的眼睛,輕松解讀
    的頭像 發(fā)表于 07-18 14:44 ?544次閱讀

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

    在《算力系列基礎(chǔ)篇——算力101:從零開始了解算力》中,相信各位粉絲初步了解到人工智能的“發(fā)動(dòng)機(jī)”和核心驅(qū)動(dòng)力:算力!算力!算力!(重要的事情說三遍)今天,一起學(xué)習(xí)一下計(jì)算機(jī)性能是如何影響算力的?要想提高算力,都有哪些方法?一、算力的關(guān)鍵因素從算力的常見計(jì)量單位FPOPS(FloatingPointOperationsPerSecond,浮點(diǎn)運(yùn)算次數(shù)/秒)、
    的頭像 發(fā)表于 07-11 08:04 ?104次閱讀
    算力系列基礎(chǔ)篇——算力與計(jì)算機(jī)性能:解鎖<b class='flag-5'>超能力</b>的神秘力量!

    本源超導(dǎo)量子計(jì)算機(jī)項(xiàng)目獲2023全球“未來產(chǎn)業(yè)之星”大賽超能獎(jiǎng)

    近日,在2024年上海市產(chǎn)業(yè)技術(shù)創(chuàng)新大會(huì)上,本源量子64比特超導(dǎo)量子計(jì)算機(jī)研發(fā)與產(chǎn)業(yè)化項(xiàng)目榮獲2023全球“未來產(chǎn)業(yè)之星”大賽未來產(chǎn)業(yè)超能獎(jiǎng),本源量子總經(jīng)理張輝受邀參加大會(huì)并出席頒獎(jiǎng)儀式。圖為未來
    的頭像 發(fā)表于 03-26 08:21 ?441次閱讀
    本源超導(dǎo)量子計(jì)算機(jī)項(xiàng)目獲2023全球“未來產(chǎn)業(yè)之星”大賽<b class='flag-5'>超能</b>獎(jiǎng)

    機(jī)房升級(jí)必備神器:模塊化精密空調(diào)的五大超能力

    模塊化機(jī)房精密空調(diào)是一種專門為現(xiàn)代數(shù)據(jù)中心和機(jī)房設(shè)計(jì)的空調(diào)系統(tǒng),具有以下特點(diǎn)和優(yōu)勢: 靈活性:模塊化機(jī)房精密空調(diào)采用模塊化設(shè)計(jì),可以根據(jù)機(jī)房的規(guī)模和需求,自由組合不同數(shù)量的空調(diào)模塊,從而實(shí)現(xiàn)靈活的配置和管理。 高效性:模塊化機(jī)房精密空調(diào)采用先進(jìn)的技術(shù)和高效的換熱器,能夠快速降溫、均勻送風(fēng),保證機(jī)房內(nèi)的溫度和濕度穩(wěn)定在適宜的范圍內(nèi),提高機(jī)房的運(yùn)行效率。
    的頭像 發(fā)表于 03-19 18:24 ?1262次閱讀
    機(jī)房升級(jí)必備神器:模塊化精密空調(diào)的五大<b class='flag-5'>超能力</b>!

    eBPF動(dòng)手實(shí)踐系列三:基于原生libbpf庫的eBPF編程改進(jìn)方案簡析

    在上一篇文章《eBPF動(dòng)手實(shí)踐系列二:構(gòu)建基于純C語言的eBPF項(xiàng)目》中,我們初步實(shí)現(xiàn)了脫離內(nèi)核源碼進(jìn)行純C語言eBPF項(xiàng)目的構(gòu)建。libbpf庫在早期和內(nèi)核源碼結(jié)合的比較緊密,如今的libbpf庫更加成熟,已經(jīng)完全脫離內(nèi)核源碼
    的頭像 發(fā)表于 03-19 14:19 ?869次閱讀
    <b class='flag-5'>eBPF</b>動(dòng)手實(shí)踐系列三:基于原生libbpf庫的<b class='flag-5'>eBPF</b>編程改進(jìn)方案簡析

    基于原生libbpf庫的eBPF編程改進(jìn)方案

    為了簡化 eBPF程序的開發(fā)流程,降低開發(fā)者在使用 libbpf 庫時(shí)的入門難度,libbpf-bootstrap 框架應(yīng)運(yùn)而生。基于libbpf-bootstrap框架的編程方案是目前網(wǎng)絡(luò)上看到的最主流編程方案。
    發(fā)表于 03-19 14:19 ?684次閱讀
    基于原生libbpf庫的<b class='flag-5'>eBPF</b>編程改進(jìn)方案

    電梯數(shù)智監(jiān)控?cái)z像頭,電梯有了“超能力”#電梯監(jiān)控 #電梯安全 #電梯物聯(lián)網(wǎng)

    物聯(lián)網(wǎng)監(jiān)控?cái)z像頭
    jf_69150321
    發(fā)布于 :2024年02月27日 09:28:31

    聊聊什么是IGBT的膝電壓?

    聊聊什么是IGBT的膝電壓? IGBT是一種半導(dǎo)體器件,常用于功率放大和電流控制應(yīng)用。作為一種開關(guān)器件,IGBT能夠在低驅(qū)動(dòng)電壓下實(shí)現(xiàn)較高的電流和電壓控制能力。膝電壓是其關(guān)鍵的特性之一,本文將對膝
    的頭像 發(fā)表于 02-03 16:23 ?1904次閱讀

    臺(tái)鈴超能S電動(dòng)車搭載鴻蒙智聯(lián),提供智能化駕乘體驗(yàn)

    此款車型——臺(tái)鈴超能S長續(xù)航高級(jí)系列鴻蒙版,可支持App操作、NFC解鎖,手機(jī)尋車及里程預(yù)測等多重功能。據(jù)悉,很可能即為今年年初臺(tái)鈴官網(wǎng)上展示的超能S蒼穹電動(dòng)摩托車。
    的頭像 發(fā)表于 02-01 14:18 ?2457次閱讀

    【先楫HPM5361EVK開發(fā)板試用體驗(yàn)】4手把手實(shí)戰(zhàn)EXIP在線解密引擎

    的起始地址和結(jié)尾地址。這意味著我們可以把需要加密的數(shù)據(jù)分塊管理,更加靈活方便。而且,EXIP的密鑰和計(jì)數(shù)器也都有獨(dú)特的設(shè)計(jì),確保了數(shù)據(jù)的安全性。 今天我們接著再來聊聊EXIP這個(gè)超級(jí)英雄的另一項(xiàng)超能力
    發(fā)表于 01-26 11:08

    聊聊AMBA協(xié)議的evolution過程

    作為一名新時(shí)代的ICer,一定必定肯定聽說過AMBA協(xié)議,但是卻少有人知道AMBA協(xié)議的evolution過程,本文將大致聊聊Evolution of the ARM AMBA Specifications!
    的頭像 發(fā)表于 01-19 09:50 ?1269次閱讀
    <b class='flag-5'>聊聊</b>AMBA協(xié)議的evolution過程
    主站蜘蛛池模板: 精品视频久久久久| 日韩久久影院| 麻豆国产自制在线观看| 男女一边摸一边做羞羞的事情免费 | 台湾果冻传媒在线观看| 亚洲不卡视频在线| 5g天天奭视频| 国产成人无码WWW免费视频在线| 国产中文字幕免费观看| 男女全黄h全肉细节文| 午夜aaaa| 94色94色永久网站| 国产精品外围在线观看| 啦啦啦WWW在线观看免费高清版| 日韩一级精品久久久久| 浴室里强摁做开腿呻吟的漫画男男 | 亚洲黄视频在线观看| 99re8在线视频精品| 国产精品久久久久久久A片冻果| 久久综合久久伊人| 天美麻豆成人AV精品| 做你的爱人BD日本| 国产精品视频免费视频| 蜜芽一区二区国产精品| 性夜a爽黄爽| jizz破处| 久久精品天天中文字幕| 手机在线成人精品视频网| 51成人精品午夜福利AV免费七| 国产九九九九九九九A片| 欧美日韩高清一区| 野花韩国高清完整版在线| 国产99久久| 暖暖 视频 免费 高清 在线观看 | 青青涩射射| 在线播放午夜理论片| 国产欧美二区综合| 青青青久久久| 最新无码国产在线视频9299| 国精一区二区AV在线观看网站| 日本女人bb|