QuickAssist Technology(QAT)デバイスは、システムの暗号化機能を強化するために使用されるアクセラレータです。 QAT は、高性能な暗号化および復号機能を必要とするビジネス アプリケーションに適用できます。 これらのビジネス アプリケーションには、Web サーバー、データベース、および大量の安全な通信を必要とするその他のサービスが含まれます。 これにより、データ セキュリティが確保され、CPU の負荷が軽減され、システム全体のパフォーマンスが向上します。 第 8 世代 Intel Sapphire Rapids を使用する ECS ベアメタルインスタンスにデプロイされた QAT デバイスを使用して、ビジネス アプリケーションでのデータの暗号化、復号、圧縮、展開などの操作を高速化するために、ACK Pro マネージドクラスター に ack-qat-deviceplugin をデプロイできます。
用語
Intel QAT
Intel® QAT は、Intel® Xeon® スケーラブル・プロセッサーに統合されたワークロード高速化テクノロジーです。 QAT は、データの圧縮、展開、暗号化、復号、および公開鍵データ暗号化の重要なワークロードを CPU コアからオフロードし、これらの操作を高速化します。 これにより、CPU のパフォーマンスと効率が向上し、データ フットプリントが削減されます。 詳細については、「Intel 公式ドキュメント」をご参照ください。
ack-qat-deviceplugin
ack-qat-deviceplugin は、OpenAnolis のオープンソース intel-accel-plugin-qat に基づいて開発されています。 Intel Sapphire Rapids を使用する第 8 世代 ECS ベアメタルインスタンスにデプロイされた QAT デバイスを使用するために、ACK Pro マネージドクラスター に ack-qat-deviceplugin をデプロイできます。 Kubernetes のデバイス プラグイン メカニズムは、QAT デバイスを、クラスター内で実行されている NGINX や Envoy などのビジネス アプリケーションにオンデマンド リソースとして公開します。 これにより、データの暗号化、復号、圧縮、展開などの操作が高速化され、計算リソースが節約されます。
制限事項
インスタンスタイプ: ECS ベアメタルインスタンスは、ecs.ebmg8i および ecs.ebmc8i インスタンスファミリに属しています。 この例では、ecs.ebmg8i.48xlarge インスタンスタイプを使用しています。
説明ECS ベアメタルインスタンスの ecs.ebmg8i および ecs.ebmc8i インスタンスファミリは、一部のリージョンでのみ利用可能です。 リージョンの可用性と在庫状況を確認するには、「リージョンごとに利用可能なインスタンスタイプ」をご参照ください。
オペレーティングシステム: Alibaba Cloud Linux UEFI 3.2104 セキュリティ強化。
他のプロバイダーの QAT デバイスを公開するために使用されるデバイス プラグインをデプロイしている場合は、競合を防ぐためにデバイス プラグインをアンインストールしてください。
前提条件
手順 1: スクリプトを使用してノードを構成する
初めて 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" // エラー: yum update 失敗
fi
yum install kernel-modules -y
if [ $? -ne 0 ];then
echo "Error: yum install kernel-modules failed" // エラー: yum install kernel-modules 失敗
fi
kernel_path=$(grubby --default-kernel)
kernel_args="intel_iommu=on iommu=pt"
grubby --update-kernel=$kernel_path --args=$kernel_args
reboot -f手順 2: Helm を使用して ack-qat-deviceplugin をデプロイする
次のコマンドを実行して、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 デバイスのドライバー モード。 有効値:
sym、asym、dc。 詳細については、「sysfs-driver-qat」をご参照ください。sym: 対称暗号化と復号を高速化します。asym: 非対称暗号化と復号を高速化します。dc: 圧縮と展開を高速化します。
最大 2 つのドライバー モードを指定できます。 複数のドライバー モードはセミコロン (;) で区切ります。 たとえば、
aymc;dcの値は、QAT デバイスを使用して非対称暗号化と復号、圧縮、展開を高速化することを示します。asym;dc
次のコマンドを実行して、ack-qat-deviceplugin をデプロイするノードにデフォルト ラベルを追加します。
kubectl label node cn-beijing.172.17.XX.XX "alibabacloud.com/type"="ebmg8i"コンポーネントをインストールした後、数分待って、コンポーネント ポッドのステータスが正常かどうかを確認します。 クラスターの
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 enormouspages-1Gi: 0 enormouspages-2Mi: 0 memory: 1027672932Ki pods: 2133 qat.intel.com/cy2_dc2: 32出力の
qat.intel.com/cy2_dc2: 32は、VF の数が 32 であることを示します。 ecs.ebmg8i.48xlarge インスタンスタイプのインスタンスの場合、VF の数はsetup.vf_per_pfパラメーターの値の 2 倍です。 この例では、setup.vf_per_pfパラメーターにデフォルト値 16 を使用しています。qat.intel.com/cy{}_dc{}の cy{} および dc{} は、QAT デバイスの暗号化、復号、圧縮、展開の作業キューの数を示します。cy{}は暗号化と復号の作業キューの数を示し、dc{}は圧縮と展開の作業キューの数を示します。 ecs.ebmg8i.48xlarge インスタンスタイプのインスタンスの場合、QAT デバイスには暗号化と復号の作業キューが 2 つ、圧縮と展開の作業キューが 2 つあります。
手順 3: アプリケーションをデプロイし、QAT デバイスを割り当てる
この例では、BoringSSL と Envoy を使用して、QAT デバイスを使用して TLS の暗号化と復号を高速化する方法を示します。 BoringSSL はオープンソースの暗号ライブラリです。 Envoy は、マイクロサービス モデルのサービス間の通信に使用される一般的なクラウドネイティブ ゲートウェイです。
次のコマンドを実行して、証明書を作成し、その証明書を使用してシークレットを作成します。
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次のコードを使用して、Envoy 構成ファイルを ConfigMap として作成します。 Envoy では private_key_providers 機能を有効にする必要があります。
Envoy アプリケーションとサービスをデプロイし、上記のシークレットと ConfigMap をボリュームとしてアプリケーションにマウントします。
Envoy アプリケーションとサービスをデプロイするには、OpenAnolis の envoy-accel イメージを使用する必要があります。 このイメージは、TLS や GNU zip (Gzip) などの機能の Intel QAT アクセラレーションをサポートしています。
単一プロセスの Envoy アプリケーションでは、暗号化と復号に 1 つの QAT デバイス、圧縮と展開に 1 つの QAT デバイスが必要です。 したがって、
qat.intel.com/cy2_dc2リソースのlimitは 1 に設定されています。QAT デバイスが暗号化と復号に使用されていることを確認します。
暗号化と復号を実行する前に、次のコマンドを実行して、QAT デバイスが使用された回数を記録します。
# Envoy がデプロイされているノードにログオンします。 cat /sys/kernel/debug/qat_4xxx_0000\:e8\:00.0/fw_counters予期される出力:
次のコマンドを実行して、証明書を使用してサービスにアクセスします。
# シークレットが作成されたクライアントからサービスにアクセスします。 kubectl port-forward svc/helloenvoy 32296:9000 curl --cacert cert.pem https://localhost:32296 -v予期される出力:
証明書ベースのアクセス後、次のコマンドを実行して、QAT デバイスが使用された回数を記録します。
# Envoy がデプロイされているノードにログオンします。 cat /sys/kernel/debug/qat_4xxx_0000\:e8\:00.0/fw_counters予期される出力:
出力は、QAT デバイスが使用される回数の増加を示しています。