自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Ebpf 加速 Istio 數(shù)據(jù)平面

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
服務(wù)網(wǎng)格是處理服務(wù)間通信的基礎(chǔ)設(shè)施層。它負(fù)責(zé)構(gòu)成現(xiàn)代云原生應(yīng)用程序的復(fù)雜服務(wù)拓?fù)鋪砜煽康亟桓墩埱蟆?/div>

介紹:

服務(wù)網(wǎng)格是處理服務(wù)間通信的基礎(chǔ)設(shè)施層。它負(fù)責(zé)構(gòu)成現(xiàn)代云原生應(yīng)用程序的復(fù)雜服務(wù)拓?fù)鋪砜煽康亟桓墩埱?。Istio 是迄今為止最受歡迎的服務(wù)網(wǎng)格,因?yàn)樗蟹浅XS富的功能。本文提出了一種優(yōu)化默認(rèn)數(shù)據(jù)平面的方法,并使用新的內(nèi)核定制機(jī)制——EBPF 來加速它。這篇文章是三部曲的第一部分。它介紹了背景知識以更好地理解我們的想法,并概括了實(shí)現(xiàn)加速目標(biāo)的一些關(guān)鍵步驟。

EBPF

Extended Berkeley Packet Filter (eBPF) 是 Linux 內(nèi)核中一種高度靈活和高效的虛擬式構(gòu)造,允許它以安全的方式在各種掛鉤點(diǎn)執(zhí)行字節(jié)碼。它在很多 Linux 內(nèi)核子系統(tǒng)中被使用,而且它是最突出的是網(wǎng)絡(luò)、跟蹤和安全的工具。

eBPF 的工作流程圖如上

PROGRAM TYPE

目前,有很不同的 Berkeley Packet Filter (BPF) 程序類型可用;下面的幾個(gè)小節(jié)解釋了兩種主要的聯(lián)網(wǎng)方式。

SOCK_OPS

BPF_PROG_TYPE_SOCK_OPS(簡稱sock_ops)允許這種類型的BPF程序訪問socket的一些字段(如IP地址、端口等)。它在網(wǎng)絡(luò)堆棧代碼的不同位置被多次調(diào)用。

此外,它使用現(xiàn)有的 BPF cgroups 基礎(chǔ)結(jié)構(gòu),因此程序可以附加到每個(gè) cgroup 并具有完全繼承支持。我們使用 sock_ops 來捕獲滿足我們要求的套接字并相應(yīng)地將它們添加到映射中。

SOCK_MSG

BPF_PROG_TYPE_SK_MSG(簡稱sock_msg)可以附加到sockhash map上,捕獲map中socket發(fā)送的每一個(gè)數(shù)據(jù)包,并根據(jù)msg的字段(如IP地址、端口等)確定其目的地。

HELPER FUNCTION

輔助函數(shù)使 BPF 程序能夠查詢核心內(nèi)核定義的一組函數(shù)調(diào)用,以從內(nèi)核檢索數(shù)據(jù)或?qū)?shù)據(jù)推送到內(nèi)核。每種 BPF 程序類型的可用輔助函數(shù)可能不同。例如,與附加到 TC 層的 BPF 程序相比,附加到套接字的 BPF 程序只允許調(diào)用幫助程序的子集。下面解釋了一個(gè)輔助函數(shù)。

BPF_MSG_REDIRECT_HASH

此幫助程序用于在套接字級別實(shí)現(xiàn)策略的程序。如果消息 msg 被允許通過(即如果判定 eBPF 程序返回 SK_PASS),則使用哈希 key 將其重定向到 map(類型 BPF_MAP_TYPE_SOCKHASH)引用的套接字.

MAP

映射是駐留在內(nèi)核空間中的高效鍵/值存儲??梢詮?BPF 程序訪問它們以保持多個(gè) BPF 程序調(diào)用之間的狀態(tài)。它們也可以從用戶空間通過文件描述符訪問,并且可以與其他 BPF 程序或用戶空間應(yīng)用程序任意共享。

SOCKHASH

Sockhash 和 Sockmap 是用于存儲內(nèi)核打開的套接字的數(shù)據(jù)結(jié)構(gòu)。Sockmap 當(dāng)前由一個(gè)數(shù)組支持,并將鍵強(qiáng)制為四個(gè)字節(jié)。這適用于許多用例。但是,在 Sockhash 更合適的更大用例中,這已成為限制。當(dāng)調(diào)用Sockhash上的Sock_msg程序重定向msg時(shí),5元組查找鍵可以保證盡快找到對端socket。

ISTIO 中的數(shù)據(jù)平面

Istio 服務(wù)網(wǎng)格在邏輯上分為數(shù)據(jù)平面和控制平面??刂破矫婀芾砗团渲么硪月酚闪髁俊?shù)據(jù)平面由一組部署為邊車的智能代理 (Envoy) 組成。這些代理中介和控制微服務(wù)之間的所有網(wǎng)絡(luò)通信,這是我們優(yōu)化的重點(diǎn)。

邊車模式

在 pod 的啟動階段,一個(gè) sidecar 容器和一個(gè) init 容器被注入到應(yīng)用程序清單中。流量從應(yīng)用程序服務(wù)傳入和傳出這些 sidecar,開發(fā)人員無需擔(dān)心。Sidecar 代理通過在 pod 命名空間中設(shè)置 iptable 規(guī)則來獲取進(jìn)出容器的入站和出站流量。

進(jìn)入應(yīng)用程序 pod 命名空間并獲取配置的 iptables,如下所示。

$ nsenter -t 4215 -n iptables -t nat -S

-P PREROUTING ACCEPT

-P INPUT ACCEPT

-P OUTPUT ACCEPT

-P POSTROUTING ACCEPT

-N ISTIO_INBOUND

-N ISTIO_IN_REDIRECT

-N ISTIO_OUTPUT

-N ISTIO_REDIRECT

-A PREROUTING -p tcp -j ISTIO_INBOUND

-A OUTPUT -p tcp -j ISTIO_OUTPUT

-A ISTIO_INBOUND -p tcp -m tcp --dport 80 -j ISTIO_IN_REDIRECT

-A ISTIO_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15001

-A ISTIO_OUTPUT ! -d 127.0.0.1/32 -o lo -j ISTIO_REDIRECT

-A ISTIO_OUTPUT -m owner --uid-owner 1337 -j RETURN

-A ISTIO_OUTPUT -m owner --gid-owner 1337 -j RETURN

-A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN

-A ISTIO_OUTPUT -j ISTIO_REDIRECT

-A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001

ISTIO中APP和SIDECAR之間的流量

Pod 流量可以分為三類,按其方向定義:Inbound、Outbound 和 Envoy to Envoy。我們將在下面的小節(jié)中使用從客戶端服務(wù)到服務(wù)器服務(wù)的請求示例來解釋這三個(gè)類別。

Outbond

當(dāng)應(yīng)用程序向遠(yuǎn)程服務(wù)發(fā)送請求消息時(shí),該消息通過另一個(gè)應(yīng)用程序(客戶端)創(chuàng)建的套接字作為內(nèi)核空間中的套接字緩沖區(qū)(SKB)發(fā)送。它遍歷網(wǎng)絡(luò)堆棧,直到被 iptables 規(guī)則在 netfilter 級別攔截。它使用新目的地完成網(wǎng)絡(luò)堆棧中剩余的旅行路徑。套接字在 Envoy 創(chuàng)建的環(huán)回接口上偵聽具有靜態(tài) ip 和端口 (127.0.0.1:15001) 的出站流量。

ENVOY TO ENVOY (同一主機(jī))

在 Envoy 處理完請求消息后,它會相應(yīng)地向托管服務(wù)器服務(wù)的 pod 發(fā)送一條消息。SKB 通過在服務(wù)器端網(wǎng)絡(luò)命名空間中設(shè)置的 iptables 規(guī)則攔截消息,并將其重定向到 Envoy 正在偵聽的默認(rèn)端口 (pod_ip:15006) 以處理入站流量。

Inbond

Envoy 處理完請求消息后,使用環(huán)回地址(127.0.0.1)訪問服務(wù)器服務(wù)。SKB經(jīng)過兩次網(wǎng)絡(luò)棧,最終到達(dá)服務(wù)器端。

加速的工作原理

套接字到套接字的重定向

eBPF 允許我們將 SKB 從套接字重定向到套接字,從而節(jié)省了遍歷網(wǎng)絡(luò)堆棧其余部分的成本。下圖說明了加速后的交通流量。

區(qū)分套接字對并將其添加到HASHMAP

Sock_ops 允許我們根據(jù)連接信息(例如 IP 地址、端口號等)來區(qū)分套接字。要從套接字重定向到套接字,我們需要連接的套接字對,然后將它們添加到 sockhash 映射中以備下一步使用。

哈希映射中套接字的重定向

SKB_ops 附加到一個(gè)哈希映射,捕獲映射中套接字發(fā)送的每個(gè) SKB 并確定其目的地。要將 SKB 發(fā)送到對等套接字,請將目標(biāo)的 4 元組信息(src ip、src 端口、dest ip、dest 端口)作為參數(shù)傳遞給重定向輔助函數(shù)。它在 sockhash 映射中搜索對等套接字并在它找到了。否則,它會像過去一樣繼續(xù)遍歷網(wǎng)絡(luò)堆棧。

概括

本文開頭介紹了eBPF及其組件,包括Program Type、Helper Function、Map。然后我們介紹了 Istio 中的幾個(gè)概念:控制平面和數(shù)據(jù)平面,sidecar 模式,以及它如何使用 iptables 抓取入站和出站流量。

此外,我們將從客戶端到服務(wù)器的流量路徑分為三類,并解釋了每一類中 SKB 發(fā)生了什么。最后,我們解釋了如何加速 app 和 sidecar 之間的流量。

參考:

·揭秘Istio的Sidecar注入模型:https ://istio.io/latest/blog/2019/data-plane-setup/

· BPF 和 XDP 參考指南:https://docs.cilium.io/en/latest/bpf/

原文:

https://01.org/blogs/xuyizhou/2021/accelerate-istio-dataplane-ebpf-part-1


責(zé)任編輯:武曉燕 來源: 新鈦云服
相關(guān)推薦

2023-03-27 00:17:21

eBPF技術(shù)網(wǎng)絡(luò)

2023-11-20 07:19:33

2022-07-01 18:36:17

云服務(wù)網(wǎng)絡(luò)

2023-12-18 09:08:40

IstioSidecar代理服務(wù)

2023-12-12 07:30:54

IstioWasm前端

2011-04-11 12:55:34

SQL Server 平面文件

2019-10-22 08:00:22

數(shù)據(jù)科學(xué)AWSDC

2023-12-25 07:46:35

GatewayAPI開源

2022-01-13 09:54:58

微服務(wù) Istio 通信

2021-12-18 07:42:15

Ebpf 監(jiān)控 Node.js

2011-03-07 16:21:36

2021-07-27 06:51:53

Istio 微服務(wù)Service Mes

2023-06-05 08:00:00

mTLSIstio安全

2023-10-13 13:40:29

2024-04-30 08:17:57

eBPF技術(shù)性能

2023-01-10 11:34:06

2020-07-24 09:35:37

數(shù)據(jù)中心IT技術(shù)

2024-01-08 07:29:57

多集群模型Istio網(wǎng)絡(luò)拓?fù)?/a>

2022-02-15 11:49:08

eBPFGo內(nèi)存

2022-10-17 15:03:18

eBPFiptables可觀測
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號