第2章 Azure への機密コンテナーのデプロイ
Microsoft Azure クラウドコンピューティングサービス上で実行されている Red Hat OpenShift Container Platform クラスターに機密コンテナーワークロードをデプロイできます。
2.1. 準備 リンクのコピーリンクがクリップボードにコピーされました!
機密コンテナーを Azure にデプロイする前に、これらの前提条件と概念を確認します。
2.1.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- 機密コンテナーのワークロードを実行しているクラスターに、最新バージョンの Red Hat OpenShift Container Platform がインストールされている。
- 高信頼環境内の OpenShift Container Platform クラスターに Red Hat build of Trustee をデプロイした。詳細は、Red Hat build of Trustee のデプロイ を参照してください。
- ワーカーノードと Pod 仮想マシン (VM) に使用するサブネット内の通信用に、ポート 15150 と 9000 が有効になっている。これらのポートにより、ワーカーノードで実行されている Kata shim と Pod 仮想マシンで実行されている Kata エージェント間の通信が可能になります。
2.1.2. 送信接続 リンクのコピーリンクがクリップボードにコピーされました!
ピア Pod がパブリックインターネットなどの外部ネットワークと通信できるようにするには、Pod 仮想マシン (VM) サブネットの送信接続を設定する必要があります。これには、NAT ゲートウェイの設定と、オプションでサブネットを Azure のクラスターの仮想ネットワーク (VNet) と統合する方法の定義が含まれます。
- ピア Pod とサブネット
- ピア Pod は、送信アクセス用に明示的な設定を必要とする専用の Azure サブネットで動作します。このサブネットは、OpenShift Container Platform ノードによって使用されるデフォルトのワーカーサブネット、またはピア Pod 専用に作成された別のカスタムサブネットのいずれかになります。
- VNet ピアリング
- 別のサブネットを使用する場合、VNet ピアリングはピア Pod VNet をクラスターの VNet に接続し、分離を維持しながら内部通信を確保します。これには、CIDR 範囲が VNet 間で重複しないようにする必要があります。
送信接続は次の 2 つの方法で設定できます。
- デフォルトのワーカーサブネット: 既存のワーカーサブネットを変更して、NAT ゲートウェイを含めます。これはより単純で、クラスターリソースを再利用しますが、分離性は低くなります。
- ピア Pod VNet: ピア Pod 専用の VNet とサブネットを設定し、NAT ゲートウェイを接続して、クラスター VNet とピアリングします。これにより、複雑さは増しますが、分離性と柔軟性が向上します。
2.1.3. ピア Pod のリソース要件 リンクのコピーリンクがクリップボードにコピーされました!
クラスターに十分なリソースがあることを確認する。
ピア Pod 仮想マシン (VM) には、次の 2 つの場所にリソースが必要です。
-
ワーカーノード。ワーカーノードは、メタデータ、Kata shim リソース (
containerd-shim-kata-v2)、リモートハイパーバイザーリソース (cloud-api-adaptor)、およびワーカーノードとピア Pod VM 間のトンネル設定を保存します。 - クラウドインスタンス。これは、クラウド内で実行されている実際のピア Pod VM です。
Kubernetes ワーカーノードで使用される CPU およびメモリーリソースは、ピア Pod の作成に使用される RuntimeClass (kata-remote) 定義に含まれる Pod オーバーヘッド によって処理されます。
クラウド内で実行されているピア Pod VM の合計数は、Kubernetes ノード拡張リソースとして定義されます。この制限はノードごとに設定され、peer-pods-cm config map の PEERPODS_LIMIT_PER_NODE 属性によって設定されます。
拡張リソースの名前は kata.peerpods.io/vm で、Kubernetes スケジューラーが容量の追跡とアカウンティングを処理できるようにします。
OpenShift sandboxed containers Operator のインストール後に、環境の要件に基づいてノードごとの制限を編集できます。
mutating Webhook により、拡張リソース kata.peerpods.io/vm が Pod 仕様に追加されます。また、リソース固有のエントリーが存在する場合は、Pod 仕様から削除されます。こうすることで、Kubernetes スケジューラーがこれらの拡張リソースを考慮できるようになり、リソースが利用可能な場合にのみピア Pod がスケジュールされるようになります。
mutating Webhook は、次のように Kubernetes Pod を変更します。
-
mutating Webhook は、
TARGET_RUNTIME_CLASS環境変数で指定されたRuntimeClassNameの想定値であるか、Pod をチェックします。Pod 仕様の値がTARGET_RUNTIME_CLASSの値と一致しない場合、Webhook は Pod を変更せずに終了します。 RuntimeClassNameの値が一致する場合、Webhook は Pod 仕様に次の変更を加えます。-
この Webhook は、Pod 内のすべてのコンテナーおよび初期化コンテナーの
resourcesフィールドからすべてのリソース仕様を削除します。 -
Webhook は、Pod 内の最初のコンテナーのリソースフィールドを変更して、拡張リソース (
kata.peerpods.io/vm) を仕様に追加します。拡張リソースkata.peerpods.io/vmは Kubernetes スケジューラーによってアカウンティング目的で使用されます。
-
この Webhook は、Pod 内のすべてのコンテナーおよび初期化コンテナーの
mutating Webhook は、OpenShift Container Platform の特定のシステム namespace が変更されないように除外します。これらのシステム namespace でピア Pod が作成された場合、Pod の仕様に拡張リソースが含まれていない限り、Kubernetes 拡張リソースを使用したリソースアカウンティングは機能しません。
ベストプラクティスとして、特定の namespace でのみピア Pod の作成を許可するクラスター全体のポリシーを定義します。
2.1.4. Initdata リンクのコピーリンクがクリップボードにコピーされました!
initdata 仕様は、実行時に機密データまたはワークロード固有のデータを使用してピア Pod を初期化する柔軟な方法を提供し、そのようなデータを仮想マシン (VM) イメージに埋め込む必要性を回避します。このアプローチにより、機密情報の漏洩が減り、セキュリティーが強化され、カスタムイメージビルドがなくなることで柔軟性が向上します。たとえば、initdata には次の 3 つの設定を含めることができます。
- セキュアな通信のための X.509 証明書。
- 認証用の暗号化キー。
-
許容的なデフォルトの Kata エージェントポリシーをオーバーライドする際に実行時の動作を強制するため、オプションの Kata エージェント
policy.regoファイル。
initdata コンテンツは次のコンポーネントを設定します。
- Attestation Agent (AA) は、アテステーションのためにエビデンスを送信することで、ピア Pod の信頼性を検証します。
- Confidential Data Hub (CDH) は、ピア Pod 仮想マシン内の秘密とセキュアなデータアクセスを管理します。
- Kata エージェントは、ランタイムポリシーを適用し、Pod 仮想マシン内のコンテナーのライフサイクルを管理します。
initdata.toml ファイルを作成し、それを gzip 形式の Base64 エンコード文字列に変換します。この initdata の文字列を、次のいずれかの方法でワークロードに適用します。
-
グローバル設定: ピア Pod の config map で
INITDATAキーの値として initdata 文字列を追加して、すべてのピア Pod のデフォルト設定を作成します。 Pod 設定: initdata 文字列を Pod マニフェストにアノテーションとして追加します。これにより、個々のワークロードのカスタマイズが可能になります。
注記Pod マニフェスト内の initdata アノテーションは、その特定の Pod に対して、ピア Pod の config map 内のグローバルな
INITDATA値をオーバーライドします。Kata ランタイムは、Pod の作成時にこの優先順位を自動的に処理します。
次に、initdata ファイルからハッシュを作成します。このハッシュは、Red Hat build of Trustee の Reference Value Provider Service (RVPS) config map の参照値として必要です。