全部產品
Search
文件中心

Container Service for Kubernetes:通過QAT加速器裝置加速資料加解密和壓縮解壓縮

更新時間:Apr 30, 2025

QAT加速器裝置可以提升系統的加密處理能力,適用於高效能加解密能力的業務應用,例如Web伺服器、資料庫和其他需要大量安全通訊的服務,在確保資料安全的同時,減輕CPU的負擔,提升整體系統效能。 您可以在ACK託管叢集Pro版中部署ack-qat-deviceplugin組件,以便使用阿里雲第八代Intel Sapphire Rapids神龍節點上的QAT裝置為業務應用中的加解密、壓縮解壓縮等操作提速。

相關概念

Intel QuickAssist Technology(QAT)

英特爾® QAT是英特爾® 至強® 可擴充處理器上整合的工作負載加速器,可從CPU核心分擔關鍵的資料壓縮和解壓縮、加密和解密以及公開金鑰資料加密任務,並加速這些操作,從而協助提高CPU效能和效率,減少資料佔用空間。更多資訊,請參見intel官方文檔

ack-qat-deviceplugin組件

ack-qat-deviceplugin組件基於龍蜥社區開源intel-accel-plugin-qat開發,便於您在ACK託管叢集Pro版中使用QAT,它可以將阿里雲第八代Intel Sapphire Rapids神龍節點上的QAT裝置,通過Kubernetes的Device Plugin機制,將QAT裝置作為特定資源按需分配給叢集中啟動並執行Nginx、Envoy等業務應用,加速加解密、壓縮解壓縮等操作並節省計算資源。

使用限制

  • 執行個體規格:ecs.ebmg8i和ecs.ebmc8i系列裸金屬執行個體,本文以ecs.ebmg8i.48xlarge為例介紹。

    說明

    ecs.ebmg8i和ecs.ebmc8i系列裸金屬執行個體僅在部分地區可購買使用,可售地區與庫存情況請查詢ECS執行個體規格可購買地區總覽

  • 作業系統:Alibaba Cloud Linux 3.2104 LTS 64位。

  • 如果您已經在叢集中部署了其他QAT裝置的Device Plugin應用,請先將其卸載以免衝突。

前提條件

步驟一:配置節點加入指令碼

首次使用QAT裝置之前,您需要先使用以下指令碼更新核心參數並重啟節點。

重要

為避免重複配置,建議您為ecs.ebmg8i和ecs.ebmc8i系列的執行個體建立專用節點池,並將以下指令碼內容配置到專用節點池的執行個體自訂資料中,請勿在執行個體預自訂資料中配置,否則,會導致節點加入失敗。更多資訊,請參見建立和管理節點池

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

  1. 執行以下命令,安裝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"

    參數

    是否可選

    說明

    預設值

    regionId

    可選

    叢集所在地區,配置後使用內網鏡像。

    setup.vf_per_pf

    可選

    每個PF可擴充出VF的數量,即硬體物理裝置上可擴充的虛擬化空間數量。取值:0~16。

    16

    setup.enabled_mode

    可選

    QAT裝置支援symasymdc三種驅動。更多驅動資訊,請參見sysfs-driver-qat

    • sym:用於加速對稱加解密。

    • asym:用於加速非對稱加解密。

    • dc:用於加速壓縮解壓縮。

    最多可選擇支援2種驅動,驅動之間用英文半形分號(;)分隔。例如aymc;dc表示用於加速非對稱加解密與壓縮解壓縮。

    asym;dc

  2. 執行以下命令,為需要部署ack-qat-deviceplugin的節點打上預設的Label。

    kubectl label node cn-beijing.172.17.XX.XX "alibabacloud.com/type"="ebmg8i"
  3. 組件安裝完後,等待幾分鐘,確認組件Pod狀態正常,即叢集的kube-system下的ack-qat-deviceplugin狀態變為running後,執行以下命令查詢節點的可用VF資源。

    kubectl get nodes -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{range $k,$v:=.status.allocatable}}{{"  "}}{{$k}}{{": "}}{{$v}}{{"\n"}}{{end}}{{end}}'

    預期輸出:

    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
    • 預期輸出中 qat.intel.com/cy2_dc2: 32表示資源的數量為32,對於ecs.ebmg8i.48xlarge執行個體節點,應包含setup.vf_per_pf×2的資源數量,本例中setup.vf_per_pf預設值為16.

    • qat.intel.com/cy{}_dc{}資源指1個QAT裝置包括的加解密(cy)與壓縮解壓縮(dc)的工作隊列數量。對於ecs.ebmg8i.48xlarge執行個體節點,1個QAT裝置包含2個加解密工作隊列,2個壓縮解壓縮工作隊列。

步驟三:部署應用並分配QAT裝置資源

本節以intel官方的boringSSL+Envoy demo為例,介紹如何使用QAT裝置為業務應用的TLS加解密提速。其中,BoringSSL為開源的安全加密庫;Envoy為通用的雲原生網關,用於支援微服務架構下服務間的通訊。

  1. 使用以下命令,建立認證並使用認證建立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
  2. 參考以下樣本,以ConfigMap的方式建立Envoy設定檔,其中,Envoy需要開啟private_key_providers特性。

    展開查看Envoy設定檔

    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
  3. 部署Envoy應用及服務,將上述Secret與ConfigMap作為Volumes配置到應用中。

    Envoy鏡像需要使用支援Intel QAT裝置加速TLS、GZIP等功能的龍蜥社區envoy-accel鏡像。

    展開查看部署Envoy應用及服務的YAML檔案

    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  # 使用龍蜥社區envoy-accel鏡像,支援Intel QAT裝置加速TLS、GZIP等功能。
              securityContext:
                privileged: true # 需要配置特權容器。
              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  # 需要將裝置掛載到容器。
          volumes:
            - name: devfs
              hostPath:
                path: /dev
                type: ""
            - name: tls
              secret:
                secretName: envoy-tls-secret
            - name: config
              configMap:
                name: boringssl-envoy-config

    其中單進程Envoy需要1個加解密和1個壓縮解壓縮裝置,因此設定qat.intel.com/cy2_dc2資源的limit為1。

  4. 驗證QAT裝置已完成加密解密操作。

    1. 使用以下命令,記錄訪問前QAT裝置的使用計數。

      #登入Envoy部署節點。
      cat /sys/kernel/debug/qat_4xxx_0000\:e8\:00.0/fw_counters

      預期輸出:

      展開查看預期輸出

      +------------------------------------------------+
      | 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 |
      +------------------------------------------------+
    2. 使用以下命令,通過認證訪問服務。

      #Client端,即建立Secret時所在的機器上執行。
      kubectl port-forward svc/helloenvoy 32296:9000
      curl --cacert cert.pem https://localhost:32296 -v

      預期輸出:

      展開查看預期輸出

      *   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
    3. 使用以下命令,記錄訪問後QAT裝置的使用計數。

      #登入Envoy部署節點。
      cat /sys/kernel/debug/qat_4xxx_0000\:e8\:00.0/fw_counters

      預期輸出:

      展開查看預期輸出

      +------------------------------------------------+
      | 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 |
      +------------------------------------------------+

      預期輸出表明,QAT使用計數已增加。