通過QAT加速器設(shè)備加速數(shù)據(jù)加解密和壓縮解壓縮
QAT加速器設(shè)備可以提升系統(tǒng)的加密處理能力,適用于高性能加解密能力的業(yè)務(wù)應(yīng)用,例如Web服務(wù)器、數(shù)據(jù)庫和其他需要大量安全通信的服務(wù),在確保數(shù)據(jù)安全的同時,減輕CPU的負(fù)擔(dān),提升整體系統(tǒng)性能。 您可以在ACK集群Pro版中部署ack-qat-deviceplugin組件,以便使用阿里云第八代Intel Sapphire Rapids神龍節(jié)點上的QAT設(shè)備為業(yè)務(wù)應(yīng)用中的加解密、壓縮解壓縮等操作提速。
相關(guān)概念
Intel QuickAssist Technology(QAT)
英特爾? QAT是英特爾? 至強? 可擴展處理器上集成的工作負(fù)載加速器,可從CPU內(nèi)核分擔(dān)關(guān)鍵的數(shù)據(jù)壓縮和解壓縮、加密和解密以及公鑰數(shù)據(jù)加密任務(wù),并加速這些操作,從而幫助提高CPU性能和效率,減少數(shù)據(jù)占用空間。更多信息,請參見intel官方文檔。
ack-qat-deviceplugin組件
ack-qat-deviceplugin組件基于龍蜥社區(qū)開源intel-accel-plugin-qat開發(fā),便于您在ACK集群Pro版中使用QAT,它可以將阿里云第八代Intel Sapphire Rapids神龍節(jié)點上的QAT設(shè)備,通過Kubernetes的Device Plugin機制,將QAT設(shè)備作為特定資源按需分配給集群中運行的Nginx、Envoy等業(yè)務(wù)應(yīng)用,加速加解密、壓縮解壓縮等操作并節(jié)省計算資源。
使用限制
使用QAT加速加解密、壓縮解壓縮的QAT實例必須滿足以下要求:
實例規(guī)格:ecs.ebmg8i和ecs.ebmc8i系列裸金屬實例,本文以ecs.ebmg8i.48xlarge為例介紹。
說明ecs.ebmg8i和ecs.ebmc8i系列裸金屬實例需要提交工單加白名單使用。該實例僅在部分地域可購買使用,可售地域與庫存情況請查詢ECS實例規(guī)格可購買地域總覽。
操作系統(tǒng):Alibaba Cloud Linux UEFI 3.2104 Security Enhanced。
如果您已經(jīng)在集群中部署了其他QAT設(shè)備的Device Plugin應(yīng)用,請先將其卸載以免沖突。
前提條件
已創(chuàng)建ACK集群Pro版。具體操作,請參見創(chuàng)建Kubernetes托管版集群。
已安裝Helm。具體操作,請參見安裝Helm。
步驟一:配置節(jié)點加入腳本
首次使用QAT設(shè)備之前,您需要先使用以下腳本更新內(nèi)核參數(shù)并重啟節(jié)點。
為避免重復(fù)配置,建議您為ecs.ebmg8i和ecs.ebmc8i系列的實例創(chuàng)建專用節(jié)點池,并將以下腳本內(nèi)容配置到專用節(jié)點池的實例自定義數(shù)據(jù)中,請勿在實例預(yù)自定義數(shù)據(jù)中配置,否則,會導(dǎo)致節(jié)點加入失敗。更多信息,請參見創(chuàng)建節(jié)點池。
yum install kernel-0:5.10.134-16.1.al8.x86_64 -y
if [ $? -ne 0 ];then
echo "Error: yum update failed"
fi
yum install kernel-modules -y
if [ $? -ne 0 ];then
echo "Error: yum install kernel-modules failed"
fi
kernel_path=$(grubby --default-kernel)
kernel_args="intel_iommu=on iommu=pt"
grubby --update-kernel=$kernel_path --args=$kernel_args
reboot -f
步驟二:通過Helm部署ack-qat-deviceplugin
執(zhí)行以下命令,安裝ack-qat-deviceplugin。
helm install ack-qat-deviceplugin https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/ack-qat-deviceplugin-0.1.2.tgz \ --set regionId="cn-beijing" \ --set setup.vf_per_pf="16" \ --set setup.enabled_mode="asym;dc"
參數(shù)
是否可選
說明
默認(rèn)值
regionId
可選
集群所在地域,配置后使用內(nèi)網(wǎng)鏡像。
無
setup.vf_per_pf
可選
每個PF可擴展出VF的數(shù)量,即硬件物理設(shè)備上可擴展的虛擬化空間數(shù)量。取值:0~16。
16
setup.enabled_mode
可選
QAT設(shè)備支持
sym
、asym
、dc
三種驅(qū)動。更多驅(qū)動信息,請參見sysfs-driver-qat。sym
:用于加速對稱加解密。asym
:用于加速非對稱加解密。dc
:用于加速壓縮解壓縮。
最多可選擇支持2種驅(qū)動,驅(qū)動之間用英文半角分號(;)分隔。例如
aymc;dc
表示用于加速非對稱加解密與壓縮解壓縮。asym;dc
執(zhí)行以下命令,為需要部署ack-qat-deviceplugin的節(jié)點打上默認(rèn)的Label。
kubectl label node cn-beijing.172.17.XX.XX "alibabacloud.com/type"="ebmg8i"
組件安裝完后,等待幾分鐘,確認(rèn)組件Pod狀態(tài)正常,即集群的
kube-system
下的ack-qat-deviceplugin
狀態(tài)變?yōu)?code data-tag="code" code-type="xCode" class="code">running后,執(zhí)行以下命令查詢節(jié)點的可用VF資源。kubectl get nodes -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{range $k,$v:=.status.allocatable}}{{" "}}{{$k}}{{": "}}{{$v}}{{"\n"}}{{end}}{{end}}'
預(yù)期輸出:
cn-beijing.172.17.XX.XX cpu: 189280m ephemeral-storage: 113783349470 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 1027672932Ki pods: 2133 qat.intel.com/cy2_dc2: 32
預(yù)期輸出中
qat.intel.com/cy2_dc2: 32
表示資源的數(shù)量為32,對于ecs.ebmg8i.48xlarge實例節(jié)點,應(yīng)包含setup.vf_per_pf
×2的資源數(shù)量,本例中setup.vf_per_pf
默認(rèn)值為16.qat.intel.com/cy{}_dc{}
資源指1個QAT設(shè)備包括的加解密(cy
)與壓縮解壓縮(dc
)的工作隊列數(shù)量。對于ecs.ebmg8i.48xlarge實例節(jié)點,1個QAT設(shè)備包含2個加解密工作隊列,2個壓縮解壓縮工作隊列。
步驟三:部署應(yīng)用并分配QAT設(shè)備資源
本節(jié)以intel官方的boringSSL+Envoy demo為例,介紹如何使用QAT設(shè)備為業(yè)務(wù)應(yīng)用的TLS加解密提速。其中,BoringSSL為開源的安全加密庫;Envoy為通用的云原生網(wǎng)關(guān),用于支持微服務(wù)架構(gòu)下服務(wù)間的通信。
使用以下命令,創(chuàng)建證書并使用證書創(chuàng)建Secret。
openssl req -x509 -new -batch -nodes -subj '/CN=localhost' -keyout key.pem -out cert.pem kubectl create secret tls envoy-tls-secret --cert cert.pem --key key.pem
參考以下示例,以ConfigMap的方式創(chuàng)建Envoy配置文件,其中,Envoy需要開啟private_key_providers特性。
apiVersion: v1 kind: ConfigMap metadata: name: boringssl-envoy-config data: envoy-conf.yaml: | static_resources: listeners: - address: socket_address: address: 0.0.0.0 port_value: 9000 filter_chains: transport_socket: name: envoy.transport_sockets.tls typed_config: "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext common_tls_context: tls_certificates: certificate_chain: { "filename": "/etc/envoy/tls/tls.crt" } private_key_provider: provider_name: qat # 聲明通過配置provider_name和type_config中的"@type"開啟QAT。 typed_config: "@type": "type.googleapis.com/envoy.extensions.private_key_providers.qat.v3alpha.QatPrivateKeyMethodConfig" poll_delay: 0.002s private_key: { filename: "/etc/envoy/tls/tls.key" } filters: - name: envoy.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager codec_type: auto stat_prefix: ingress_http route_config: name: local_route virtual_hosts: - name: backend domains: - "*" routes: - match: { prefix: / } direct_response: { status: 200 } http_filters: - name: envoy.filters.http.router typed_config: @type\": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager admin: access_log_path: "/dev/null" address: socket_address: address: 0.0.0.0 port_value: 9001
部署Envoy應(yīng)用及服務(wù),將上述Secret與ConfigMap作為Volumes配置到應(yīng)用中。
Envoy鏡像需要使用支持Intel QAT設(shè)備加速TLS、GZIP等功能的龍蜥社區(qū)envoy-accel鏡像。更多詳情,請參見龍蜥社區(qū)鏡像平臺envoy-accel。
說明您還可以使用龍蜥鏡像平臺中其他支持QAT設(shè)備加速的nginx-accel、openresty-accel等應(yīng)用的鏡像與示例。
apiVersion: v1 kind: Service metadata: name: helloenvoy labels: app: boringssl-envoy spec: type: NodePort ports: - port: 9000 targetPort: 9000 protocol: TCP name: https selector: app: boringssl-envoy --- apiVersion: apps/v1 kind: Deployment metadata: name: boringssl-envoy labels: app: boringssl-envoy spec: replicas: 1 selector: matchLabels: app: boringssl-envoy template: metadata: labels: app: boringssl-envoy spec: nodeSelector: "alibabacloud.com/type": "ebmg8i" containers: - name: envoy image: registry.openanolis.cn/openanolis/envoy-accel:1.26.2-23 # 使用龍蜥社區(qū)envoy-accel鏡像,支持Intel QAT設(shè)備加速TLS、GZIP等功能。 securityContext: privileged: true # 需要配置特權(quán)容器。 imagePullPolicy: IfNotPresent args: - --cpuset-threads command: - envoy - -c - /etc/envoy/config/envoy-conf.yaml resources: limits: qat.intel.com/cy2_dc2: 1 cpu: 3 memory: "2G" requests: cpu: 3 memory: "2G" ports: - containerPort: 9000 volumeMounts: - name: tls mountPath: /etc/envoy/tls readOnly: true - name: config mountPath: /etc/envoy/config readOnly: true - name: devfs mountPath: /dev # 需要將設(shè)備掛載到容器。 volumes: - name: devfs hostPath: path: /dev type: "" - name: tls secret: secretName: envoy-tls-secret - name: config configMap: name: boringssl-envoy-config
其中單進(jìn)程Envoy需要1個加解密和1個壓縮解壓縮設(shè)備,因此設(shè)置
qat.intel.com/cy2_dc2
資源的limit
為1。驗證QAT設(shè)備已完成加密解密操作。
使用以下命令,記錄訪問前QAT設(shè)備的使用計數(shù)。
#登錄Envoy部署節(jié)點。 cat /sys/kernel/debug/qat_4xxx_0000\:e8\:00.0/fw_counters
預(yù)期輸出:
+------------------------------------------------+ | FW Statistics for Qat Device | +------------------------------------------------+ | Firmware Requests [AE 0]: 0 | | Firmware Responses[AE 0]: 0 | +------------------------------------------------+ | Firmware Requests [AE 1]: 0 | | Firmware Responses[AE 1]: 0 | +------------------------------------------------+ | Firmware Requests [AE 2]: 0 | | Firmware Responses[AE 2]: 0 | +------------------------------------------------+ | Firmware Requests [AE 3]: 0 | | Firmware Responses[AE 3]: 0 | +------------------------------------------------+ | Firmware Requests [AE 4]: 0 | | Firmware Responses[AE 4]: 0 | +------------------------------------------------+ | Firmware Requests [AE 5]: 0 | | Firmware Responses[AE 5]: 0 | +------------------------------------------------+ | Firmware Requests [AE 6]: 0 | | Firmware Responses[AE 6]: 0 | +------------------------------------------------+ | Firmware Requests [AE 7]: 0 | | Firmware Responses[AE 7]: 0 | +------------------------------------------------+ | Firmware Requests [AE 8]: 0 | | Firmware Responses[AE 8]: 0 | +------------------------------------------------+
使用以下命令,通過證書訪問服務(wù)。
#Client端,即創(chuàng)建Secret時所在的機器上執(zhí)行。 kubectl port-forward svc/helloenvoy 32296:9000 curl --cacert cert.pem https://localhost:32296 -v
預(yù)期輸出:
* Trying 127.0.0.1:32296... * Connected to localhost (127.0.0.1) port 32296 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: cert.pem * CApath: none * (304) (OUT), TLS handshake, Client hello (1): * (304) (IN), TLS handshake, Server hello (2): * (304) (IN), TLS handshake, Unknown (8): * (304) (IN), TLS handshake, Certificate (11): * (304) (IN), TLS handshake, CERT verify (15): * (304) (IN), TLS handshake, Finished (20): * (304) (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256 * ALPN, server did not agree to a protocol * Server certificate: * subject: CN=localhost * start date: Apr 22 07:32:56 2024 GMT * expire date: May 22 07:32:56 2024 GMT * common name: localhost (matched) * issuer: CN=localhost * SSL certificate verify ok. > GET / HTTP/1.1 > Host: localhost:32296 > User-Agent: curl/7.79.1 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < date: Tue, 23 Apr 2024 06:48:53 GMT < server: envoy < content-length: 0 < * Connection #0 to host localhost left intact
使用以下命令,記錄訪問后QAT設(shè)備的使用計數(shù)。
#登錄Envoy部署節(jié)點。 cat /sys/kernel/debug/qat_4xxx_0000\:e8\:00.0/fw_counters
預(yù)期輸出:
+------------------------------------------------+ | FW Statistics for Qat Device | +------------------------------------------------+ | Firmware Requests [AE 0]: 1 | | Firmware Responses[AE 0]: 1 | +------------------------------------------------+ | Firmware Requests [AE 1]: 0 | | Firmware Responses[AE 1]: 0 | +------------------------------------------------+ | Firmware Requests [AE 2]: 0 | | Firmware Responses[AE 2]: 0 | +------------------------------------------------+ | Firmware Requests [AE 3]: 0 | | Firmware Responses[AE 3]: 0 | +------------------------------------------------+ | Firmware Requests [AE 4]: 0 | | Firmware Responses[AE 4]: 0 | +------------------------------------------------+ | Firmware Requests [AE 5]: 0 | | Firmware Responses[AE 5]: 0 | +------------------------------------------------+ | Firmware Requests [AE 6]: 0 | | Firmware Responses[AE 6]: 0 | +------------------------------------------------+ | Firmware Requests [AE 7]: 0 | | Firmware Responses[AE 7]: 0 | +------------------------------------------------+ | Firmware Requests [AE 8]: 0 | | Firmware Responses[AE 8]: 0 | +------------------------------------------------+
預(yù)期輸出表明,QAT使用計數(shù)已增加。
相關(guān)文檔
基于Envoy的QAT設(shè)備加速效果,請參見龍蜥社區(qū)QAT實測效果。