Red Hat - Open Innovation Labsのブログ - TECH PLAY

TECH PLAY

Red Hat  - Open Innovation Labs

Red Hat - Open Innovation Labs の技術ブログ

å…š900ä»¶

皆さんこんにちは。OpenShift Virtualization ずストレヌゞを生業にしおいる Red Hat のう぀が宇郜宮です。 【NetApp コラボ特集】Virt 屋のひずりごず : 第4回をお届けしたす。今回のテヌマは vSphere から OpenShift Virtualization ぞの VM 移行です。 回 テヌマ 第1回 ストレヌゞ基本蚭蚈、Trident のドラむバ遞定 第2回 容量蚭蚈 第3回 性胜蚭蚈 第4回本蚘事 VM 移行Shift Toolkit 第5回 マルチテナント蚭蚈 第6回 デヌタ保護 第7回 DR 蚭蚈 第8回 監芖ず運甚 VMware 環境の VM を OpenShift Virtualization に持っおくる。これが移行プロゞェクトの最倧のハヌドルです。特にディスクデヌタのコピヌがボトルネックになりたす。1TB の VMDK を 10GbE でコピヌするず理論倀でも 14 分、実効速床を考えれば数十分から数時間。VM の台数が倚ければその分だけ線圢に䌞びおいきたす。移行りィンドりの確保、業務停止時間の調敎、ネットワヌク垯域の奪い合い。VMware 運甚者にずっおはどれも銎染みのある頭痛の皮ではないでしょうか。 ずころが NetApp Shift Toolkit を䜿うず、この「コピヌ」がストレヌゞ偎のメタデヌタ操䜜に眮き換わるため、1TB のディスクでも秒単䜍でコピヌが終わりたす。むちゃくちゃ速いです。正盎感動したした。 この蚘事では、Shift Toolkit がなぜそんなに速いのかを FlexClone の仕組みから掘り䞋げ぀぀、Red Hat の Migration Toolkit for VirtualizationMTVず組み合わせた移行の蚭蚈パタヌンを玹介したす。 Shift Toolkit にはいく぀かのデプロむ方匏がありたすが、今回は OpenShift 䞊にコンテナずしおデプロむする "MTV Bundle" を䜿いたす。別途 Windows サヌバヌを甚意する必芁がなく、MTV コン゜ヌルから操䜜が完結する方匏です。埌半では MTV 単䜓ず Shift + MTV で移行時間がどれくらい倉わるかの実枬怜蚌も行いたす。 本シリヌズの他の蚘事ず合わせお読むず、移行前埌のストレヌゞ蚭蚈が぀ながりたす。第1回で玹介した ontap-nas ドラむバの基瀎知識は、本蚘事の NFS デヌタストアや Trident バック゚ンドの話に盎結したす。たた、第3回の性胜怜蚌ず同じ AFF C190 環境Trident は Shift の芁件に合わせお 26.06 に曎新で今回の移行怜蚌も実斜しおいたす。 怜蚌環境 NetApp Shift Toolkit ずは FlexClone で速い理由、NFS でなければならない理由 Shift + MTV の圹割分担 移行の蚭蚈ず手順 怜蚌 MTV 単䜓 vs Shift + MTV どう䜿い分けるか 怜蚌環境 この蚘事を䜜る䞊で、お借りした NetApp 機噚を OpenShift クラスタに接続した怜蚌環境を構築しお動䜜を確認したした。以䞋には環境情報を蚘茉したす。 NetApp 機噚 および Trident 項目 倀 ストレヌゞモデル NetApp AFF C190 x 2HA ペア ONTAP バヌゞョン 9.18.1P2 Trident バヌゞョン 26.06 ディスク SSD x 12 本モデル: X382_S1643960ATE / 894.3GB パヌティショニング ADPAdvanced Disk Partitioning有効 デヌタアグリゲヌト RAID-DP x 2各ノヌド 1 ぀ ネットワヌク 10GbE AFF C190 ぱントリヌクラスの All-Flash モデルです。 第3回の性胜怜蚌 ず同じ機噚を䜿甚しおいたす。今回は蚘事䞭で玹介する「移行専甚 SVM」パタヌンを採甚し、この SVM 内に䜜成した FlexVol を ESXi に NFS デヌタストアずしおマりントしおいたす。 VMware 環境移行元 項目 倀 vCenter Server vCSA 7.0.3 ESXi 7.0.3 NFS デヌタストア ONTAP-NFS-DatastoreAFF C190 の FlexVol を NFSv3 マりント OpenShift クラスタ移行先 項目 倀 OpenShift バヌゞョン 4.22.0 OpenShift Virtualization 4.22.2 Trident CSI 26.06 MTV 2.12 Shift Toolkit 1.0.0MTV Bundle Control Plane Node 3 x 仮想マシン Compute Node 3 x ベアメタルマシン ネットワヌク 10GbE ざっくりネットワヌク図 ONTAP は VMware ESXi ず OpenShift クラスタの䞡方に NFS で接続しおいたす。Shift + MTV による移行ではデヌタパスが ONTAP 内で完結するため、ESXi ↔ OpenShift 間のネットワヌク転送は発生したせん。 移行察象 VM VM 名 OS ディスクサむズ mig-test-rhel RHEL 8.3 316 GB この VM に察しお MTV 単䜓ず Shift + MTV の 2 通りで Cold Migration を実行し、MTV が報告する Phase ごずの所芁時間を蚈枬したした。 NetApp Shift Toolkit ずは NetApp Shift Toolkit 以䞋 Shiftは、異なるハむパヌバむザヌ間で VM を移行・倉換するための無償ツヌルです。vSphere から OpenShift Virtualization、Hyper-V、Proxmox、Oracle Linux Virtualization Manager など耇数の移行先に察応しおいたす。 このツヌルの栞になっおいるのが ONTAP の FlexClone 技術です。FlexClone は Snapshot を基点ずしお既存ブロックを共有する、曞き蟌み可胜なクロヌンを瞬時に䜜成する機胜です。䜜成時にフルコピヌず同等の远加容量を必芁ずせず、その埌に倉曎されたブロック分の容量だけを消費したす。 普通の移行ツヌルは VMDK のデヌタをネットワヌク経由で䞞ごず実コピヌしたすが、Shift は ONTAP 偎で FlexClone を䜜成したす。そのため、1TB の VMDK でも数秒でコピヌ&倉換が完了したす。党䜓をネットワヌク経由でコピヌする必芁がないため、埓来のデヌタコピヌ方匏ず比べお、移行時のネットワヌク転送量ずストレヌゞ負荷を倧幅に削枛できたす。 倧雑把に蚀うず「コピヌしないで倉換する」のが Shift です。 2 ぀のデプロむ方匏 Shift には倧きく分けお 2 ぀のデプロむ方匏がありたす。 ひず぀は Windows サヌバヌにむンストヌルするスタンドアロン版。埓来からある方匏で、Shift 専甚の GUI から操䜜したす。Hyper-V や Proxmox ぞの移行ではこちらを䜿いたす。 もうひず぀が今回䜿う MTV Bundle shift-toolkit-openshift-installer です。こちらは Shift を OpenShift クラスタ内にコンテナずしおデプロむしたす。専甚の Namespace に、倉換を実行する Shift Service ず、MTV が䜜成した PVC を監芖しお Shift Service に倉換を䟝頌する Shift Listener の 2 ぀が Pod ずしお展開されたす。 Windows スタンドアロン版 MTV Bundle 動䜜堎所 別途甚意した Windows サヌバヌ OpenShift クラスタ内Pod 操䜜 Shift 独自の Web UI MTV コン゜ヌルから盎接操䜜 MTV 連携の流れ Shift → MTV を呌び出す MTV が䜜成した PVC を Shift Listener が怜知しお倉換を実行 Windows 版だず「Shift UI で Blueprint を䜜っお MTV Plan を遞んで 」ずいう操䜜が必芁ですが、MTV Bundle ならその手間がなくなりたす。MTV コン゜ヌルで Migration Plan を実行するだけで、裏偎で Shift Listener が FlexClone 倉換を自動的にキックしおくれる。Shift の存圚を意識せずに枈むのが嬉しいずころです。 MTV Bundle はコンテナむメヌゞの tar がパッケヌゞに同梱されおいるので、むンタヌネットに接続できない゚アギャップ環境でも、OpenShift の内郚レゞストリに push すればデプロむできたす手順は埌述。゚ンタヌプラむズの OpenShift 環境はむンタヌネット接続がない制限環境で運甚されおいるこずが珍しくないので、ここは心匷いずころです。 FlexClone で速い理由、NFS でなければならない理由 FlexClone の仕組み NetApp のドキュメント によるず、ONTAP のファむルシステムである WAFLWrite Anywhere File Layoutはすべおのデヌタをブロック単䜍で管理しおおり、FlexClone でボリュヌムのクロヌンを䜜る際はブロックそのものはコピヌせず、メタデヌタブロックぞのポむンタだけを耇補するずのこずです。 nfs_datastoreFlexVol = NFS デヌタストア ├── vm1.vmdk ← 元の VMDK1TB │ ↓ Snapshot → FlexClone Volumeデヌタブロック共有、れロコピヌ trident_pvc_xxxFlexClone Volume └── disk.img ← フォヌマット倉換枈み数秒で完了 今回の怜蚌では、Shift が゜ヌス FlexVol の Snapshot を取埗し、そこから FlexClone Volume を䜜成しおいる様子を ONTAP System Manager の画面で確認できたした。クロヌンされたボリュヌム内で VMDK から disk.imgRAW 圢匏ぞの倉換が行われ、これが Trident の PVC のバック゚ンドずしお䜿われるようです。 「倉換」ず聞くずデヌタを読み出しお別フォヌマットで曞き盎すむメヌゞがありたすが、FlexClone は Snapshot からの分岐のためデヌタコピヌは発生したせん。埌述したすが、実際に 316 GB のディスクでもクロヌンからフォヌマット倉換たで秒単䜍で完了したした。 NFS でなければならない理由 ここで倧事な前提がありたす。Shift を䜿うには、゜ヌス VM が ONTAP の NFS デヌタストア䞊にないずいけたせん 。VMFS デヌタストアiSCSI / FCにある VM には盎接䜿えない。 NetApp Community の蚘事 では、Shift は VMDK ファむルのヘッダヌに盎接アクセスしおフォヌマット倉換を行う "agentless, header-only approach" ず衚珟されおいたす。この方匏が動䜜するには、ONTAP が VMDK を「ファむル」ずしお認識できる必芁があるず考えられたす。 NFS デヌタストアの堎合、ONTAP が NFS サヌバヌずしおファむルシステムを管理しおいるため、FlexVol 内の個々の VMDK ファむルを認識できたす。ボリュヌムをクロヌンした埌にその䞭の VMDK のヘッダヌにアクセスしおフォヌマット倉換を実行できる、ずいうのが NFS が必芁な理由のようです。 ESXi → NFS マりント → ONTAP FlexVol ├── vm1.vmdk ← ONTAP がファむルずしお認識しおいる ├── vm2.vmdk ← FlexClone Volume を䜜れば倉換可胜 └── vm3.vmdk 䞀方、VMFS デヌタストアでは ONTAP は LUNブロックデバむスを䞞ごず提䟛しおいるだけです。VMFS は ESXi が LUN の䞊に構築・管理するファむルシステムなので、ONTAP 偎からは䞭の個別ファむルを認識できたせん。仮に LUN をクロヌンしたずしおも、ONTAP から芋ればバむト列の塊のたたであり、䞭の VMDK を芋぀けるこずもヘッダヌにアクセスするこずもできないわけです。 ESXi → iSCSI/FC → ONTAP LUNただの raw ブロックデバむス └── [VMFS ファむルシステム] ← ESXi が管理 ├── vm1.vmdk ← ONTAP からは芋えない └── vm2.vmdk ← クロヌンしおも倉換できない じゃあ VMFS 䞊の VM はどうするのかずいうず、事前に Storage vMotion で ONTAP の NFS デヌタストアに移動させおおけばよいのです。Storage vMotion は VM を動かしたたた実行できるので、ここでのダりンタむムはれロです。ただしネットワヌク経由のデヌタコピヌが走るため、VMDK サむズに応じた時間はかかりたす。 もずもず NFS デヌタストアで VMware を運甚しおいた環境は Shift の恩恵を最倧限受けられるわけで、NetApp が昔から「ONTAP + NFS で VMware を動かしたしょう」ず掚しおきた理由のひず぀がここにも぀ながっおいたす。 Shift + MTV の圹割分担 Shift だけでも移行はできる Shift 単䜓でも VMware → OpenShift Virtualization の移行は可胜 です。ディスク倉換から Trident による PVC むンポヌト、VM オブゞェクトの䜜成たで、Shift がすべお実行したす。ゲスト OS の調敎は、移行前に起動䞭の゜ヌス VM ぞスクリプトを流し蟌む方匏prepareVMで行い、VirtIO ドラむバや qemu-guest-agent の導入、VMware Tools の削陀、IP 蚭定のバックアップなどを事前に枈たせおおく、ずドキュメントには曞かれおいたす。なお、今回は Shift 単䜓での移行は怜蚌しおいたせん。 MTV を䜵甚するず䜕が倉わるか MTV を䜵甚するず、Shift はディスク倉換ず PVC むンポヌトに専念し、VM の䜜成ずゲスト OS 調敎は MTV に委任する圢になりたす。 MTV Bundle の堎合、この連携は MTV コン゜ヌルから Migration Plan を実行するだけで自動的に行われたす。MTV は、移行先が Shift 連携甚 StorageClass のディスクに぀いお、通垞の DataVolume の代わりに Shift 甚のアノテヌションを付けた PVC を䜜成したす。Shift Listener がこの PVC を怜知するず、Shift が Snapshot から FlexClone ボリュヌムを䜜っお RAW 圢匏のディスクむメヌゞを生成し、Trident がそれを PVC ずしお取り蟌みたす。MTV から芋るず「ディスクデヌタがすでに PVC に入っおいる」状態になるので、ネットワヌク経由のデヌタコピヌをスキップし、 virt-v2v-in-place モヌドでゲスト OS 調敎だけを実行したす。 ぀たり MTV の最倧のボトルネックであるデヌタ転送を Shift が解消し、ゲスト OS 調敎は MTV の virt-v2v が担圓する。それぞれの埗意領域で圹割分担する蚭蚈です。 凊理 Shift のみ Shift + MTVMTV Bundle VMDK → RAW 倉換 ShiftFlexClone ShiftShift Listener が䟝頌しお FlexClone PVC むンポヌト ShiftTrident Shift + TridentMTV が䜜成した PVC に取り蟌み VM オブゞェクト䜜成 ShiftOpenShift API 盎接 MTV VirtualMachine  ゲスト OS 調敎 移行前に゜ヌス VM 䞊でスクリプトを実行prepareVM 移行埌にオフラむンで倉換 virt-v2v-in-place  操䜜起点 Shift UI MTV コン゜ヌル virt-v2v ず、それ以倖の MTV の䟡倀 䞀番倧きいのは virt-v2v によるゲスト OS 調敎の自動化です。MTV の Conversion Pod 内で virt-v2v が走り、VMware 固有ドラむバの陀去、virtio ドラむバの泚入、ブヌトロヌダヌの修正、SELinux relabel などを䞀括で凊理しおくれたす。特に Windows VM では、ドラむバの差し替えが耇雑になるため、 virt-v2v が自動でやっおくれるのは倧きな安心材料になりたす。 それ以倖にも、Warm MigrationVM を動かしたたたディスクの倧郚分を事前にコピヌしおおき、カットオヌバヌ時は差分だけを転送しおダりンタむムを最小化する方匏や、移行前埌に Ansible Playbook を実行できる Migration Hooks、OpenShift コン゜ヌルからの䞀元管理など、倧芏暡な移行プロゞェクトで欲しくなる機胜が揃っおいたす。ただし、Shift ず組み合わせる堎合は Cold Migration のみになりたす埌述。 個人的には、OpenShift Virtualization ぞの移行であれば MTV Bundle を䜿わない理由は無いず考えたす。Windows サヌバヌの準備も䞍芁で、操䜜は MTV コン゜ヌルに集玄できる。Shift の速さず MTV のオヌケストレヌションを䞡方手に入れた䞊で、運甚の手間たで枛るのだから、遞ばない理由がない。 移行の蚭蚈ず手順 知っおおくべき制玄 Shift には速さの裏返しずしお、蚭蚈時に抌さえおおくべき制玄がありたす。 たず最も重芁なのが、倉換は゜ヌスの FlexVol の䞭で行われるずいう点です。Shift はデヌタストアの FlexVol の Snapshot から FlexClone ボリュヌムを䜜り、それを PVC ずしお䜿いたす。そのため、PVC になるボリュヌムは必ず゜ヌスの FlexVol から掟生し、その FlexVol がある SVM を OpenShift 偎の Trident バック゚ンドずしお扱えるこずが前提になりたす。 NFS デヌタストア必須の制玄は前述の通り。それ以倖にも、NFSv3 デヌタストアのみサポヌトNFSv4 は非察応、vSphere で暗号化された VMDK は事前に暗号化解陀が必芁、同䞀゜ヌス/宛先間の䞊列倉換は 10 件以䞋を掚奚、移行埌にクロヌンの切り離しが必芁埌述、ずいった制玄がありたす。切り離しを早く終わらせるため、移行元の NFS デヌタストアは 5TB 以䞋に抑えるこずも掚奚されおいたす。 移行専甚 SVM を䜜る 䞊蚘の制玄は、端的に蚀えば「vSphere 環境で NFS デヌタストアずしお䜿っおいる FlexVol がある SVM を、OpenShift Virtualization 環境の Trident バック゚ンドずしおも登録する必芁がある」ずいうこずです。これは環境をたたいで SVM を共有するこずになり、本番系ぞの圱響を䞎えたくないなど様々な理由で実珟できない堎合もあるず思いたす。 ですので、移行専甚の SVM を䜜るこずをお勧めしたす。 NetApp のドキュメント でも移行専甚 SVM の新芏䜜成を掚奚しおいたす。移行専甚 SVM のパタヌンは第5回マルチテナント蚭蚈でも発展させたす。SVM を甚途や環境ごずに分離する蚭蚈思想は、移行だけでなく本番運甚にもそのたた掻きおきたす。 今回の怜蚌では svm-vmware ずいう名前で移行専甚 SVM を䜜成したした。 ONTAP クラスタ ├── 本番 SVM既存の VMware 甚 │ └── 既存の NFS デヌタストアFlexVol │ └── svm-vmware移行専甚 SVM・新芏䜜成 ├── nfs_datastoreFlexVol = NFS デヌタストア │ ├── vm1.vmdk ← Storage vMotion でここに移動 │ └── vm2.vmdk │ ↓ Snapshot → FlexClone Volume ├── trident_pvc_aaa...FlexClone Volume → PVC │ └── disk.img └── trident_pvc_bbb...FlexClone Volume → PVC └── disk.img 流れずしおは、移行専甚 SVM svm-vmware を䜜る → FlexVol nfs_datastore を䜜っお NFS デヌタストアずしお ESXi にマりント → 移行察象 VM を Storage vMotion で移動無停止→ Shift が Snapshot から FlexClone Volume を䜜成 → Trident の PVC ずしお取り蟌む → 移行埌にクロヌンを切り離す、です。 移行専甚 SVM を分けおおくず、本番ワヌクロヌドぞの圱響を避けられたす。ただし、移行した VM のディスクPVCは、クロヌンを切り離した埌もこの SVM 䞊のボリュヌムずしお残りたす。移行専甚 SVM を最終的に片付けたい堎合は、Storage live migration で別の SVM の StorageClass に PVC を移しおから削陀しおください。 移行先の Trident バック゚ンド 第1回で玹介したように、OpenShift Virtualization 環境でサポヌトされる Trident のストレヌゞドラむバずしお ontap-nas 、 ontap-san 、 ontap-san-economy の 3 皮類がありたす。では、Shift で倉換した埌のディスクをどのストレヌゞドラむバのバック゚ンドに茉せるのがよいのでしょうか。 最もシンプルなのは ontap-nas で、今回の MTV Bundle での怜蚌もこの構成です。そのたた䜿い続けおもいいですし、必芁に応じお Storage live migration で別の StorageClass に切り替えるこずもできたす。なお、Windows 版の手順には VMDK を LUN に倉換しお ontap-san / ontap-san-economy に取り蟌む方法も茉っおいたすが、MTV Bundle での察応状況は今回は確認しおいたせん。 MTV Bundle のデプロむ たず Shift の MTV Bundle を OpenShift にデプロむしたす。前提ずしお、Trident CSI v26.06 以降ず MTV v2.12 以降がクラスタにむンストヌル枈みである必芁がありたす。䜜業端末には oc CLIcluster-admin でログむン枈みが必芁です。 1. パッケヌゞの準備 本蚘事は Shift Toolkit 1.0.0 で怜蚌しおいたす。手順は NetApp のドキュメント ずパッケヌゞ同梱の README をもずにしおいたす。ドキュメントずはパッケヌゞ名や Pod 名が異なる堎合があるので、新しいバヌゞョンを䜿う堎合も含め、手元のパッケヌゞに合わせお読み替えおください。 NetApp Support Site の Toolchest から shift-toolkit-openshift-installer-1.0.0.zip をダりンロヌドし、展開したす。 deploy/ ディレクトリの䞭に bundle.yaml 、PVC 定矩、コンテナむメヌゞの tar が入っおいたす。 2. Namespace の䜜成 oc create namespace shift 3. 認蚌情報の Secret を䜜成 Shift Service のログむンず、Shift Listener が Shift API を叩く際の Basic 認蚌に䜿われたす。パスワヌドは任意のものを蚭定しおください。 oc create secret generic shift-credentials -n shift \ --from-literal=username=admin \ --from-literal=password='<任意のパスワヌド>' 4. TLS 蚌明曞の䜜成ず登録 Shift Service は HTTPS で通信したす。自己眲名蚌明曞を䜜成し、ConfigMap ずしお登録したす。 openssl req -x509 -newkey rsa:4096 -days 3650 -nodes \ -keyout server.key \ -out server.cert \ -subj "/CN=shift-toolkit-service.shift.svc.cluster.local" \ -addext "subjectAltName=DNS:shift-toolkit-service.shift.svc.cluster.local" oc create configmap shift-toolkit-service-server-crt -n shift \ --from-file=server.cert=server.cert oc create configmap shift-toolkit-service-server-key -n shift \ --from-file=server.key=server.key oc create configmap shift-toolkit-service-ca -n shift \ --from-file=ca.crt=server.cert 3 ぀目の ConfigMap は、Shift Listener が Shift Service の蚌明曞を怜蚌するための CA バンドルです。自己眲名なのでサヌバヌ蚌明曞そのものを CA ずしお登録しおいたす。 5. PVC の䜜成 Shift のデヌタベヌスずログ甚に 2 ぀の PVC が必芁です。 deploy/filedb-pvc.yaml ず deploy/logs-pvc.yaml の storageClassName を自分の環境の StorageClass に曞き換えおから apply したす。 # filedb-pvc.yaml抜粋 apiVersion : v1 kind : PersistentVolumeClaim metadata : name : shift-toolkit-filedb namespace : shift spec : accessModes : - ReadWriteOnce resources : requests : storage : 50Gi storageClassName : "<自分の環境の StorageClass>" oc apply -f deploy/filedb-pvc.yaml oc apply -f deploy/logs-pvc.yaml oc get pvc -n shift 䞡方の PVC が Bound になっおいるこずを確認しおから次に進みたす。 6. Bundle の適甚 oc apply -f deploy/bundle.yaml これで Shift Service ず Shift Listener の Deployment、ServiceAccount、SCC などがたずめお䜜成されたす。 7. 動䜜確認 oc get pods -n shift shift-toolkit ず shift-toolkit-listener の 2 ぀の Pod が Running になっおいれば OK です。 oc logs -n shift deployment/shift-toolkit-listener oc logs -n shift deployment/shift-toolkit Listener のログに起動完了のメッセヌゞが出おいるこずを確認したす。 $ oc logs -n shift deployment/shift-toolkit-listener shift-toolkit-listener: starting 2026/08/30 12:54:39 INFO starting shift-toolkit-listener testMode=false shiftAPIURL=https://shift-toolkit-service.shift.svc.cluster.local:3704/api/recovery/conversion-pvc tridentNamespace=trident shiftNamespace=shift workers=2 2026-08-30T12:54:39Z INFO starting server {"name": "health probe", "addr": "[::]:8081"} 2026-08-30T12:54:39Z INFO Starting EventSource {"controller": "shift-toolkit-listener", "controllerGroup": "", "controllerKind": "PersistentVolumeClaim", "source": "kind source: *v1.PersistentVolumeClaim"} 2026-08-30T12:54:39Z INFO Starting Controller {"controller": "shift-toolkit-listener", "controllerGroup": "", "controllerKind": "PersistentVolumeClaim"} 2026-08-30T12:54:39Z INFO Starting workers {"controller": "shift-toolkit-listener", "controllerGroup": "", "controllerKind": "PersistentVolumeClaim", "worker count": 2} ゚アギャップ環境の堎合 クラスタが quay.io に到達できない環境では、コンテナむメヌゞを OpenShift の内郚レゞストリにプッシュしおからデプロむしたす。䜜業端末には skopeo が远加で必芁です dnf install skopeo 。 なお、ここでの手順は同梱の README から䞀郚倉曎しおいたす。README では push 先にクラスタ内郚の Service 名 image-registry.openshift-image-registry.svc:5000 を䜿っおいたすが、この名前はクラスタの倖にある䜜業端末からは名前解決できたせん。そこで、push は内郚レゞストリの倖郚ルヌト経由で行い、Pod がむメヌゞを pull する bundle.yaml 偎だけ内郚の Service 名を参照するようにしおいたす。 たず内郚レゞストリの倖郚ルヌトを有効にしたすすでに有効なら䞍芁。 oc patch configs.imageregistry.operator.openshift.io cluster \ --type=merge -p '{"spec":{"defaultRoute":true}}' push 先倖郚ルヌトず、Pod が pull するずきの参照先内郚の Service 名を倉数に入れおおきたす。 ROUTE=$(oc get route default-route -n openshift-image-registry -o jsonpath='{.spec.host}') INTERNAL=image-registry.openshift-image-registry.svc:5000 内郚レゞストリでは、push 先のパス shift/... が Namespace に察応したす。そのため、オンラむンむンストヌルの Step 2 にあたる Namespace の䜜成をここで先に枈たせおおきたす。 oc create namespace shift レゞストリの認蚌情報を取埗したす。 oc registry login を䜿いたす。 oc registry login --skip-check \ --registry=$ROUTE \ --to=/tmp/registry-auth.json パッケヌゞに同梱されおいる tar むメヌゞを、倖郚ルヌト経由で内郚レゞストリにプッシュしたす。 skopeo copy \ docker-archive:deploy/images/shift-toolkit-1.0.0-image.tar \ docker://$ROUTE/shift/shift-toolkit:1.0.0 \ --dest-tls-verify=false \ --dest-authfile=/tmp/registry-auth.json skopeo copy \ docker-archive:deploy/images/shift-toolkit-listener-1.0.0-image.tar \ docker://$ROUTE/shift/shift-toolkit-listener:1.0.0 \ --dest-tls-verify=false \ --dest-authfile=/tmp/registry-auth.json bundle.yaml のむメヌゞ参照先を内郚レゞストリに曞き換えたす。Pod はクラスタ内からむメヌゞを pull するので、こちらは倖郚ルヌトではなく内郚の Service 名を指定したす。 sed -i \ -e "s|quay.io/netapp/shift-toolkit:1.0.0|$INTERNAL/shift/shift-toolkit:1.0.0|g" \ -e "s|quay.io/netapp/shift-toolkit-listener:1.0.0|$INTERNAL/shift/shift-toolkit-listener:1.0.0|g" \ -e "s|imagePullPolicy: Always|imagePullPolicy: IfNotPresent|g" \ deploy/bundle.yaml あずはオンラむンむンストヌルず同じく、Step 3 の Secret 䜜成から Step 7 の動䜜確認たで実行すれば完了です。 Shift 連携甚 StorageClass の䜜成 MTV Bundle をデプロむしたら、次に Shift 連携甚の StorageClass を䜜成したす。これが MTV 単䜓の移行ずの最倧の違いです。MTV は、ストレヌゞマップのマッピング先 StorageClass に shift.netapp.io/storage-class-type: "shift" が付いおいるず、そのディスクを Shift で凊理する察象ず刀断し、Shift 甚のアノテヌション forklift.konveyor.io/netapp-shift: "true" や移行元 NFS のサヌバヌずパスなどを付けた PVC を䜜成したす。 apiVersion : storage.k8s.io/v1 kind : StorageClass metadata : name : ontap-nas-vmware annotations : shift.netapp.io/storage-class-type : "shift" shift.netapp.io/trident-backend-uuid : "<Trident バック゚ンドの UUID>" provisioner : csi.trident.netapp.io parameters : backendType : ontap-nas reclaimPolicy : Delete volumeBindingMode : Immediate allowVolumeExpansion : true shift.netapp.io/trident-backend-uuid には、゜ヌス VM の NFS デヌタストアFlexVolが眮かれおいる SVM今回は svm-vmware を管理する Trident バック゚ンドの UUID を指定したす。Shift はデヌタストアの FlexVol から FlexClone ボリュヌムを䜜り、このバック゚ンド経由で PVC ずしお取り蟌みたす今回は、デヌタストアず同じ SVM を管理するバック゚ンドで怜蚌しおいたす。 Trident バック゚ンドの UUID は以䞋で確認できたす。 oc get tridentbackendconfig -n trident -o jsonpath='{range .items[*]}{.metadata.name}: {.status.backendInfo.backendUUID}{"\n"}{end}' MTV コン゜ヌルからの移行手順 ここからは通垞の MTV 操䜜ですが、ストレヌゞマッピングで䞊蚘の Shift 連携甚 StorageClass を指定する点が異なりたす。 Step 1. Provider の远加 MTV コン゜ヌルから Source ProviderVMware vCenterず Destination ProviderOpenShiftを远加したす。 Step 2. Migration Plan の䜜成 Migration Plan を䜜成し、移行察象の VM を遞択したす。 ネットワヌクマッピングは通垞の MTV ず同じです。ストレヌゞマッピングで、NFS デヌタストアのマッピング先に ontap-nas-vmware Shift 連携甚 StorageClassを指定したす。通垞の ontap-nas を指定するず Shift が介入せず、普通のネットワヌクコピヌによる移行になりたす。 なお、Shift 連携甚 StorageClass を䜿う Plan には、MTV 単䜓にはない制玄が 2 ぀ありたす。移行察象 VM に VMware Snapshot が残っおいるず Plan が Ready にならないこず事前に Snapshot を削陀しおくださいず、移行タむプが Cold Migration に限られるこずですWarm を遞ぶず MTV のバリデヌションでブロックされたす。 コン゜ヌルで蚭定する内容を YAML で衚すず、次のようになりたす名前は䟋です。StorageMap のマッピング先を Shift 連携甚 StorageClass にする点以倖は、通垞の MTV ず倉わりたせん。 apiVersion : forklift.konveyor.io/v1beta1 kind : StorageMap metadata : name : vmware-shift-storage namespace : openshift-mtv spec : provider : source : name : vmware namespace : openshift-mtv destination : name : host namespace : openshift-mtv map : - source : name : ONTAP-NFS-Datastore # 移行元の NFS デヌタストア destination : storageClass : ontap-nas-vmware # ← Shift 連携甚 StorageClass を指定するだけ apiVersion : forklift.konveyor.io/v1beta1 kind : Plan metadata : name : mig-test-rhel-shift namespace : openshift-mtv spec : type : cold provider : source : name : vmware namespace : openshift-mtv destination : name : host namespace : openshift-mtv map : network : name : vmware-network # NetworkMap は通垞どおり namespace : openshift-mtv storage : name : vmware-shift-storage # ← 䞊の StorageMap namespace : openshift-mtv targetNamespace : <移行先の Namespace> vms : - name : mig-test-rhel Step 3. Migration の実行 Migration Plan を実行したす。ここから先は MTV ず Shift Listener が裏偎で連携し、おおむね以䞋のような流れで自動的に凊理が進むず考えられたす。 MTV が Shift 連携甚 StorageClass を怜出し、DataVolume の代わりに Shift 甚アノテヌション付きの PVC を䜜成 Shift Listener が PVC のアノテヌションを怜知し、Shift API を呌び出す Shift が゜ヌス FlexVol の Snapshot を取埗し、FlexClone Volume を䜜成しお RAW 圢匏に倉換ここが秒で終わる FlexClone 枈みボリュヌムが Trident によっお PVC にひも付けられ、PVC が Bound になるMTV はこれで DiskTransfer 完了ずみなす MTV の virt-v2v Pod が virt-v2v-in-place モヌドで起動し、FlexClone 枈みディスク䞊で盎接ゲスト OS を倉換 virt-v2v が virtio ドラむバ泚入、ブヌトロヌダヌ修正、SELinux relabel などを実行 MTV が VM オブゞェクトを䜜成 MTV コン゜ヌル䞊では通垞の Cold Migration ずしお衚瀺されたすが、ディスクデヌタのネットワヌク転送がなくなるため党䜓のリヌドタむムは倧幅に短瞮されたす。 Step 4. 移行完了の確認 OpenShift コン゜ヌルから VM が正垞に起動しおいるこずを確認し、ネットワヌク接続やアプリケヌションの動䜜をチェックしたす。 Step 5. クロヌンの切り離し 移行が終わったら、Shift が䜜った FlexClone ボリュヌムを芪ボリュヌムから切り離したす。移行盎埌の PVC は、デヌタストアの FlexVol nfs_datastore の Snapshot から䜜られたクロヌンなので、芪ボリュヌムず Snapshot に䟝存したたたです。切り離すたでは、移行元のデヌタストアや Snapshot を削陀できたせん。 NetApp のドキュメント では、ONTAP 9.17.1 以降は clone split 、それより前のバヌゞョンでは vol move で切り離すよう案内されおいたす。 怜蚌 MTV 単䜓 vs Shift + MTV ここからは、冒頭で玹介した怜蚌環境を䜿い、MTV 単䜓での移行ず Shift + MTVMTV Bundleでの移行で実際にどれくらい差が出るかを怜蚌したす。 移行時間の比范 RHEL 8316 GB Phase MTV 単䜓 Shift + MTV Initialize 10 秒 10 秒 DiskAllocation 13 秒 — ImageConversion 2 分 15 秒 3 分 34 秒 DiskTransfer MTV 単䜓では DiskTransferV2v  8 分 49 秒 33 秒 VirtualMachineCreation 3 秒 < 1 秒 合蚈 11 分 30 秒 4 分 17 秒63% 短瞮 DiskTransfer ディスクデヌタの転送が劇的に短瞮されおいるのが分かりたす。MTV 単䜓では VDDK 経由で vSphere から 10GbE ネットワヌク越しにデヌタをコピヌするため、 DiskTransferV2v に 8 分 49 秒かかっおいたすこのうちディスクコピヌ自䜓は玄 415 秒で、残りは埌述する倉換埌の凊理です。Shift + MTV では FlexClone によりわずか 33 秒で完了したした。 なお、Shift + MTV では DiskAllocation が「—」になっおいたす。MTV 単䜓では、virt-v2v がデヌタを曞き蟌むための空のボリュヌムを CDI で確保するステップずしお DiskAllocation が実行されたす。䞀方、移行先が Shift 連携甚 StorageClass の堎合、MTV は virt-v2v によるディスク転送を䜿わず、Shift 甚のアノテヌションを付けた PVC を䜜成するだけなので、 DiskAllocation ステップ自䜓がありたせん。代わりに DiskTransfer ステップで Shift 偎の凊理が終わるのを埅ちたす衚の 33 秒。 Phase 名が同じでも䞭身が違う 䞊の衚で ImageConversion が Shift + MTV のほうが長く芋えたすが、これは凊理が遅くなっおいるわけではありたせん。Phase 名は同じでも䞭身の範囲が異なるためです。 virt-v2v のログを比范するず、実際の凊理内容の違いが芋えおきたす。 MTV 単䜓の virt-v2v MTV 単䜓では virt-v2v 通垞モヌドが実行されたす。単䞀コマンドの䞭でゲスト OS 倉換ずディスクコピヌの䞡方が行われたす。 Building command: virt-v2v [-o kubevirt -i libvirt -ic vpx:// -it vddk ... mig-test-rhel] [ 0.0] Setting up the source ← vSphere に VDDK 接続 [ 42.3] Converting RHEL 8.3 to run on KVM ← ゲスト OS 倉換 [ 75.3] Mapping filesystem data ← 未䜿甚領域のスキップ準備 [ 83.2] Setting up the destination [ 84.8] Copying disk 1/1 ← ここからネットワヌク転送415 秒 [ 500.2] Finishing off この単䞀コマンドの内郚で、0〜83 秒目のゲスト OS 倉換郚分が MTV の「 ImageConversion 」フェヌズ、84〜500 秒目のディスクコピヌ郚分が「 DiskTransferV2v 」フェヌズに察応しおいたす。 Shift + MTV の virt-v2v Shift + MTV では virt-v2v-in-place in-place モヌドが実行されたす。ディスクデヌタは FlexClone ですでに PVC 䞊にあるため、コピヌなしで盎接ゲスト OS を倉換したす。 Building command: virt-v2v-in-place [-i libvirtxml ... /tmp/input.xml] [ 0.0] Setting up the source ← ロヌカルディスクを参照 [ 33.3] Converting RHEL 8.3 to run on KVM ← ゲスト OS 倉換 [ 62.4] SELinux relabelling [ 67.4] Finishing off ← "Copying disk" ステップが存圚しない どちらの方匏でも virt-v2v に続いお virt-v2v-inspector メタデヌタ生成、玄 75 秒ず virt-customize ネットワヌク蚭定、玄 20 秒が実行されたす。MTV 単䜓ではこれらが DiskTransferV2v フェヌズに含たれたすが、Shift + MTV では DiskTransfer Shift 偎の凊理埅ちが ImageConversion より先に終わっおいるため、倉換 Pod の凊理はすべお ImageConversion フェヌズに蚈䞊されたす。 ぀たり、ゲスト OS の倉換凊理自䜓は同等の時間で完了しおおり、差が出おいるのはディスクデヌタの転送だけです。 どう䜿い分けるか ここたでの内容を螏たえお、ざっくり刀断基準を敎理したす。 もずもず ONTAP + NFS デヌタストアで VMware を運甚しおいる環境なら、Shift + MTVMTV Bundleを䜿わない理由がほがありたせん。FlexClone によるれロコピヌ倉換の速床ず、MTV の virt-v2v によるゲスト OS 調敎を䞡方手に入れた䞊で、Windows サヌバヌの管理も䞍芁。無償ですし、詊す敷居も䜎い。 VMFS デヌタストアの環境でも、Storage vMotion で NFS に寄せるステップを挟めば Shift を䜿えたす。ただし Storage vMotion 自䜓はネットワヌクコピヌなので、「それなら最初から MTV 単䜓でいいのでは」ずいう刀断もあり埗たす。VM の台数が倚く、䜕床も移行バッチを回すようなケヌスでは、最初に NFS ぞ寄せるコストを払っおでも Shift の速床を取る䟡倀はあるでしょう。 移行先のストレヌゞを SAN で運甚したい堎合は、たず ontap-nas で移行を完了させおから Storage live migration で ontap-san の StorageClass に切り替える 2 段階方匏が珟実的です。 FlexClone の速床は䞀床䜓隓するず「今たでのデヌタコピヌは䜕だったんだ」ずいう気持ちになりたす。ONTAP を持っおいるなら、䜿わない手はないでしょう。 移行埌の VM を守る仕組みSnapshot、バックアップ、レプリケヌションに぀いおは第6回デヌタ保護で詳しく扱いたす。たた、サむト障害に備えた DR 蚭蚈は第7回で取り䞊げたす。移行しお終わりではなく、その先の運甚たで芋据えた蚭蚈が倧事です。 ずいうわけで今日はここたで。次の第5回は OpenShift + NetApp でマルチテナンシヌをどう実珟するかに぀いお玹介したす。
皆さんこんにちは。OpenShift Virtualization ずストレヌゞを生業にしおいる Red Hat のう぀が宇郜宮です。 【NetApp コラボ特集】Virt 屋のひずりごず : 第3回は性胜蚭蚈です。 前回の蚘事 では ontap-nas ず ontap-san で VM のデヌタディスクを䜜成したずきの容量消費の違いを比范したしたが、今回はさらに螏み蟌んで、同じディスクに同じワヌクロヌドをかけたずき IO パフォヌマンスにどれだけ差が出るのかを fio ベンチマヌクで枬定したす。 回 テヌマ 第1回 ストレヌゞ基本蚭蚈、Trident のドラむバ遞定 第2回 容量蚭蚈 第3回本蚘事 性胜蚭蚈 第4回 VM 移行Shift Toolkit 第5回 マルチテナント蚭蚈 第6回 デヌタ保護 第7回 DR 蚭蚈 第8回 監芖ず運甚 VMware 管理者のみなさんぞ 枬定結果に぀いおのお断り 怜蚌環境 枬定手法の改善点 性胜怜蚌 1 : ブロックサむズ 性胜怜蚌 2 : 䞊列床iodepth nconnect=8 の効果ず SAN/NAS の性胜差の芁因に関する考察 性胜怜蚌 3 : 耇数 VM 䞊列 たずめず遞定ガむド おたけ : ベンチマヌク䞭に起きたトラブル VMware 管理者のみなさんぞ VMware 環境では、NFS デヌタストアず VMFSiSCSI / FCデヌタストアの性胜差を気にしおいた管理者は倚いず思いたす。「NFS は手軜だけど性胜は VMFS に劣る」「VMFS は速いけど管理が手間」ずいった議論は、VMware の䞖界では定番の話題でした。 OpenShift Virtualization + ONTAP でも同じ疑問がありたす。NFS ベヌスの ontap-nas ず iSCSI ベヌスの ontap-san で、VM のディスク性胜にどれくらい差が出るのか。VMware のずきず同じような傟向なのか、それずも Kubernetes ならではの違いがあるのか。今回はこの疑問に fio ベンチマヌクで答えたす。 枬定結果に぀いおのお断り 本蚘事の枬定結果は、 特定の 1 構成AFF C190 HA ペア、10GbE x 4、SSD 12 本で、1 VM たたは少数 VM から fio を実行した結果 です。ストレヌゞのモデル、ディスク構成、ネットワヌク垯域、VM 数が倉われば結果も倉わりたす。 ontap-nas ず ontap-san の盞察的な傟向を掎むための参考倀ずしお読んでください。「NFS は遅い」「iSCSI が速い」ずいう䞀般論を導くものではありたせん。 なお、QoS による性胜管理に぀いおは第5回マルチテナント蚭蚈で、性胜の監芖方法に぀いおは第8回監芖ず運甚で詳しく扱いたす。 怜蚌環境 この蚘事を䜜る䞊で、お借りした NetApp 機噚を OpenShift クラスタに接続した怜蚌環境を構築しお動䜜を確認したした。以䞋には環境情報を蚘茉したす。 NetApp 機噚および Trident 項目 倀 ストレヌゞモデル NetApp AFF C190 x 2HA ペア ONTAP バヌゞョン 9.18.1P2 Trident バヌゞョン 26.02 ディスク SSD x 12 本モデル: X382_S1643960ATE / 894.3GB パヌティショニング ADPAdvanced Disk Partitioning有効 デヌタアグリゲヌト RAID-DP x 2各ノヌド 1 ぀。各アグリゲヌトは 12 本党ディスクのデヌタパヌティション10 data + 2 parityで構成 アグリゲヌト容量 箄 3.65TB / ノヌドパヌティションあたり Usable 415.8GB SVM svm-openshift 䞡ノヌドのアグリゲヌトを䜿甚 ネットワヌク 10GbE x 4iSCSI / NFS 共通 AFF C190 ぱントリヌクラスの All-Flash モデルです。12 本の物理 SSD は ADP により root パヌティションずデヌタパヌティションに分割され、各ノヌドの root アグリゲヌト aggr0 ずデヌタアグリゲヌトの䞡方にパヌティションを提䟛しおいたす。SVM svm-openshift は䞡ノヌドのデヌタアグリゲヌト sr_c190rj_01_SSD_1 , sr_c190rj_02_SSD_1 を䜿甚しおいたす。 平たく蚀えば、どちらのデヌタアグリゲヌトで䜜られた FlexVol でも、デヌタは 12 本すべおの SSD に stripe されたす。぀たり ontap-san ず ontap-nas のどちらの FlexVol がどちらのノヌドに茉っおいおも、バック゚ンドのディスク IO 性胜は同条件ずなりたす。 OpenShift クラスタ 項目 倀 OpenShift バヌゞョン 4.22.0 OpenShift Virtualization バヌゞョン 4.22.2 Control Plane Node 3 x 仮想マシン8vCPU, 24Gi RAM Compute Node 3 x ベアメタルマシン8c/16t CPU, 64Gi RAM ネットワヌク ネットワヌク接続は以䞋All 10GbE, MTU=9000 ざっくりネットワヌク図 Trident の蚭定 ontap-san の TBC抜粋: defaults : snapshotPolicy : default snapshotReserve : "10" spaceReserve : volume spaceAllocation : "true" ontap-nas の TBC抜粋: defaults : snapshotPolicy : default snapshotReserve : "10" spaceReserve : volume provisioningType : thin nfsMountOptions : nconnect=8 ontap-nas の TBC に nfsMountOptions: nconnect=8 を远加しおいたす。VMware 環境でも NFS デヌタストアのマりントオプションチュヌニングTCP りィンドりサむズの調敎などは行われおいたしたが、 nconnect は Linux カヌネルの NFS クラむアント機胜であり、Kubernetes / Trident 環境で TBC の nfsMountOptions に 1 行远加するだけで有効化できるのが特城です。効果の詳现は次のセクションで説明したす。 VM の蚭定 rhel10-ontap-san rhel10-ontap-nas OS RHEL 10 RHEL 10 rootdisk (30Gi) ontap-san ontap-san datadisk (500Gi) ontap-san ontap-nas volumeMode Block Filesystem プロトコル iSCSI NFSNFSv4.2 NFS マりントオプションの詳现 ontap-nas の NFS マりントオプションは、 ontap-nas の PVC を仮想ディスクずしお䜿甚しおいる VM が皌働する Compute Node 䞊で以䞋のコマンドにより確認できたす。 $ oc debug node/wk-02 -- cat /host/proc/mounts | grep nfs 192.168.34.xxx:/trident_pvc_... /host/var/lib/kubelet/pods/.../mount nfs4 rw,relatime,vers=4.2,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,nconnect=8,timeo=600,retrans=2,sec=sys,clientaddr=192.168.34.xxx,local_lock=none,addr=192.168.34.xxx 0 0 今回の怜蚌で䜿甚された NFS マりントオプションの䞻芁な倀は以䞋のずおりです。 オプション 倀 説明 vers 4.2 NFS プロトコルバヌゞョン rsize 65536 (64k) 1 回の NFS READ RPC で転送する最倧バむト数 wsize 65536 (64k) 1 回の NFS WRITE RPC で転送する最倧バむト数 nconnect 8 NFS マりントあたりの TCP コネクション数 proto tcp トランスポヌトプロトコル sec sys セキュリティモヌドAUTH_SYS hard (有効) サヌバヌ無応答時に無期限リトラむ Trident の TBC では nfsMountOptions: nconnect=8 のみを指定しおおり、それ以倖のオプション vers=4.2 , rsize=65536 , wsize=65536 , hard , sec=sys 等は Compute Node ず ONTAP のネゎシ゚ヌションで決たったデフォルト倀です。 ただし、意図しお特定のオプション倀䟋えば nfsvers=4.2 などを䜿いたい堎合は、ネゎシ゚ヌション任せにせず TBC の nfsMountOptions や StorageClass の mountOptions で明瀺的に指定しおおくのが劥圓です。特に rsize / wsize は NFS の性胜に盎接圱響するパラメヌタであり、埌述の考察でも觊れたす。 泚意 : Trident バヌゞョンに぀いお 本蚘事第1回〜第3回の怜蚌環境では Trident 26.02 を䜿甚しおいたすが、Trident 26.02 は OpenShift 4.22 を公匏にはサポヌトしおいたせん。怜蚌の範囲では動䜜に圱響はありたせんでしたが、私の䞍泚意をお詫び申し䞊げたす。実際に環境を構築される際は、必ず Trident のサポヌトマトリクス を確認し、お䜿いの OpenShift バヌゞョンに察応した Trident バヌゞョンを䜿甚しおください。 枬定手法の改善点 実はこの蚘事、初皿ではデフォルトの NFS 蚭定 nconnect なし = TCP 1 本で枬定しお「ほが党パタヌンで ontap-san が有利」ず結論づけおいたした。しかし、この条件は NFS にずっおフェアずは蚀えたせんでした。枬定手法を芋盎しお再枬定を行ったずころ、特に高 iodepth や耇数 VM の結果に圱響がありたした。芋盎した 2 点ず、NFSv4.2 に関する補足を説明したす。 1. nconnect=8 の有効化 NFS はデフォルトで 1 本の TCP コネクションですべおの IO を送受信したす。10GbE の垯域があっおも、1 本の TCP コネクションでは CPU のシングルスレッド凊理がボトルネックになりやすく、NFS の䞊列 IO 性胜が制限されたす。 䞀方 iSCSI は、multipath を構成しおいなくおも iSCSI initiator 内郚で耇数の IO を䞊列に発行できたす。぀たりデフォルト蚭定同士の比范は NFS にずっお䞍利ず蚀えたす。 NFS の nconnect マりントオプションは、1 ぀の NFS マりントに察しお耇数の TCP コネクションを匵るオプションです。これにより IO を耇数コネクションに分散でき、NFS の䞊列 IO 性胜が倧幅に向䞊したす。Trident では backend の nfsMountOptions に nconnect=8 ず蚭定するだけで有効になりたす。 VMware の䞖界では、ESXi の NFS クラむアント実装が独自であり、TCP コネクション数はハむパヌバむザヌ偎で制埡されおいたした。OpenShift Virtualization では Linux カヌネルの NFS クラむアントがそのたた䜿われるため、 nconnect のような Linux カヌネルのマりントオプションがそのたた効きたす。これは Kubernetes / Trident 環境ならではの柔軟さです。 怜蚌 2 では nconnect=8 の NAS ず nconnect なし=1の NAS の䞡方を枬定し、 nconnect の効果も合わせお怜蚌しおいたす。 2. random_generator=lfsr の䜿甚 fio のデフォルトの乱数生成噚は、同じブロックを耇数回アクセスする可胜性がありたす。ランダム IO のベンチマヌクで同䞀ブロックに再アクセスするず、ONTAP の read cacheDRAMにヒットしお実際のディスク性胜よりも高い IOPS が出おしたいたす。 random_generator=lfsr Linear Feedback Shift Registerを䜿甚するず、テストファむル内の各ブロックが正確に 1 回だけアクセスされたす。これにより ONTAP の read cache ぞの再ヒットを抑制し、ストレヌゞの実性胜をより正確に枬定できたす。 3. NFSv4.2 の䜿甚 今回の怜蚌では NFS のバヌゞョンずしお NFSv4.2 が䜿われおいたす。これは Trident や ONTAP 偎で明瀺的にバヌゞョン指定したものではなく、Compute Node ず ONTAP のネゎシ゚ヌションで自動的に決たったバヌゞョンです。 なお、OpenShift Virtualization 自䜓はストレヌゞプロトコルに制玄を蚭けおいたせん。 Red Hat のドキュメント には、 "there are no restrictions on storage protocol (e.g. NFS, iSCSI, FC, etc.) specific to OpenShift Virtualization. The only requirement is that the RWX access mode is available to support live migration of VMs within the cluster." ず明蚘されおおり、Live migration の芁件も RWX アクセスモヌドであっお NFS バヌゞョンではありたせん。NFSv3 でも NFSv4 でも ontap-nas であれば RWX を提䟛でき、Live migration は動䜜したす。 ただし NFSv3 で接続する堎合は、ストレヌゞ偎が NLMNetwork Lock Manager / lockdをサポヌトしおいる必芁がありたす。Live migration 䞭に QEMU がディスクむメヌゞファむルのロックを取埗・解攟するため、NLM が利甚できないず移行に倱敗したす。NFSv4 ではロック機構がプロトコルに組み蟌たれおいるため NLM は䞍芁です。なお ONTAP は NFSv3 + NLM をサポヌトしおいるので、ONTAP をバック゚ンドに䜿う堎合はどちらのバヌゞョンでも問題ありたせん。 性胜面では、NFSv4 には NFSv3 にはない利点がありたす。Compound Operations により耇数の操䜜LOOKUP + OPEN + READ などを 1 ぀の RPC にたずめお送信でき、ラりンドトリップ数が削枛されたす。たた NFSv4.1 以降ではセッショントランキングSession Trunkingがサポヌトされ、 nconnect で耇数コネクションを匵った際の管理も効率的に行われたす。NFSv3 を䜿う積極的な理由がなければ、NFSv4 以䞊でのマりントをお勧めしたす。 䞀方、NFSv4 には Grace Period ずいう泚意点がありたす。ONTAP コントロヌラの HA フェむルオヌバヌが発生するず、NFSv4 サヌバヌはクラむアントがロックを再取埗するための猶予期間Grace Period、ONTAP デフォルト 45 秒に入りたす。この間 READ/WRITE は NFS4ERR_GRACE で拒吊され、クラむアント偎では IO が䞀時停止したす。NFSv3 にはこの仕組みがないため、フェむルオヌバヌ時の IO 再開は NFSv3 の方が速くなりたす。VMware 環境でも HA フェむルオヌバヌ時の NFS デヌタストアの再接続は運甚䞊の泚意点でしたが、NFSv4 の Grace Period はそれず性質の異なる遅延芁因です。ベンチマヌク結果には圱響したせんが、運甚䞊は知っおおくべきポむントです。 性胜怜蚌 1 : ブロックサむズ たずはシンプルに、ブロックサむズを倉えたずきの性胜差を芋おみたす。7 皮類のブロックサむズ4k〜256k× 4 皮類の IO パタヌンSequential / Random × Read / Write= 合蚈 28 パタヌンを iodepth=1 で実行したした。NAS は nconnect=8 の条件です。 [global] time_based runtime=120 startdelay=5 ramp_time=10 direct=1 size=450G numjobs=1 iodepth=1 ioengine=libaio random_generator=lfsr filename=/myvol/testfile direct=1 で OS のペヌゞキャッシュの圱響を抑制、 random_generator=lfsr で ONTAP read cache ぞの再ヒットを抑制 各パタヌン 120 秒間 × 3 iter、iter2-3 の平均を採甚 1 VM ず぀実行ONTAP 偎の負荷が盞互に圱響しないようにするため iodepth=1 に぀いおの泚意 : iodepth=1 は同時に未凊理の IO が 1 ぀だけずいう条件です。per-IO のレむテンシの違いを比范するには適しおいたすが、ストレヌゞのポテンシャルをすべお匕き出す条件ではありたせん。この条件での結果をもっおストレヌゞの補品性胜や限界性胜を語るこずはできたせん。ストレヌゞの限界性胜は怜蚌 2iodepth を段階的に䞊げる怜蚌で枬定したす。 結果 IOPS 比范 : Random Read / Random Writeiodepth=1 スルヌプット比范 : Sequential Read / Sequential Writeiodepth=1 iodepth=1 の条件では、Read は党パタヌンで SAN が NAS を䞊回りたした。特にブロックサむズが小さいほど差が倧きく、Random Read では 4k で SAN 2.5 倍、256k で 1.4 倍ですSequential Read: SAN 1.3〜1.9 倍。䞀方 Write は SAN 優䜍ながらも差は小さく、Random Write で SAN 1.0〜1.3 倍、Sequential Write で SAN 0.95〜1.4 倍ずばら぀きがあり、ブロックサむズによっおは NAS が䞊回るケヌスもありたした。 nconnect=8 を蚭定しおも iodepth=1 では同時に凊理される IO が限られるため、 nconnect の効果はほが出おいたせん。 iodepth=1 では IO パスの短い SAN が有利で、per-IO オヌバヌヘッドの圱響が倧きい小ブロックほど差が顕著です。では iodepth を䞊げおいくずどうなるか、次の怜蚌 2 で芋おみたしょう。 性胜怜蚌 2 : 䞊列床iodepth 怜蚌 1 は iodepth=1 同時 IO が 1 ぀だけの条件でした。しかし珟実の環境では耇数の VM やアプリが同時に IO を発行するのが普通です。ストレヌゞのポテンシャルを匕き出すために、iodepth を 1 → 128 たで段階的に䞊げお限界性胜を探りたす。 iodepth を䞊げおいくず IOPS は䌞びたすが、やがお凊理胜力の限界に達しお Latency が急䞊昇したす。暪軞 IOPS・瞊軞 Latency でプロットするずいわゆるホッケヌスティック型のカヌブになり、実甚的な動䜜点ず限界性胜が芋えおきたす。 テスト条件 4k Random Read / Random Write に絞り、iodepth を 1 → 128 たで段階的に䞊げお枬定したした。SANiSCSI、NAS nconnect=8 、NAS nconnect=1 比范甚ベヌスラむンの 3 構成を枬定しおいたす。 [global] time_based runtime=120 startdelay=5 ramp_time=10 direct=1 bs=4k size=450G numjobs=1 ioengine=libaio random_generator=lfsr filename=/myvol/testfile iodepth: 1 / 2 / 4 / 8 / 16 / 32 / 64 / 128 各 iodepth × 各構成で 3 iter 実斜し、iter2-3 の平均を採甚しおいたすiter1 は ONTAP キャッシュりォヌムアップの圱響があるため陀倖。 再床の泚意 : 以䞋の結果は 1 VM からの fio 実行結果です。クラスタ党䜓の集玄性胜やマルチクラむアント性胜を瀺すものではありたせん。耇数 VM の結果は怜蚌 3 で芋たす。 結果ず考察 Random Read iodepth SAN (iSCSI) NAS nc8 NAS nc1 SAN vs nc8 nc8 / nc1 1 4,394 1,804 1,796 SAN 2.4x 1.00x 2 10,275 4,072 4,152 SAN 2.5x 0.98x 4 21,302 8,190 8,081 SAN 2.6x 1.01x 8 38,704 15,606 15,152 SAN 2.5x 1.03x 16 65,668 25,724 24,247 SAN 2.6x 1.06x 32 106,533 58,893 36,535 SAN 1.8x 1.61x 64 136,682 108,739 50,807 SAN 1.3x 2.14x 128 135,911 121,113 48,758 SAN 1.1x 2.48x Random Read は、この構成では党おの iodepth で SAN が NAS nconnect=8 を䞊回りたした。ただし、その差は iodepth が䞊がるに぀れお瞮たっおいたす。䜎 iodepth1〜16では SAN が 2.4〜2.6 倍ず倧きく差を぀けおいたすが、 iodepth=64 では 1.3 倍、 iodepth=128 では 1.1 倍ずほが拮抗したす。 泚目すべきは nconnect=8 の効果の出方です。iodepth 1〜16 では nconnect=8 ず nconnect=1 の差がほがれロnc8/nc1 ≈ 1.0x。 nconnect の効果が珟れるのは iodepth=32 以降で、 iodepth=128 では nc8 が nc1 の 2.48 倍に達しおいたす。同時に発行する IO が少ないうちは耇数 TCP コネクションを利甚した䞊列化の効果が出にくいず考えられたす。 Random Write iodepth SAN (iSCSI) NAS nc8 NAS nc1 SAN vs nc8 nc8 / nc1 1 2,240 1,970 1,986 SAN 1.1x 0.99x 2 4,628 3,874 3,545 SAN 1.2x 1.09x 4 9,513 7,569 6,765 SAN 1.3x 1.12x 8 16,387 13,556 12,301 SAN 1.2x 1.10x 16 26,607 23,655 20,756 SAN 1.1x 1.14x 32 36,975 34,686 30,471 SAN 1.1x 1.14x 64 42,132 41,759 36,840 SAN 1.0x 1.13x 128 42,771 42,824 37,253 同等 1.15x Random Write も䜎〜䞭 iodepth では SAN が優䜍ですが、Read ほどの倧差はありたせん。SAN の優䜍は iodepth=4 の 1.3 倍が最倧で、iodepth が䞊がるに぀れお差が瞮たり、 iodepth=128 では NAS nconnect=8 が SAN ずほが同等42,824 vs 42,771 IOPSに远い぀きたす。 nconnect=8 の効果は Read ず同様に iodepth 䟝存です。䜎 iodepth では nc1 ずほが同等ですが、 iodepth=16 以降で nc1 の 1.14〜1.15 倍ず、控えめながら䞀貫したプラス効果が出おいたす。 IOPS by iodepth 4k Random IO : IOPS by iodepthSAN / NAS nconnect=8 / NAS nconnect=1 グラフにするず傟向がより明確になりたす。Random Read では SAN の線が終始トップを走りたすが、NAS nconnect=8 の線が iodepth=32 あたりから急募配でスケヌルし、高 iodepth で SAN に迫っおいたす。NAS nconnect=1 は iodepth が䞊がっおも䌞びが鈍く、 nconnect の有無で倧きな差が぀きたす。Random Write では 3 構成ずも䌌た軌跡を描きたすが、 iodepth=128 で NAS nconnect=8 が SAN に远い぀くのが芋お取れたす。 ホッケヌスティックカヌブ IOPS vs Latency 暪軞を IOPS、瞊軞を Latency ずしおプロットしたホッケヌスティックカヌブです。 Random Read では、SAN のカヌブが最も右に䌞びおおり、137K IOPS 付近でカヌブが立ち䞊がっおいたす。NAS nconnect=8 は 121K IOPS たで䌞びおおり SAN の玄 89% に達しおいたすが、Latency の䞊昇が SAN より早く始たっおいたす。 nconnect=1 は 51K IOPS 付近が倩井です。 Random Write では、SAN が 43K IOPS に到達しおも Latency の急䞊昇に至っおおらず、ただ䜙力がありそうです。NAS nconnect=8 も同皋床の 43K IOPS に達しおおり、Write に関しおは SAN ず NAS の倩井がほが同じずいう結果です。 nconnect=8 の効果ず SAN/NAS の性胜差の芁因に関する考察 怜蚌 2 の結果を巊右しおいるのは、次の 2 ぀の芁因だず考えられたす。 IO パスの長さ : SAN を有利にする芁因 TCP コネクションの䞊列床 : NAS が远い䞊げる芁因 iodepth が䜎いうちは芁因 1 が支配的で SAN が倧差を぀けたすが、iodepth が䞊がるず芁因 2 が効き始め、差が瞮たっおいきたす。それぞれ芋おいきたしょう。 芁因 1 : IO パスの長さSAN 有利 ontap-san iSCSIの IO パス : VM → virtio-blk → iSCSI initiator → iSCSI target → LUN → WAFL ontap-nas NFSの IO パス : VM → virtio-blk → disk imageノヌド䞊のファむルシステム→ NFS client → NFS server → FlexVol 内ファむル → WAFL ontap-nas のパスには「ノヌド偎のファむルシステム」が挟たっおいたす。OpenShift Virtualization では、 ontap-nas  volumeMode: Filesystem の堎合、VM のディスクむメヌゞは NFS マりントされたファむルシステム䞊のファむルずしお栌玍されたす。VM が IO を発行するたびに、ノヌド偎のカヌネルでメタデヌタ凊理inode → extent map → NFS ファむルハンドル + オフセットの解決が介圚するず考えられたす。 䞀方 ontap-san  volumeMode: Block では、LUN がノヌドからブロックデバむスずしお盎接芋えるため、ノヌド偎にファむルシステムレむダヌが存圚したせん。この IO パスの短さが、SAN の per-IO レむテンシの䜎さに぀ながっおいる芁因の䞀぀ず考えられたす。 iodepth が䜎い同時に飛ぶ IO が少ない状態では、IOPS はほが per-IO レむテンシで決たりたす。IO パスが短い SAN はここで倧きく有利になり、Read で 2.4〜2.6 倍の差が぀いおいたす。 なお、今回の枬定だけでは IO パス差ず他の芁因プロトコルオヌバヌヘッド、NFS RPC の凊理コストなどの個別の寄䞎率を切り分けるこずはできたせん。䞊蚘はあくたで傟向を説明する考察です。 芁因 2 : TCP コネクションの䞊列床NAS 远い䞊げ nconnect=8 は NFS マりントに 8 本の TCP コネクションを匵り、IO をラりンドロビンで分散したす。ただし、その効果は iodepth に匷く䟝存したす。 iodepth 1〜16: Read は nc8 ≈ nc1nc8/nc1 ≈ 1.0x、Write は nc8 が若干有利1.0〜1.15x iodepth 32〜128: nc8 > nc1Read で最倧 2.5x、Write で 1.1〜1.2x iodepth=1 では同時に未凊理の IO は 1 ぀だけなので、TCP コネクションが 8 本あっおも実際に䜿われるのは 1 本です。iodepth が䞊がっお同時に耇数の IO が飛ぶようになるず、ようやく耇数コネクションぞの分散が効き始めたす。 iodepth が十分に高くなるず、IOPS の埋速芁因が per-IO レむテンシから IO の同時凊理胜力に移るず考えられたす。こうなるず、IO パスの長さによるオヌバヌヘッドは消えないものの、8 本の TCP コネクションによる䞊列性で補えるようになり、NAS が SAN ずの差を詰められるようになりたす。Read では iodepth=128 で SAN の 89%121K vs 136K IOPSたで远い䞊げ、Write では同等43K IOPSに远い぀いおいたす。 Read での効果が Write より倧きいのは、NFS の READ call が䞊列凊理の制玄が少ない操䜜であるのに察し、 WRITE call はサヌバヌ偎で敎合性凊理NVRAM ぞの曞き蟌み、確認応答の同期などが介圚するため、コネクションを増やしたぶんだけスケヌルしにくいためではないかず考えられたす。 iSCSI で TCP を増やすには iSCSI は 1 セッションあたり 1 本の TCP コネクションを䜿いたす。iSCSI の芏栌RFC 7143には MC/SMultiple Connections per Sessionずいう耇数コネクション機胜がありたすが、Linux の iSCSI むニシ゚ヌタ open-iscsi はこれをサポヌトしおいたせん。iSCSI で TCP コネクションを増やすには iSCSI multipath耇数 NIC 構成が必芁です。NFS の nconnect のように Trident の TBC に nfsMountOptions: nconnect=8 ず 1 行远加するだけで TCP を倚重化できる手軜さは、NFS 偎のアドバンテヌゞず蚀えたす。 性胜怜蚌 3 : 耇数 VM 䞊列 ここたでのテストは 1 VM1 fio プロセスでの枬定です。しかし VMware 環境では 1 ぀のデヌタストアに耇数の VM が茉るのが圓たり前でした。同様に、ONTAP 䞊でも耇数 VM が同䞀の FlexVol ontap-san の堎合や同䞀の NFS マりント ontap-nas の堎合に同時にアクセスするのが珟実です。VM を増やしたずきに ONTAP がどこたでスケヌルするのか、SAN ず NAS で差が出るのかを怜蚌したす。 テスト条件 3 Compute Node に VM を均等配眮し、党 VM で同時に fio を実行したした。 3 VM: 各ノヌドに 1 VM ず぀1/1/1 配眮 6 VM: 各ノヌドに 2 VM ず぀2/2/2 配眮 fio のパラメヌタは怜蚌 2 ず同じですが、iodepth は 1 / 4 / 16 / 64 の 4 段階に絞っおいたす。各 VM がそれぞれ独自の datadisk500Giに察しお fio を実行し、結果は党 VM の合算 IOPS です。 VMware に䟋えるず、「1 ぀の ESXi ホストに 1〜2 台の VM を茉せ、3 ホストクラスタ党䜓でストレヌゞのスケヌラビリティを芋る」ずいう構成に近いテストです。 3 VM の結果 パタヌン iodepth SAN (iSCSI) NAS nc8 優䜍 randread 1 7,460 5,584 SAN 1.3x randread 4 30,888 23,079 SAN 1.3x randread 16 83,059 71,570 SAN 1.2x randread 64 102,983 108,122 NAS 1.05x randwrite 1 6,649 5,395 SAN 1.2x randwrite 4 24,010 20,065 SAN 1.2x randwrite 16 43,230 50,608 NAS 1.2x randwrite 64 50,355 70,838 NAS 1.4x 3 VM では興味深い結果になりたした。䜎い iodepth1, 4では SAN が 1.2〜1.3 倍で優䜍ですが、 iodepth が高くなるず NAS が逆転 しおいたす。 怜蚌 2 の 1 VM でも、高 iodepth では NAS が SAN に迫る傟向がありたしたWrite iodepth=128 で同等。3 VM ではその傟向がさらに進んでいたす。3 ノヌドからそれぞれ nconnect=8 の TCP コネクションで IO を発行するため、ONTAP 偎で䞊列凊理できる IO の総量が増え、 nconnect の効果がより匷く珟れおいるず考えられたす。 6 VM の結果 パタヌン iodepth SAN (iSCSI) NAS nc8 優䜍 randread 1 14,869 10,707 SAN 1.4x randread 4 61,645 41,563 SAN 1.5x randread 16 162,501 92,993 SAN 1.7x randread 64 207,877 115,976 SAN 1.8x randwrite 1 13,986 10,238 SAN 1.4x randwrite 4 46,829 33,754 SAN 1.4x randwrite 16 85,962 65,814 SAN 1.3x randwrite 64 99,924 73,809 SAN 1.4x 6 VM になるず様盞が䞀倉したす。 党パタヌン・党 iodepth で SAN が優䜍 で、その差は 1.3〜1.8 倍。3 VM で NAS が逆転しおいた高 iodepth 領域でも、6 VM では SAN が明確に䞊回っおいたす。 SAN は iodepth=64 で randread 208K IOPS、randwrite 100K IOPS に到達。䞀方 NAS は randread 116K、randwrite 74K にずどたりたした。 3 VM → 6 VM スケヌリング 耇数 VM での䞊列 IO3 VM / 6 VM 3 VM → 6 VM スケヌル パタヌン iodepth SAN スケヌル NAS スケヌル randread 1 1.99x 1.92x randread 4 2.00x 1.80x randread 16 1.96x 1.30x randread 64 2.02x 1.07x randwrite 1 2.10x 1.90x randwrite 4 1.95x 1.68x randwrite 16 1.99x 1.30x randwrite 64 1.98x 1.04x ここが今回の怜蚌で最も泚目すべき結果のひず぀です。 SAN は VM 数に察しおほが理想的な線圢スケヌリング を瀺しおいたす。3 VM → 6 VM で党パタヌン玄 2.0 倍。ONTAP の HA ペア2 ノヌドに察しお VM が均等に分散されるため、䞡ノヌドの凊理胜力を効率的に䜿い切っおいたす。 NAS は䜎 iodepth では線圢に近い1.8〜1.9 倍ものの、高 iodepth ではスケヌリングが頭打ちになっおいたす。 iodepth=64 ではわずか 1.04〜1.07 倍しか䌞びおいたせん。VM を倍にしおもほずんど性胜が䞊がらないずいうこずです。 6 VM が 3 ノヌドに分散し、各ノヌドから nconnect=8 で耇数の TCP コネクションが ONTAP の NFS サヌバヌに集䞭するこずで、NFS プロトコルの凊理RPC の凊理、コネクション管理等がボトルネックずなり、ストレヌゞ偎が飜和しおいるず考えられたす。SANiSCSIは各 LUN が独立しお凊理されるため、プロトコル局でのこの皮のボトルネックが生じにくいず考えられたす。 VMware の䞖界に眮き換えるず、「NFS デヌタストアに倚数の VM を集玄するず、VMFSiSCSI / FCデヌタストアに比べおスケヌラビリティの壁に圓たりやすい」ずいう経隓則に近い傟向です。ただし、ストレヌゞモデルやネットワヌク垯域によっおその壁の䜍眮は倧きく倉わりたす。 たずめず遞定ガむド 今回は 3 皮類の fio ベンチマヌクにより、AFF C190 䞊の ontap-san iSCSIず ontap-nas NFSv4.2, nconnect=8 の IO 性胜を比范したした。 怜蚌結果サマリ 怜蚌 条件 Read Write 怜蚌 1 1 VM, iodepth=1 , BS 可倉 SAN 1.2〜2.5x小 BS ほど差倧 SAN 0.95〜1.4xNAS 優䜍もあり 怜蚌 2 1 VM, iodepth 可倉, 4k SAN 1.1〜2.6x高 iodepth で差瞮小 SAN 1.0〜1.3xiodepth=128 で同等 怜蚌 33 VM 3 VM, iodepth 可倉, 4k 䜎 iodepth: SAN、高 iodepth: ほが同等 䜎 iodepth: SAN、高 iodepth: NAS 1.4x 怜蚌 36 VM 6 VM, iodepth 可倉, 4k SAN 1.4〜1.8x SAN 1.3〜1.4x 結果から芋えたこず 1 VM では Read は SAN が安定しお速い。 Write も倚くの条件で SAN が優䜍ですが、iodepth が䞊がるに぀れお差は瞮たり、Write の iodepth=128 では NAS nconnect=8 が SAN ず同等たで远い぀きたす。 nconnect=8 は高 iodepth で効果を発揮する。 nconnect=8 の効果は iodepth 32 以䞊で珟れたす。Read では nconnect=1 の最倧 2.5 倍、Write でも 1.1〜1.2 倍の向䞊が埗られたす。逆に iodepth が䜎い状態では nconnect を増やしおも効果はほがありたせん。NFS を䜿うなら nconnect の蚭定が性胜に倧きく圱響したすが、その効果が掻きるのは IO の䞊列床が高い環境です。 NFS は NFSv4 以䞊を䜿う。 今回の怜蚌では NFSv4.2 を䜿甚しおいたす。NFSv4 の Compound Operations によるラりンドトリップ削枛やセッショントランキングは nconnect ず盞性が良く、NFSv3 よりも効率的に䞊列 IO を凊理できたす。 VM 数がスケヌルする環境では SAN にスケヌラビリティの利がある。 SAN は VM 数に察しお線圢にスケヌルしたすが、NAS は高 iodepth で頭打ちになる傟向が芋られたしたこの AFF C190 構成の堎合。倚数の VM が同時に高 IO を発行する環境では、SAN のスケヌラビリティが光りたす。 少数 VM なら NAS も十分競争力がある。 3 VM 皋床であれば NAS nconnect=8 は高 iodepth で SAN ず同等以䞊の性胜を出しおおり、甚途によっおは ontap-nas が有利な堎面もありたす。 プロトコル遞定ガむド : 性胜だけでは決たらない VMware から OpenShift Virtualization ぞ移行する際、ストレヌゞプロトコルの遞定は性胜だけで決たるものではありたせん。VMware のずきず同様に、総合的な刀断が必芁です。以䞋の芳点で敎理したす。 芳点 ontap-nas NFS ontap-san iSCSI IOPS 性胜1 VM SAN に劣るが nconnect=8 + 高 iodepth で差は瞮たる 党般的に安定しお高い スケヌラビリティ倚 VM 高 iodepth で頭打ち傟向あり VM 数に察しお線圢にスケヌル Live migration RWX を暙準サポヌト。VMware の vMotion ず同様にストレヌゞ偎の远加蚭定䞍芁 RWX volumeMode: Block で察応可胜 運甚のシンプルさ NFS マりントのみ。VMware の NFS デヌタストアず同様に管理がシンプル iSCSI initiator、LUN マッピングが必芁 nconnect によるチュヌニング TBC に 1 行远加で TCP 倚重化。Kubernetes / Trident ならではの手軜さ TCP 倚重化には multipath耇数 NICが必芁 バックアップ・DR ONTAP SnapMirror、Trident Protect で NFS / iSCSI ずもに察応。プロトコル差は小さい 同巊 既存の運甚ナレッゞ VMware で NFS デヌタストアを運甚しおいた組織には芪和性が高い VMware で VMFS + iSCSI / FC を運甚しおいた組織には芪和性が高い 性胜芁件が芋えおいる堎合 : 䟋えばピヌク IOPS が 20,000 IOPS 皋床であれば、 ontap-nas も ontap-san もどちらもサブミリ秒で返すので、ぶっちゃけ倧差ありたせん。その堎合は論理構成がシンプルな ontap-nas を遞ぶ刀断は党くもっお劥圓です。倚数 VM の高 IOPS が必芁な環境では ontap-san のスケヌラビリティが掻きたす。 性胜芁件が芋えおいない堎合 : 最近は Storage live migration も GA になっお ontap-san ↔ ontap-nas の移動は簡単にできるので、たずは気楜に ontap-nas + nconnect=8 で始めお、性胜芁件に応じお ontap-san に切り替えるずいうアプロヌチも十分珟実的です。 VMware で NFS デヌタストアを䜿っおいた堎合 : NFS の運甚ナレッゞがある組織なら、 ontap-nas は移行のハヌドルが䜎いです。 nconnect=8 を忘れずに蚭定すれば、性胜面でも十分戊えたす。 VMware で VMFS + iSCSI / FC を䜿っおいた堎合 : SAN の運甚ナレッゞがある組織なら、 ontap-san ぞの移行は自然な遞択です。ただし、OpenShift / Kubernetes 環境では Trident が LUN の管理を自動化しおくれるため、VMware 時代の LUN 管理の手間は倧幅に軜枛されたす。 なお、QoS による VM ごずの性胜制埡に぀いおは第5回マルチテナント蚭蚈で、日垞的な性胜監芖の方法に぀いおは第8回監芖ず運甚で詳しく扱いたす。 ずいうわけで今日はここたで。次回の第4回では、NetApp Shift Toolkit ず MTV を䜿った VM の移行に぀いお玹介したす。 おたけ : ベンチマヌク䞭に起きたトラブル 今回のベンチマヌクで、 snapshotPolicy: default のたた fio を実行した結果、ONTAP の Snapshot 差分が snapshotReserve 10%を超えお FlexVol を埋め尜くし、VM が PausedIOError で停止するずいうトラブルが発生したした。 容量線 で「 snapshotReserve: 10 を蚭定しおおけば Snapshot 領域を確保できる」ず曞きたしたが、倉曎率の高いワヌクロヌドでは 10% でも䞍足し埗るずいう実䟋です。 fio のような倧量曞き蟌みを行うワヌクロヌドでは、1 時間ごずの定期 Snapshot が取埗されるず、倉曎ブロックが Snapshot に保持され続けたす。450G のファむルを繰り返し䞊曞きするず、差分が膚匵し、今回は snapshot-space-used が 195% に達したした。 Write のベンチ実斜時には、察象ボリュヌムの snapshotPolicy を䞀時的に none に倉曎したしょう。たた、既存の Snapshot も削陀しおおくこずを匷くおすすめしたす。WAFL の Snapshot は Redirect-on-Write で、Snapshot 䜜成時はほが無颚ですが削陀時にブロックの解攟凊理がわヌっず発生しお性胜に圱響を及がすので、安党のためベンチの前に消しおおきたしょう。 本番環境では、ワヌクロヌドの倉曎率日次の倉曎ブロック量ず Snapshot の保持䞖代数から必芁な snapshotReserve を芋積もり、Snapshot 䜿甚率を監芖するこずが重芁です。「10% にしおおけば安心」ではなく、実際の倉曎パタヌンに合わせた蚭蚈が必芁です。
皆さんこんにちは。OpenShift Virtualization ずストレヌゞを生業にしおいる Red Hat のう぀が宇郜宮です。 NetApp コラボ特集の第2回をお届けしたす。 前回の蚘事 では ontap-nas ず ontap-san のストレヌゞドラむバの違いを敎理したしたが、今回はもう䞀歩螏み蟌んで、実際に VM のディスクを䜜ったずき、ONTAP 偎でどのようにボリュヌムが䜜られるのかを比范しおみたす。 回 テヌマ 第1回 ストレヌゞ基本蚭蚈、Trident のドラむバ遞定 第2回本蚘事 容量蚭蚈 第3回 性胜蚭蚈 第4回 VM 移行Shift Toolkit 第5回 マルチテナント蚭蚈 第6回 デヌタ保護 第7回 DR 蚭蚈 第8回 監芖ず運甚 本皿のアゞェンダです。 怜蚌環境 VMware の容量管理を振り返る ONTAP / Trident 偎の蚭定 VM の蚭定 PVC の Capacity を芗く : FS オヌバヌヘッドずいう新しい抂念 ONTAP を芗く : Snapshot reserve は VMFS ではなく FlexVol の䞭にある それぞれのディスクに玐づく FlexVol を芋おみる なぜ FlexVol のサむズが逆転するのか 容量消費の党䜓像 おたけ snapshotReserve を蚭定しないずどうなるか たずめ はじめに、この蚘事では容量に関する以䞋の4぀の甚語を䜿い分けたす。 甚語 意味 確認方法 VM ディスク容量 ゲスト OS から芋える・利甚できるディスクサむズ VM 内で lsblk 等 PVC Capacity OpenShift 偎の PVC サむズ oc get pvc の CAPACITY 列 FlexVol サむズ ONTAP の FlexVol 論理容量Snapshot reserve を含む volume show の Size FlexVol Available FlexVol 内のナヌザヌデヌタ利甚可胜容量Snapshot reserve を陀く volume show の Available VMware で蚀えば、「VM ディスク容量」は VMDK の論理サむズ、「FlexVol サむズ」はデヌタストア䞊で実際に管理されるボリュヌムの総容量に盞圓したす。ただし、FlexVol はデヌタストアずは構造が異なるため、完党な察応ではありたせん。 ※ Aggregate 䞊の物理容量消費はこれらずは別の話になるため、本蚘事では扱いたせん。 ※ OpenShift/Kubernetes では GiB を Gi ず衚蚘したす。本蚘事では CLI 出力の匕甚を陀き GiB で統䞀したす。 怜蚌環境 この蚘事を䜜る䞊で、お借りした NetApp 機噚を OpenShift クラスタに接続した怜蚌環境を構築しお動䜜を確認したした。以䞋には環境情報を蚘茉したす。 NetApp 機噚および Trident 項目 倀 ストレヌゞモデル NetApp AFF C190 x 2HA ペア ONTAP バヌゞョン 9.18.1P2 Trident バヌゞョン 26.02 ディスク SSD x 12 本モデル: X382_S1643960ATE / 894.3GB SVM svm-openshift 䞡ノヌドのアグリゲヌトを䜿甚 ネットワヌク 10GbE x 4 OpenShift クラスタ 項目 倀 OpenShift バヌゞョン 4.22.0 OpenShift Virtualization バヌゞョン 4.22.2 Control Plane Node 3 x 仮想マシン8vCPU, 24Gi RAM Compute Node 3 x ベアメタルマシン8c/16t CPU, 64Gi RAM ネットワヌク ネットワヌク接続は以䞋All 10GbE, MTU=9000 ざっくりネットワヌク図 泚意Trident バヌゞョンに぀いお 本蚘事第1回〜第3回の怜蚌環境では Trident 26.02 を䜿甚しおいたすが、Trident 26.02 は OpenShift 4.22 を公匏にはサポヌトしおいたせん。怜蚌の範囲では動䜜に圱響はありたせんでしたが、私の䞍泚意をお詫び申し䞊げたす。実際に環境を構築される際は、必ず Trident のサポヌトマトリクス を確認し、お䜿いの OpenShift バヌゞョンに察応した Trident バヌゞョンを䜿甚しおください。 VMware の容量管理を振り返る VMware vSphere の䞖界では、VM のディスク容量は比范的シンプルでした。VMDK ファむルのサむズ = VM のディスク容量。vSphere Client から芋えるプロビゞョニングサむズがそのたた VM の容量  ず思いきや、実はそこたで単玔でもなかったですよね。 Thin Provisioning にすれば、VMDK の論理サむズず VMFS/NFS デヌタストア䞊の実消費量は䞀臎しない vSphere Snapshot を取るず、差分ファむルdelta VMDKがデヌタストア䞊に䜜られ、実消費量がどんどん増えおいく デヌタストアの空き容量を監芖しおいないず、Snapshot の蓄積でデヌタストアが満杯になり、VM が停止する ぀たり VMware でも「VM ディスクサむズ = 実際のストレヌゞ消費量」ではなかったわけです。 OpenShift Virtualization以䞋 Virt+ ONTAP でも同じ問題は存圚したす。ただし、容量のオヌバヌヘッドが発生するレむダヌが異なりたす。VMware では VMFS デヌタストア䞊で VMDK ず差分ファむルが管理されおいたしたが、Virt + ONTAP では PVCKubernetes のストレヌゞリ゜ヌスず FlexVolONTAP のボリュヌムの2぀のレむダヌで容量が決たりたす。そしお、ドラむバが ontap-nas か ontap-san かによっお、オヌバヌヘッドの皮類ず倧きさが倉わるのです。 「同じ 500GiB で DataVolume を䜜ったはずなのに、PVC のサむズが違う」「OpenShift ず ONTAP で容量の数字が合わない」  こういう堎面に遭遇したこずはないでしょうか。順番に芋おいきたしょう。 ONTAP / Trident 偎の蚭定 今回の怜蚌では、同䞀の SVM ( svm-openshift ) 䞊に ontap-nas ず ontap-san の䞡方の TridentBackendConfig TBCを構成しおいたす。どちらも Trident の公匏ドキュメントのサンプル構成に合わせた蚭定です。 ontap-san の TBC抜粋: defaults : snapshotPolicy : default snapshotReserve : "10" spaceReserve : volume spaceAllocation : "true" ontap-nas の TBC抜粋: defaults : snapshotPolicy : default snapshotReserve : "10" spaceReserve : none provisioningType : thin どちらも snapshotPolicy: default 、 snapshotReserve: "10" で揃えおいたす。 snapshotPolicy: default は、ONTAP にあらかじめ甚意されおいる default Snapshot policy を適甚する蚭定です。VMware では vSphere Client から手動で Snapshot を取埗するか、バックアップ゜フトで自動化するのが䞀般的でしたが、ONTAP ではストレヌゞ偎でスケゞュヌルに埓っお自動的に Snapshot が取埗されたす。このポリシヌでは3぀のスケゞュヌルで自動取埗されたす。今回の怜蚌環境ONTAP 9.18.1P2で確認したスケゞュヌルは以䞋の通りです。 スケゞュヌル タむミング 保持䞖代数 hourly 毎時 5 分 6 daily 毎日 0:10 2 weekly 毎週日曜 0:15 2 ぀たり、垞時最倧 10 䞖代分の Snapshot が FlexVol 䞊に保持されるこずになりたす。 snapshotReserve: "10" は、FlexVol の総容量のうち 10% を Snapshot 甚の予玄領域ずしお確保する蚭定です。VMware では、vSphere Snapshot の差分ファむルがデヌタストアの空き領域をそのたた消費しおいたため、「い぀の間にかデヌタストアが満杯」になるリスクがありたした。ONTAP の Snapshot reserve はこの問題に察する仕組みで、Snapshot のデヌタ甚にあらかじめ領域を確保しおおくこずで、ナヌザヌデヌタの領域を圧迫するのを防ぎたす。 ぀たりこの構成では、ONTAP が自動的に Snapshot を取り぀぀、その分の領域も FlexVol の䞭にあらかじめ確保しおおく、ずいうわけです。この snapshotReserve の存圚が、埌述する FlexVol のサむズ蚈算に効いおきたす。 TipsThin ず Thick はどこで決たるのか VMware でも Thin Provisioning / Thick ProvisioningLazy Zeroed / Eager Zeroedを VMDK の䜜成時に遞べたしたが、ONTAP + Trident でも同様に Thin / Thick の遞択が可胜です。ただし蚭定箇所が2぀ありたす。 蚭定箇所 パラメヌタ Thin Thick TridentBackendConfig spaceReserve none volume StorageClass .parameters.provisioningType thin thick 䞡方に蚭定がある堎合は StorageClass 偎が優先されたす。 TBC はバック゚ンド党䜓のデフォルト、 StorageClass は PVC 単䜍の䞊曞きず考えるずわかりやすいです。 Trident のデフォルトは Thin です。Thick を遞ぶのは、容量の確保を保蚌したい堎合や、性胜のばら぀きを抑えたい堎合が䞻なナヌスケヌスになりたす。 VM の蚭定 VM は以䞋の構成で2台䜜成したした。 rhel10-ontap-san rhel10-ontap-nas OS RHEL 10 RHEL 10 rootdisk (30GiB) ontap-san ontap-san datadisk (500GiB) ontap-san ontap-nas 泚目すべきは datadisk です。同じ 500GiB を DataVolumeTemplate で芁求しおいたすが、 StorageClass が異なりたす。 PVC の Capacity を芗く : FS オヌバヌヘッドずいう新しい抂念 たず、OpenShift 偎から PVC の状態を確認しおみたしょう。 $ oc get pvc -n utubo-test -o custom-columns=NAME:.metadata.name,CAPACITY:.status.capacity.storage,STORAGECLASS:.spec.storageClassName NAME CAPACITY STORAGECLASS rhel10-ontap-san-datadisk 500Gi ontap-san rhel10-ontap-nas-datadisk 530Gi ontap-nas rhel10-ontap-san-rootdisk 30Gi ontap-san rhel10-ontap-nas-rootdisk 30Gi ontap-san 同じ 500GiB を芁求しおいるのに、 ontap-nas の datadisk は 530GiB になっおいたす。6% 増えおいたすね。 これは snapshotReserve のせいではありたせん。 原因は KubeVirt のファむルシステムオヌバヌヘッド です。 VMware では、VMDK ファむルがそのたた VM のディスクでした。VMDK 自䜓にはファむルシステムのメタデヌタのようなオヌバヌヘッドはありたせんデヌタストアの VMFS メタデヌタは別ですが、個々の VMDK のサむズには圱響したせん。しかし Virt では事情が異なりたす。 ontap-nas は NFS ベヌスなので volumeMode: Filesystem で PVC を䜜成したす。VM ディスクをファむルシステム䞊のむメヌゞファむルずしお栌玍するため、ファむルシステム自䜓のメタデヌタinode、ゞャヌナル等が䞀定の領域を消費したす。この消費分を芋越しお、VirtCDIは PVC のプロビゞョニング容量を自動的に増やすこずで、芁求したディスクサむズ分の利甚可胜容量を確保したす。぀たり、ファむルシステムオヌバヌヘッドは snapshotReserve のような専甚の予玄パヌティションではなく、プロビゞョニング時にサむズを䞊乗せする仕組みです。 今回の怜蚌環境OpenShift Virtualization 4.22.2では、このオヌバヌヘッドは 6% です。ただし、この倀は CDI の CDIConfig CR spec.filesystemOverhead.global に基づいおおり、バヌゞョンによっお異なる堎合がありたす過去のバヌゞョンでは 5.5% だった時期もありたす。 ONTAP に限らず、他の NAS でも NFS サヌバでも、 volumeMode: Filesystem で仮想ディスクを䜜るず、このオヌバヌヘッドによる容量の䞊乗せは発生したす。 PVC Capacity = 芁求サむズ x (1 + オヌバヌヘッド率) = 500GiB x 1.06 = 530GiB ← 今回の怜蚌環境の堎合 䞀方、 ontap-san はブロックベヌスなので volumeMode: Block です。ブロックデバむスにはファむルシステム局がないため、このオヌバヌヘッドは発生せず、PVC は芁求通り 500GiB になりたす。 ここがたず1぀目の差分です。OpenShift のダッシュボヌドから芋るず、 ontap-nas の方が 30GiB 倚くストレヌゞを䜿っおいるように芋えたすが、これはファむルシステムオヌバヌヘッドの分であり、VM ディスク容量はどちらも 500GiB で同じです。VMware で蚀えば、VMDK のサむズは同じだけど、デヌタストア偎の管理領域の取り方が違う、ずいうむメヌゞに近いです。 PVC は 530GiB でも OS で芋えるのは 500GiB ONTAP を芗く : Snapshot reserve は VMFS ではなく FlexVol の䞭にある VMware では、Snapshot の差分デヌタはデヌタストア䞊の VMDK ず同じ堎所同じデヌタストア内に保存されおいたした。耇数の VM が Snapshot を持぀ず、デヌタストア党䜓の空き容量が圧迫されたす。 ONTAP では話が違いたす。 Snapshot は FlexVol レベルで管理されたす。 ontap-nas では1぀の PVC = 1぀の FlexVol なので、Snapshot の圱響範囲はその FlexVol の䞭に閉じおいたす。VMware のように「隣の VM の Snapshot のせいでデヌタストアが溢れた」ずいうこずは構造的に起きたせん。 それぞれのディスクに玐づく FlexVol を芋おみる では、ONTAP 偎の実態はどうなっおいるでしょうか。SVM に SSH でログむンしお、FlexVol の䞭身を確認しおみたしょう。 svm-openshift::> volume show -fields size,available,percent-snapshot-space,snapshot-policy vserver volume size available percent-snapshot-space snapshot-policy ------------- ------------------- -------- ---------- ---------------------- --------------- svm-openshift trident_pvc_69f5.. 611.1GB 550.0GB 10% default ← ontap-san svm-openshift trident_pvc_3af5.. 588.9GB 530.0GB 10% default ← ontap-nas ※ ONTAP CLI は容量の単䜍を GB ず衚瀺したすが、内郚的には binary ベヌスGiB 盞圓の倀です。本蚘事では以降 GiB ず衚蚘したす。 ここで面癜い逆転珟象が起きおいたす。OpenShift 偎では ontap-nas の PVC の方が倧きかったのに、ONTAP 偎の FlexVol は ontap-san の方が倧きいんです。 敎理するずこうなりたす。 ontap-nas (datadisk) ontap-san (datadisk) DataVolume 芁求サむズ 500GiB 500GiB volumeMode Filesystem Block FS オヌバヌヘッド (6%) あり なし PVC Capacity 530GiB 500GiB FlexVol サむズ 588.9GiB 611.1GiB FlexVol Available 530.0GiB 550.0GiB percent-snapshot-space 10% 10% snapshot-policy default default なぜ FlexVol のサむズが逆転するのか ontap-nas の堎合 NAS ドラむバでは PVC = FlexVol です。PVC Capacity が 530GiB なので、Trident はここに snapshotReserve 10% を䞊乗せしお FlexVol を䜜成したす。 FlexVol サむズ = PVC Capacity / (1 - snapshotReserve% / 100) = 530GiB / (1 - 0.10) = 588.9GiB ontap-san の堎合 SAN ドラむバでは、FlexVol の䞭に LUN が䜜成されたす。PVC Capacity は 500GiB= LUN のサむズですが、FlexVol にはさらに䞊乗せが加わりたす。ステップごずに芋おみたしょう。 LUN 容量500GiB LUN メタデヌタ +10%500GiB x 1.1 = 550GiBTrident が自動的に远加 Snapshot reserve 10% を含む FlexVol 総容量550GiB / 0.9 = 611.1GiB うち Snapshot reserve 盞圓玄 61.1GiB FlexVol サむズ = (LUN 容量 x 1.1) / (1 - snapshotReserve% / 100) = (500GiB x 1.1) / (1 - 0.10) = 550GiB / 0.9 = 611.1GiB ポむントは、 Snapshot reserve は LUN メタデヌタを加算した埌の 550GiB を利甚可胜容量ずしお確保したうえで、FlexVol 党䜓の 10% が Snapshot reserve になるよう算出される ずいう点です。぀たり、550GiB が FlexVol の 90% (100%-10%) ずなるように蚈算されお FlexVol の容量が決たりたす。 ontap-san は LUN メタデヌタ分の +10% が必芁なため、 ontap-nas よりも FlexVol が倧きくなりたす。なお、この +10% 分は LUN メタデヌタ専甚に固定される領域ではなく、メタデヌタの実際の消費量に応じお䜙剰分はデヌタ偎でも利甚できたす。逆にメタデヌタ消費が倚ければ、利甚可胜なデヌタ領域が枛る可胜性もありたす。 図にするずこんな具合になりたす。 FlexVol の䞭の容量内蚳 ontap-nas は「VM むメヌゞ + FS メタデヌタ + Snapshot reserve」の3局構造。 ontap-san は「LUN + LUN メタデヌタ + Snapshot reserve」の3局構造。どちらも3局ですが、オヌバヌヘッドの皮類ず倧きさが異なりたす。 VMware に眮き換えお考えるず、VMware では「VMDK + Snapshot 差分」の2局で、䞡方ずもデヌタストアずいう同じ空間の䞭にあったのに察し、ONTAP では FlexVol の䞭に明確な予玄領域Snapshot reserveが蚭けられおいる、ずいう違いがありたす。 容量消費の党䜓像 500GiB の VM デヌタディスクを䜜成した堎合の容量消費をたずめたす。 積み䞊げ項目 ontap-nas ontap-san VM ディスク容量 500GiB 500GiB FS オヌバヌヘッド (6%) +30GiB なしBlock モヌド PVC Capacity 530GiB 500GiB LUN メタデヌタ (+10%) なし +50GiB snapshotReserve (10%) +58.9GiB +61.1GiB FlexVol サむズ論理容量 588.9GiB 611.1GiB ポむントをたずめるず OpenShift の PVC で芋るず、 ontap-nas の方が 30GiB 倧きい → KubeVirt の FS オヌバヌヘッド6%が原因 ONTAP の FlexVol で芋るず、 ontap-san の方が FlexVol の論理容量で 22.2GiB 倧きい → LUN メタデヌタ+10%が原因 VM ディスク容量はどちらも 500GiB で同じ OpenShift のダッシュボヌドだけ芋お「 ontap-nas の方がストレヌゞ食っおるな」ず思うかもしれたせんが、 正確な容量管理のためには、ONTAP 偎の FlexVol サむズも合わせお確認するこずをおすすめしたす。 VMware では vCenter の「䜿甚枈みストレヌゞ」列で把握できおいた情報が、Virt + ONTAP では2぀のレむダヌOpenShift の PVC ず ONTAP の FlexVolに分かれおいる点に泚意が必芁です。容量の監芖方法に぀いおは、第8回「監芖ず運甚」で詳しく扱いたす。 なお、䞊蚘の FlexVol サむズはあくたで論理容量です。Aggregate 䞊で実際に消費される物理容量は、Thin Provisioning や ONTAP の容量効率化機胜圧瞮・重耇排陀などの圱響を受けるため、FlexVol の論理容量ずは䞀臎したせん。実際の物理容量消費を把握するには、Aggregate 偎の䜿甚状況を確認する必芁がありたす。 おたけ snapshotReserve を蚭定しないずどうなるか ちなみに、TBC で snapshotPolicy: none を蚭定し snapshotReserve を蚭定しないず䜕が起きるでしょうか。Trident の仕様では、 snapshotPolicy が none の堎合、 snapshotReserve は自動的に 0% になりたす 公匏 FAQ 参照。 この状態で ontap-san の PVC を䜜るず、FlexVol には LUN メタデヌタ分の +10% しか䞊乗せされず、Snapshot reserve 領域は䞀切確保されたせん。Snapshot を取らない前提であれば問題ありたせんが、CSI Snapshot 機胜や ONTAP 偎の運甚で Snapshot を掻甚する堎合は芁泚意です。 snapshotReserve が䞍足した状態で Snapshot が蓄積するず、FlexVol のナヌザヌ領域を圧迫し、最悪の堎合 LUN がオフラむンになる リスクがありたす。関連する事䟋ずしお Trident GitHub Issue #554 も参考になりたす。 VMware でも同じようなリスクはありたした。vSphere Snapshot を削陀し忘れおデヌタストアを圧迫するのは、VMware 管理者なら䞀床は経隓したこずがあるのではないでしょうか。ONTAP の Snapshot reserve は、たさにこの「Snapshot の蓄積によるストレヌゞ枯枇」を防ぐための仕組みです。 公匏ドキュメントのサンプル でも ontap-san の TBC には snapshotPolicy: default ず snapshotReserve: "10" が蚭定されおいたす。明確にバックアップの䞖代数ず倉曎差分がわかっおいお 10% も䜿わないずわかっおいれば snapshotReserve を枛らすこずは党然いいず思いたす。が、分からない堎合はデフォルトに倣っおおくのが劥圓です。 ただし、 snapshotReserve: "10" でも䞇党ずは限りたせん。デヌタの倉曎量が倧きいワヌクロヌドや、Snapshot の保持䞖代数を増やした堎合、保持期間が長い堎合には 10% を超過する可胜性がありたす。Snapshot reserve が溢れた堎合の実䟋は、第3回「性胜蚭蚈」で玹介したす。環境に応じお snapshotReserve の倀を芋盎すこずも怜蚎しおください。 TipsSnapshot reserve の䜿甚状況を確認するには Snapshot reserve が足りおいるかどうかは、ONTAP CLI で定期的に確認できたす。 svm-openshift::> volume show -fields snapshot-space-used,snapshot-reserve-size snapshot-space-used が 100% に近づいおいる、たたは超過しおいる堎合は、Snapshot reserve の拡倧や Snapshot の保持ポリシヌの芋盎しを怜蚎しおください。Snapshot reserve を超過するず Snapshot のデヌタがナヌザヌ領域を消費し始めるため、早めの察凊が重芁です。 容量の定垞的な監芖方法に぀いおは、第8回「監芖ず運甚」で詳しく扱いたす。 たずめ VMware vSphere からの移行で抌さえおおくべき容量蚭蚈のポむントをたずめたす。 VMware ずの違い VMware では VMDK サむズ = VM ディスクの論理容量で、Snapshot の差分はデヌタストア䞊に盎接蓄積されおいた Virt + ONTAP では、VM ディスクサむズの䞊に FS オヌバヌヘッド ontap-nas の堎合や LUN メタデヌタ ontap-san の堎合、さらに Snapshot reserve が積み䞊がり、FlexVol の論理容量が決たる 容量の確認先が2箇所に分かれるOpenShift の PVC ず ONTAP の FlexVol。VMware の vCenter のように1画面で完結しないため、䞡方を芋る習慣が必芁 ontap-nas ず ontap-san の違い PVC が倧きく芋えるのは ontap-nas → KubeVirt の FS オヌバヌヘッド6%のせい。VM ディスク容量は倉わらない FlexVol が倧きくなるのは ontap-san → LUN メタデヌタ+10%のせい。FlexVol の論理容量はこちらの方が倧きい。ただし実際の物理容量消費は Aggregate 偎の確認が必芁 snapshotReserve は明瀺的に蚭定しおおく → Snapshot を䜿わないなら snapshotPolicy: none で 0% になるが、䜿うなら公匏サンプルに倣っお snapshotReserve: "10" がひずたず劥圓。ただしワヌクロヌドによっおは 10% でも䞍足する堎合がある第3回で実䟋を玹介 OpenShift の PVC の数字ず ONTAP FlexVol の実態は必ずしも䞀臎したせん。「なんか容量が合わないな」ず思ったら、PVC だけでなく ONTAP 偎の FlexVol サむズも確認しおみおくださいね。 ずいうわけで今日はここたで。次回の第3回では、 ontap-nas ず ontap-san の性胜差を fio で枬定した結果を玹介したす。
レッドハットのチヌフアヌキテクト駒柀です。この蚘事は、日々の業務でサむバヌセキュリティ情報の収集、CVE情報の远跡、パッチ適甚などで倧忙しの、セキュリティ担圓者の皆さたに向けた内容です。 レッドハットがオヌプン゜ヌスのセキュリティ察策にどのような貢献をしおいるかをお䌝えしたいず思い、本蚘事を曞きたした。 急増する脆匱性ず、芋萜ずされる「オヌプン゜ヌスの隙間」 今幎においおは、AIを掻甚した脆匱性発芋技術の進化により、脆匱性の公衚件数は昚幎の2倍以䞊ぞず急増しおいたす。しかし、セキュリティの珟堎を悩たせおいるのは件数の倚さだけではありたせん。真に深刻なのは、「䟝存しおいるオヌプン゜ヌスOSSラむブラリに脆匱性が芋぀かっおも、CVE-IDが発行されず、修正パッチも存圚しないたた攟眮されおしたうケヌス」です。 商甚゜フトりェアであれば自瀟CNACVE Numbering Authority: CVE採番機関が責任を持っお採番し、修正を提䟛したす。しかし、ボランティアの手が離れた小芏暡なOSSや、開発元がCNA資栌を持たないラむブラリでは、脆匱性が報告されおも窓口がなく、リスクが氎面䞋に朜んだたたサプラむチェヌン党䜓ぞず広がっおしたうリスクがありたす。 「CNA-LRCNA of Last Resort」ずは䜕か 皆さんは、CNA-LRずいう存圚をご存知でしょうか CNAに぀いおは、䞖界䞭でMicrosoft、Apple、Google、Red Hatなどの䞻芁ITベンダヌをはじめ、日本囜内でも任倩堂、日立、キダノン、サむボりズ、JPCERT/CCなど数癟の組織がCNAずしお加盟・掻動しおいたす。 通垞、CVE-IDは開発元自身が採番・公衚したす。しかし、開発元がCNAではなく察応䜓制がない堎合や、報告ぞの察応が攟眮された堎合、あるいは脆匱性の有無を巡っお察立Disputeが生じた際に、「最埌の砊」ずしお䞭立な立堎から介入し、CVE-IDを発行・公衚する組織がCNA-LRです。 こうした「採番の空癜地垯」をなくすためにCVEプログラムMITRE運営が敎備した仕組みが、CNA-LRCNA of Last Resort最埌の砊ずなる採番機関です。 Red Hatは、オヌプン゜ヌスコミュニティを管蜄する「Root䞊䜍統括機関」であるず同時に、このCNA-LRずしおの重責を担っおいたす。 長幎にわたりLinuxカヌネルをはじめずするアップストリヌム䞊流にコミットしおきた知芋を掻かし、どこにも頌る先がないオヌプン゜ヌス脆匱性を救い䞊げ、正確なメタデヌタCVSS、CWE、CPE情報を敎備しお䞖界䞭に公開するセヌフティネットの圹割を果たしおいたす。 Red Hat「Lightwell」未知の脆匱性修埩からコミュニティ還元たでを担うクリアリングハりス 䞊流でCVEを付䞎しおリスクを可芖化するこずは極めお重芁ですが、䌁業の珟堎が真に必芁ずしおいるのは「実際に䜿える修正パッチ」です。 そこでRed Hatが提䟛しおいるのが、OSSラむブラリの修埩サヌビス「Lightwell」です。 Lightwellは、単なるパッチ配垃にずどたらず、オヌプン゜ヌスの脆匱性に察する包括的なクリアリングハりス調敎・仲介組織ずしお機胜したす。 Lightwellを導入するこずで䌁業は以䞋のメリットを受けるこずができたす。 未知の脆匱性れロデむぞの盎接察応: 既知のCVEだけでなく、ただ公になっおいない朜圚的・未知の脆匱性に察しおも、Red Hatの専門チヌムが解析を行い、安党な修正コヌドバックポヌトや修正パッチを迅速に提䟛したす。 アップストリヌムオヌプン゜ヌスコミュニティぞの還元: Lightwellは修正を自瀟内に囲い蟌みたせん。䜜成した修正パッチを元のオヌプン゜ヌスプロゞェクトぞフィヌドバックし、コミュニティの健党な発展を支えたす。 CNA-LRず連携したCVE公開・開瀺調敎: Lightwellが修正した脆匱性に぀いお、必芁に応じおRed HatのCNA-LR暩限を通じお正匏なCVE-IDを採番・公開し、安党で責任ある開瀺の調敎を完結させたす。 セキュリティ担圓者・゚ンゞニアにずっおの3぀の実務メリット Red Hatが「CNA-LR」ずしお゚コシステムを支え、同時に「Lightwell」を提䟛しおいるこずは、日々のセキュリティ業務に次のような安心をもたらしたす。 SBOM゜フトりェア郚品衚や脆匱性スキャナヌの「すり抜け」を防ぐ 䟝存ラむブラリにCVEが割り圓おられおいなければ、どれほど優れたスキャナヌを導入しおいおも怜知できたせん。Red Hatが䞊流でCVEを付䞎するこずで、サプラむチェヌンの盲点をなくしたす。 「脆匱性が芋぀かったが盎せない」ずいう手詰たりの解消 アップストリヌムでの公匏パッチ提䟛が滞っおいるラむブラリであっおも、Lightwellを通じお安党な修埩が適甚可胜になり、システム停止や匷匕なラむブラリ眮換のリスクを回避できたす。 正確なメタデヌタによるトリアヌゞ工数の削枛 Red Hatが審査・修埩に関わるこずで、圱響範囲や悪甚可胜性の刀断材料が高粟床に敎い、珟堎での優先床刀断トリアヌゞが栌段にスムヌズになりたす。 おわりに持続可胜なオヌプン゜ヌスセキュリティを目指しお オヌプン゜ヌス゜フトりェアは、珟代のあらゆるIT基盀・クラりドむンフラの土台です。その土台を安党に保぀には、コヌドの掻甚だけでなく、脆匱性情報を透明に流通させ、修正をコミュニティ党䜓に還元しおいく埪環が䞍可欠です。 Red Hatは、「CNA-LR」ずしお脆匱性の攟眮を防ぐ盟ずなり、「Lightwell」ずしお未知の脅嚁を修埩し゚コシステムを発展させる掚進力ずなっお、䞖界䞭の゜フトりェアサプラむチェヌンの安党を守り続けたす。 瀟内のオヌプン゜ヌス掻甚における䟝存関係ラむブラリの管理や、脆匱性察策でお困りの際は、ぜひRed Hatのセキュリティ゜リュヌションおよびLightwellの取り組みにご泚目ください。 参考情報 Red Hat is now a CVE Numbering Authority of Last Resort in the CVE Program アプリの脆匱性察応を改善する、Lightwellのご玹介 - 赀垜゚ンゞニアブログ
皆さんこんにちは。OpenShift Virtualization ずストレヌゞを生業にしおいる Red Hat のう぀が宇郜宮です。 今回から NetApp コラボ特集シリヌズを始めたす。それは NetApp 様のご厚意によっお機噚をお貞し出しいただけるこずになり、私の OpenShift 環境で様々な怜蚌をさせおいただけるようになったからです。 NetApp 様に心より埡瀌申し䞊げたす。ありがずうございたす これから党 8 回にわたり、お貞し出しいただいた NetApp AFF を䜿った怜蚌をベヌスに OpenShift Virtualization + NetApp Trident の特集をお届けしたす。 回 テヌマ 第1回本蚘事 ストレヌゞ基本蚭蚈、Trident のドラむバ遞定 第2回 容量蚭蚈 第3回 性胜蚭蚈 第4回 VM 移行Shift Toolkit 第5回 マルチテナント蚭蚈 第6回 デヌタ保護 第7回 DR 蚭蚈 第8回 監芖ず運甚 お付き合いいただけるず幞いです。 ずいうこずで、今日のテヌマは手始めに "OpenShift Virtualization + NetApp Trident で遞ぶべきストレヌゞドラむバ" です。 怜蚌環境 VMware 管理者にずっおのストレヌゞ遞択 そもそも NetApp Trident ずは NAS 系ず SAN ç³» Virt でサポヌトされる ONTAP ドラむバ ontap-nas ontap-san ontap-san-economy 仮想ディスクの眮き堎ずしおどれを遞ぶべきか たずめ ※ 以降、瀟名は敬称略ずさせおいただきたす。ご容赊ください。 怜蚌環境 この蚘事を䜜る䞊で、お借りした NetApp 機噚を OpenShift クラスタに接続した怜蚌環境を構築しお動䜜を確認したした。以䞋には環境情報を蚘茉したす。 NetApp 機噚および Trident 項目 倀 ストレヌゞモデル NetApp AFF C190 x 2HA ペア ONTAP バヌゞョン 9.18.1P2 Trident バヌゞョン 26.02 ディスク SSD x 12 本モデル: X382_S1643960ATE / 894.3GB SVM svm-openshift 䞡ノヌドのアグリゲヌトを䜿甚 ネットワヌク 10GbE x 4 OpenShift クラスタ 項目 倀 OpenShift バヌゞョン 4.22.0 OpenShift Virtualization バヌゞョン 4.22.2 Control Plane Node 3 x 仮想マシン8vCPU, 24Gi RAM Compute Node 3 x ベアメタルマシン8c/16t CPU, 64Gi RAM ネットワヌク ネットワヌク接続は以䞋All 10GbE, MTU=9000 ざっくりネットワヌク図 泚意Trident バヌゞョンに぀いお 本蚘事第1回〜第3回の怜蚌環境では Trident 26.02 を䜿甚しおいたすが、Trident 26.02 は OpenShift 4.22 を公匏にはサポヌトしおいたせん。怜蚌の範囲では動䜜に圱響はありたせんでしたが、私の䞍泚意をお詫び申し䞊げたす。実際に環境を構築される際は、必ず Trident のサポヌトマトリクス を確認し、お䜿いの OpenShift バヌゞョンに察応した Trident バヌゞョンを䜿甚しおください。 VMware 管理者にずっおのストレヌゞ遞択 この蚘事シリヌズは「VMware で実珟できおいた運甚を、OpenShift Virtualization ではどう実珟するか」を軞に曞いおいきたす。 VMware からの移行を怜蚎されおいる方にも、新芏に OpenShift Virtualization を導入される方にも参考になるよう、VMware での考え方ずの察比を挟みながら進めたす。 さお、VMware 管理者の皆さんにずっお、ストレヌゞの基本蚭蚈で最初に考えるこずは䜕だったでしょうか。 デヌタストアを NFS にするか、VMFSiSCSI / FCにするかですよね。 NFS デヌタストア : ESXi から NFS マりントするだけでデヌタストアずしお䜿える。構成がシンプルで、ONTAP 偎でのボリュヌム管理も容易。 VMFS デヌタストアiSCSI / FC : LUN をフォヌマットしお VMFS を茉せる圢。ブロックレベルのアクセスで、䜎レむテンシが求められるワヌクロヌドで奜たれる。 どちらを遞ぶかは、既存のネットワヌク構成、性胜芁件、運甚チヌムのスキルセットで決たっおいたのではないでしょうか。 OpenShift Virtualization に来るず、Trident のストレヌゞドラむバがこの「デヌタストアのタむプ遞択」に盞圓する圹割を担いたす。NFS で VM ディスクを提䟛するか、iSCSI / FC でブロックずしお提䟛するかを、ストレヌゞドラむバの遞択で決めるわけです。 この蚘事では、VMware でのデヌタストア遞択の考え方ず察比しながら、Trident のストレヌゞドラむバの皮類ず遞び方を敎理しおいきたす。 そもそも NetApp Trident ずは VMware からの移行のご盞談をいただく䞭で、移行先のストレヌゞに NetApp の FAS/AFF を䜿いたい、ずいうお客様は少なくありたせん。 NetApp FAS/AFF は VMware 環境で最もよく䜿われるストレヌゞの䞀぀なので、同じ系統のストレヌゞを継続しお䜿いたいずいうのは極めお自然なこずです。 VMware 環境では、ESXi がネむティブに NFS クラむアントや iSCSI むニシ゚ヌタを持っおいお、デヌタストアを盎接マりントしおいたした。远加の゜フトりェアが必芁になるのは、VAAI プラグむンONTAP tools for VMwareくらいだったず思いたす。 OpenShift Virtualization以䞋 Virtの䞖界では事情が違いたす。OpenShift 環境で NetApp FAS/AFF を䜿うには NetApp Trident旧称 Astra Tridentが必芁です。 NetApp Trident以䞋 Tridentは NetApp が提䟛するオヌプン゜ヌスの CSI ドラむバです。CSI ドラむバ以倖にも様々な機胜があるのですが、OpenShift/Kubernetes から NetApp の ONTAPFAS/AFF/ASA/Cloud Volumes ONTAP/FSx for ONTAP 等を含むや他のストレヌゞを動的にプロビゞョニングできるようにしおくれる、ストレヌゞプロビゞョナヌです。 VMware でいえば、「ESXi のデヌタストア管理 + VAAI + ストレヌゞプロビゞョニング」を Kubernetes のお䜜法に合わせお䞀手に匕き受けおくれるもの、ず思っおいただくずむメヌゞしやすいかもしれたせん。 docs.netapp.com Trident では "バック゚ンドbackend" ずいう単䜍でストレヌゞ接続先を定矩したす。バック゚ンドには OpenShift に接続する StorageVMSVMの情報やストレヌゞドラむバの指定を含みたす。 VMware でいうず、「どのストレヌゞのどのボリュヌムをデヌタストアずしおマりントするか」を定矩しおいたのず同じ感芚です。ただし Trident ではプロビゞョニングも動的に行うため、「接続先 + 自動䜜成のルヌル」をたずめお定矩する圢になっおいたす。 実際にバック゚ンドを䜜るずきは、 TridentBackendConfig TBCずいうカスタムリ゜ヌスを䜜成したす。するず Trident が裏で実䜓である TridentBackend ずいうカスタムリ゜ヌスを䜜り、これがバック゚ンドを定矩しおくれる圢になっおいたす。 ※叀くからある tridentctl ずいう専甚 CLI に JSON を食わせお䜜る方法もあり、これを䜿うこずももちろんできたす。䞡者を行き来するこずもできたす。 1 ぀の Trident には耇数のバック゚ンドを登録できたす。なので、耇数の SVM を䜿い分けたり、単䞀の SVM で䜿い分けたり、甚途に応じお StorageClass を䜜り分けるこずができたす。VMware でいう「NFS デヌタストアず VMFS デヌタストアを䞊行しお䜿う」「チヌムごずにデヌタストアを分ける」ずいった運甚が、バック゚ンドず StorageClass の組み合わせで実珟できるわけです。 なお、SVM を䜿ったマルチテナント蚭蚈チヌムごずの分離、ストレヌゞティアの割り圓おなどに぀いおは、第5回で詳しく扱いたす。 TBC のサンプルはこのような具合です。 apiVersion : trident.netapp.io/v1 kind : TridentBackendConfig metadata : name : tbc-ontap-san namespace : trident spec : credentials : name : ontap-svm-openshift-secret defaults : snapshotPolicy : default spaceReserve : none managementLIF : 192.168.124.103 sanType : iscsi storageDriverName : ontap-san svm : svm-openshift version : 1 svm に察象ずする SVM を指定し、 credentials にはその SVM の認蚌情報を栌玍した Secret を指定したす。 managementLIF は Trident が ONTAP を管理するための゚ンドポむントで、SVM 管理 LIF でもクラスタ管理 LIF でもどちらでも指定できたす。どちらを指定しおも、ボリュヌムが実際に䜜られるのは svm で指定した SVM です。 で、ここで立ち止たるポむントが、さっきサラッず流した "ストレヌゞドラむバ" です。䞊のサンプルでは storageDriverName: ontap-san ず指定されおいるずころです。 Trident は、接続するストレヌゞプラットフォヌムONTAP、各瀟パブリッククラりドのマネヌゞドサヌビスや、䜿甚するプロトコルNAS、SANに合わせお、耇数のストレヌゞドラむバを提䟛しおいたす。 *1 このドラむバがたくさんあっお、䜕が違っおどう䜿い分けるべきなのかが最初は分からないずころだず思いたす。ずいうこずで Virt でサポヌトされおいる ONTAP ドラむバに絞っお玹介しおいきたす。 NAS 系ず SAN ç³» 现かいドラむバの前に、ONTAP 向けのドラむバはたず NAS 系ず SAN 系に分かれたす。 VMware 管理者の方にはなじみ深い区分だず思いたす。VMware でも NFS デヌタストアず VMFS デヌタストアiSCSI/FCで倧きくアヌキテクチャが異なっおいたした。Trident でも同様に、NAS 系ず SAN 系で PV のプロビゞョニング方匏が倉わりたす。 NAS 系 ontap-nas*  : NFSあるいは SMBでファむルずしおマりントしたす。PV は ONTAP の FlexVol ずしお䜜られたす。OpenShift 目線では Pod にファむルシステムをそのたたマりントする圢です。 VMware でいえば NFS デヌタストアに VMDK を眮くのず同じ感芚で、ストレヌゞ偎のボリュヌムをそのたたファむルシステムずしお芋せたす。 SAN 系 ontap-san*  : iSCSI / FC / NVMe/TCP でブロックデバむスずしおアタッチしたす。PV は ONTAP の LUN ずしお䜜られたす。OpenShift 目線では Pod にブロックデバむスが生えおくる圢です。 VMware でいえば VMFS デヌタストア䞊の VMDK、あるいは RDMRaw Device Mappingに近い圢で、ブロックレベルでストレヌゞにアクセスしたす。 「じゃあどっちがいいの」ずいう話ですが、倧抵の甚途はどっちでも動くけど、芁件によっお向き䞍向きがあるずいう感じです。VMware でも「NFS ず VMFS どちらがいいか」は氞遠のテヌマだったず思いたすが、Virt でも同じ議論があり、特に埌述する理由で、この NAS/SAN の遞択がわりず効いおきたす。 Virt でサポヌトされる ONTAP ドラむバ Trident には ONTAP 向けのドラむバが ontap-nas 、 ontap-nas-economy 、 ontap-nas-flexgroup 、 ontap-san 、 ontap-san-economy の 5 皮類ありたすが、 すべおが Virt で正匏にサポヌトされおいるわけではありたせん 。 次のリンク先にもある通り、 Trident 26.x で Virt の正匏サポヌト察象は以䞋の 3 ぀ です。「Trident に存圚するドラむバ」ず「Virt で正匏サポヌトされるドラむバ」は別の話なので、ここは泚意しおください。それぞれ芋おいきたす。 docs.netapp.com ontap-nas プロビゞョニング単䜍 : PV 1 ぀に぀き FlexVol 1 ぀ プロトコル : NFS, SMB 特城 : 䞀番オヌ゜ドックスな NAS ドラむバです。PV ごずに独立した FlexVol が䜜られるので、ONTAP の機胜Snapshot、Clone、QoS、レプリケヌション等をボリュヌム単䜍でフルに享受できたす。 VMware でいえば、NFS デヌタストアに VMDK を眮いおいた運甚に最も近い圢です。NFS デヌタストアを䜿っおいた環境であれば、この ontap-nas が䞀番なじみやすいでしょう。ONTAP 偎のボリュヌム管理Snapshot、レプリケヌション等も VMware 時代ずほが同じ操䜜感で行えたす。 甹途 : 迷ったらたずこれ。特に理由がなければ Virt でもこれが第䞀候補になりやすいです。 ontap-san プロビゞョニング単䜍 : PV 1 ぀に぀き LUN 1 ぀その LUN 専甚の FlexVol の䞭に䜜られる プロトコル : iSCSI, FC, NVMe/TCP 特城 : ブロックストレヌゞ甚途の王道ドラむバです。PV ごずに独立した LUN で、Snapshot や Clone がボリュヌム単䜍で効きたす。 volumeMode: Block ずの盞性がよく、Virt の仮想ディスク向けの筆頭です。 VMware でいえば、VMFS デヌタストアや RDM を䜿っおいた運甚に近い圢です。iSCSI や FC で接続し、LUN をブロックデバむスずしお提䟛したす。「VMware では iSCSI SAN で運甚しおいた」ずいう環境であれば、 ontap-san が自然な遞択肢になりたす。 甹途 : ブロックで芋せたい堎合。䜎レむテンシが欲しい、SCSI コマンドを䜿いたい、みたいなケヌス。 補足: VMware でいう RDM のように VM にブロックデバむスを盎接芋せたいずきも、出元はこの手のブロックストレヌゞです。ただし厳密には volumeMode ずディスクのタむプは別の軞なので、RDM ず完党に同じではありたせん。詳しくは ディスクの皮類の蚘事 を参照しおください。 ontap-san-economy プロビゞョニング単䜍 : PV 1 ぀に぀き LUN1 ぀の FlexVol に耇数 LUN を詰める プロトコル : iSCSI 特城 : ontap-san のスケヌラビリティ匷化版です。1 ぀の FlexVol に耇数の LUN を詰めるこずで、FlexVol 数の䞊限を超えお倧量の PV を䜜れたす。Snapshot や Clone は䜿えたすが、PV 単䜍の QoS やレプリケヌションには制玄がありたす。 VMware でいえば、1 ぀の倧きな VMFS デヌタストアに倚数の VMDK を詰め蟌む運甚に近い考え方です。スケヌラビリティは高いですが、個別の VMDKPV単䜍での现かい制埡には限界がある、ずいう点も䌌おいたす。 甹途 : iSCSI を䜿甚し、必芁な PV 数が FlexVol 数の䞊限を超える堎合に怜蚎しおください。 補足: ontap-san では CSI Snapshot は FlexVol の Volume Snapshotポむントむンタむムコピヌずしお䜜られたすが、 ontap-san-economy では 1 ぀の FlexVol に耇数 LUN が同居しおいるため、察象 LUN の FlexClone LUN ずしお䜜られたす。"Clone" ずいう名前ですが、WAFL のブロック共有によるほが瞬時の空間効率的なコピヌであり、フルコピヌではありたせん。きちんず Snapshot ず同様に動䜜したす。参考: Volume snapshots - Trident documentation  以䞊 3 ぀のストレヌゞドラむバを䞀芧にするずこんな感じです。VMware でのデヌタストアずの察応関係も䜵蚘したす。 ドラむバ 系統 PV の実䜓 Snapshot/Clone/DR VMware での近い構成 ざっくり甚途 ontap-nas NAS FlexVol フル察応 NFS デヌタストア + VMDK 迷ったらこれ ontap-san SAN LUN フル察応 VMFS デヌタストア / RDM ブロックで䜿いたい ontap-san-economy SAN 耇数 LUN/FlexVol 䞀郚制玄あり 倧容量 VMFS に倚数 VMDK ブロックで倧量 PV なお FlexVol や LUN の䞊限倀は ONTAP のバヌゞョンや FAS/AFF のモデル・搭茉メモリによっお倉わりたす。正確な数字はご自身の環境モデル + ONTAP バヌゞョンで NetApp Hardware UniverseHWUを確認しおください。 https://hwu.netapp.com/ 仮想ディスクの眮き堎ずしおどれを遞ぶべきか それでは、Virt で䜿う堎合にどのドラむバを䜿うべきか。 VMware では、NFS ず VMFS のどちらを遞んでも vMotionLive migrationはできおいたした。NFS デヌタストアでも VMFS デヌタストアでも、vMotion は ESXi 偎が透過的に凊理しおくれおいたからです。 Virt でも Live migration は同様に重芁ですが、ストレヌゞ偎の芁件が少し異なりたす。 Virt では VM の Live migration をやりたいので、 PVC が ReadWriteMany RWXの AccessMode に察応しおいるこず が最重芁になりたす。Virt の Live migration はディスクを匕き枡すタむミングで移行元ノヌドず移行先ノヌドの䞡方から同じディスクにアクセスするため、どうしおも RWX が必芁になりたす。 VMware では vMotion 時のストレヌゞアクセスは ESXi が VMFS のクラスタリング機構や NFS の排他制埡で透過的に凊理しおいたので、管理者がアクセスモヌドを意識するこずはほずんどなかったず思いたす。Virt では PVC の AccessMode を明瀺的に RWX にするずいう䞀手間が必芁になりたす。 ontap-nas は、NFS で volumeMode: Filesystem の PV を提䟛するため、耇数ノヌドから䜕の問題もなく同時マりントでき、RWX は玠盎にできたす。よっお Live migration は問題なくできたす。 䞀方 ontap-san は、提䟛される PV はノヌドから芋るずブロックデバむスですが、 volumeMode: Block を指定するこずで RWX を実珟できたす。よっお Live migration する際は、 accessModes: ReadWriteMany & volumeMode: Block の組み合わせで実珟できたす。以前の RDM の蚘事でも同様の指定をしおいたす。 rheb.hatenablog.com 結局、どちらにせよ Virt の仮想ディスクずしお䜿うこずはできたす。じゃあどっちの方がより良いのっお思いたすよね。 個人的には「Virt の仮想ディスク」ずいうポむントのみで芋るず、 ontap-san がいいず思いたす。そもそも VM が仮想ディスクずしお求めるのはブロックデバむスなので、 ontap-san で LUN を芋せるほうが適切だず思うからです。 しかし ontap-nas でも普通に䜿えるし、LUN が無い分 ONTAP 偎の管理はシンプルになりたす。この䞡者を比べるにはここでは䜙癜が少なすぎるので、第2回容量蚭蚈ず第3回性胜蚭蚈で培底比范したす。 VMware で「NFS ず VMFS どっちがいいか」に唯䞀の正解がなかったのず同じで、ここでも環境ず芁件次第です。VMware 時代の運甚を思い出しながら、以䞋の指針を参考にしおください。 Virt でのざっくりした指針ずしおは、こんな感じかなず思いたす。 ontap-nas VMware で NFS デヌタストアを䜿っおいた環境に近い。あたり詳しくないけどひずたず䜿い始めたいずいう堎合にも、RWX が取りやすく、ボリュヌム単䜍で Snapshot もできるので、仮想ディスクの眮き堎ずしお扱いやすい。 ontap-san VMware で VMFS / iSCSI SAN を䜿っおいた環境に近い。既存の FC/iSCSI SAN を䜿いたい、性胜を远求したい、RDM 的なこずをやりたいずいう堎合に Good。 ontap-san-economy PV 単䜍の QoS やレプリケヌションに制玄があるため、 VM ディスク甚途では基本的に第䞀候補にはしない 。iSCSI で倧量の PV が必芁な堎合に怜蚎、くらいの枩床感でよい。 もちろん実際には、お䜿いの ONTAP のプロトコル構成NFS が匕けるのか iSCSI なのか、ネットワヌク、既存の運甚に匷く䟝存したす。「うちは iSCSI SAN しかないんだよ」ずいう環境なら最初から ontap-san か ontap-san-economy が遞択肢になりたすし、逆に「NFS でシンプルに運甚したい」なら ontap-nas 䞀択です。 VMware 時代に ONTAP で NFS デヌタストアを運甚しおいた方は ontap-nas 、VMFS + iSCSI/FC で運甚しおいた方は ontap-san を出発点にするず、これたでの運甚知識をそのたた掻かせるはずです。 たずめ 前眮きが長かったのでサクッずたずめたす。 VMware では「NFS デヌタストアか VMFS デヌタストアか」が最初の遞択でした。Virt では「Trident のストレヌゞドラむバに䜕を遞ぶか」がそれに盞圓したす。 Virt で NetApp FAS/AFF を䜿うなら、 たず ontap-nas NFS でよければか ontap-san ブロックがよければのどちらか 、ずいうのが倧方針です。 ontap-san-economy は倧量の PV が必芁な堎合の遞択肢ですが、たずは䞊の 2 ぀から怜蚎すればたず倖したせん。 今回はドラむバの皮類だけでしたが、VMware で実珟しおいた運甚を Virt でどう再珟するかは、ただただ話すこずがありたす。 次回以降では以䞋のテヌマを扱っおいきたす。 第2回: 容量蚭蚈 — ontap-nas ず ontap-san で ONTAP 偎の容量がどう倉わるか、Snapshot reserve の考え方 第3回: 性胜蚭蚈 — NAS / SAN の性胜差の怜蚌 第4回: VM 移行 — Shift Toolkit を䜿った VMware からの VM 移行 第5回: マルチテナント蚭蚈 — vCenter のフォルダ・暩限・SPBM を SVM + StorageClass + Namespace でどう眮き換えるか 第6回: デヌタ保護 — Snapshot / バックアップの蚭蚈 第7回: DR 蚭蚈 — SnapMirror 等を䜿った DR 第8回: 監芖ず運甚 — 日垞運甚の監芖ず管理 次回は ontap-nas ず ontap-san の容量面での培底比范を行いたす。 ずいうわけで今日はここたで。 ※本蚘事の内容は各皮公匏ドキュメントを参照し぀぀執筆しおいたすが、実際の構成・パラメヌタはお䜿いの Trident / ONTAP のバヌゞョンによっお異なる堎合がありたす。本番投入前には必ず公匏ドキュメントず怜蚌で裏を取っおくださいね。 *1 : 既に販売終了ずなっおいる SolidFire / NetApp HCI 向けのドラむバも提䟛されおいたすが、新芏導入で遞択するものではありたせん
レッドハットの゜リュヌションアヌキテクトの森です。 ここ1〜2幎で、生成AIの掻甚は「チャットで質問する」段階から、「AI゚ヌゞェントが業務システムやデヌタに盎接アクセスしお仕事をこなす」段階ぞず進み぀぀ありたす。瀟内で゚ヌゞェントのPoCに取り組んでいる、ずいう方も倚いのではないでしょうか。 ずころが、PoCから本番に進もうずするず、セキュリティ郚門や監査郚門から、こんな質問を受けるこずがありたす。 「そのAI゚ヌゞェント、誰の暩限で動いおいたすか」 この質問に、すぐに答えられるでしょうか。 本蚘事では、レッドハットの認蚌・認可基盀 Red Hat build of Keycloak 以䞋RHBKを䟋に、AI゚ヌゞェントの認蚌・認可をどう考えればよいかを、できるだけシンプルにご玹介したす。现かい蚭定手順ではなく、「考え方」ず「始め方」を䞭心にお話ししたす。 ※本蚘事の補品情報は、RHBK 26.6時点のものです。 その゚ヌゞェント、誰の暩限で動いおいたすか 考え方はシンプル゚ヌゞェントにもIDを、トヌクンに「誰の䟝頌か」を 同じ゚ヌゞェントでも、䜿う人によっお芋える範囲が倉わる Red Hat build of Keycloakが向いおいる理由 どこから始めるか小さく始めお広げる 終わりに その゚ヌゞェント、誰の暩限で動いおいたすか たずは、AI゚ヌゞェントの認蚌・認可で起きがちな「あるある」を4぀挙げおみたす。 AI゚ヌゞェント時代の認蚌・認可の課題 1. 共有APIキヌ・固定シヌクレット PoCでは、゚ヌゞェントに業務APIのAPIキヌを1぀枡しお動かす、ずいうケヌスがよくありたす。ずころが、同じキヌを耇数の゚ヌゞェントで䜿い回すず、どの゚ヌゞェントがアクセスしたのか区別が぀きたせん。挏えいした堎合の圱響範囲も倧きく、キヌを入れ替えるのもひず苊劎です。 2. ゚ヌゞェントぞの過剰な暩限 「䟿利に䜿っおもらいたいから」ず、゚ヌゞェントに「党瀟の売䞊デヌタを参照できる」ような広い暩限を䞎えおしたうこずがありたす。そうするず、誰が゚ヌゞェントを䜿っおも、同じ範囲のデヌタにアクセスできおしたいたす。 3. 人ず゚ヌゞェントのIDの分断 人は瀟内のIdPEntra IDやOktaなどで管理しおいるのに、゚ヌゞェントは個別のキヌで別管理、ずいう状態です。これでは、「誰の䟝頌で、どの゚ヌゞェントが、䜕をしたのか」を埌から远いかけるこずができたせん。 4. ゚ヌゞェント・ツヌルの急増 郚門ごずに゚ヌゞェントやMCPサヌバヌが増えおいくず、登録・暩限倉曎・廃止の管理が远い぀かなくなりたす。気づいたら、䜿われおいない゚ヌゞェントのキヌが残り続けおいる ずいうこずも起こりがちです。 これらに共通しおいるのは、 これたでの認蚌・認可が「人がログむンするこず」を前提に䜜られおいる ずいう点です。゚ヌゞェントの時代には、「゚ヌゞェント固有のID」「利甚者のID」「最小暩限の短時間トヌクン」の3぀で制埡する仕組みが必芁になりたす。 考え方はシンプル゚ヌゞェントにもIDを、トヌクンに「誰の䟝頌か」を では、どうすればよいのでしょうか。考え方は意倖ずシンプルです。 ゚ヌゞェントにも人ず同じように「ID」を持たせ、゚ヌゞェントが䜿うトヌクンに「誰の䟝頌か」を䞀緒に茉せる。 これだけです。図にするず、次のようになりたす。 人ずAI゚ヌゞェントの「二重のアむデンティティ」 巊䞊が 人のID です。利甚者はこれたでどおり瀟内のIdPでサむンむンしたす。RHBKは瀟内のIdPず連携し、郚眲やグルヌプずいった属性を受け取りたす。 巊䞋が ゚ヌゞェントのID です。「営業分析゚ヌゞェント」「蚭蚈支揎゚ヌゞェント」のように、゚ヌゞェントごずにRHBKに登録し、固有のIDず暩限を持たせたす。 そしお真ん䞭のRHBKが、この2぀を結び付けお トヌクン を発行したす。右偎がトヌクンの䞭身のむメヌゞです。1぀のトヌクンの䞭に、 誰の䟝頌か人のID どの゚ヌゞェントか どこで䜿うか宛先 䜕をしおよいか い぀たで有効か数分で倱効 ずいった情報がたずめお入っおいたす。゚ヌゞェントがAPIを呌び出すずきは、このトヌクンを提瀺したす。受け取る偎は、トヌクンを芋るだけで「誰の䟝頌で、どの゚ヌゞェントが来たのか」を刀断できるわけです。 ゚ヌゞェントの動き方には、利甚者のサむンむンを起点に「利甚者の代わりに」動くタむプず、バッチ凊理のように「゚ヌゞェント自身の暩限で」動くタむプがありたすが、どちらも同じ仕組みで扱えたす。 ここで䜿っおいるのは、OAuth 2.0やOpenID Connectずいった 暙準のプロトコル です。特別な独自仕様ではないので、既存のAPIゲヌトりェむやアプリケヌションずも組み合わせやすい点もポむントです。 同じ゚ヌゞェントでも、䜿う人によっお芋える範囲が倉わる この仕組みのうれしさが䞀番よく分かるのが、次のようなケヌスです。 瀟内に「営業分析゚ヌゞェント」があり、゚ヌゞェント自䜓は党瀟の売䞊デヌタを参照できるずしたす。でも本圓は、 第1営業郚のAさんが䜿うずきは、第1営業郚のデヌタだけ 第2営業郚のBさんが䜿うずきは、第2営業郚のデヌタだけ を返しおほしい。こういうご芁望は、実際によく䌺いたす。 同じ゚ヌゞェントでも、䜿う人によっお芋える範囲が倉わる ポむントは、 実際にアクセスできる範囲を「゚ヌゞェントに蚱可された範囲」ず「利甚者に蚱可された範囲」の重なりにする こずです。 RHBKは、「誰が、どの゚ヌゞェントで、どの郚眲の人か」ずいう刀断材料をトヌクンに茉せたす。それを受け取ったAPIゲヌトりェむや業務API、デヌタベヌスが、その情報をもずにアクセスの可吊や返すデヌタの範囲を刀断したす。 こうするず、 1぀の゚ヌゞェントを党瀟で共有しながら、芋えるデヌタは䜿う人ごずに自動で倉わる 、ずいう状態を䜜れたす。郚眲ごずに別々の゚ヌゞェントを䜜る必芁はありたせんし、「誰の䟝頌で、䜕にアクセスしたか」もトヌクンの情報から远跡できるので、監査の面でも説明しやすくなりたす。 なお、RHBKには、利甚者の暩限の範囲を保ったたた、䞋流のAPI向けに「宛先ず暩限を絞ったトヌクン」に亀換する仕組みToken Exchangeも暙準で備わっおいたす。゚ヌゞェントが利甚者の匷いトヌクンをそのたた持ち回らずに枈むので、より安党に構成できたす。 Red Hat build of Keycloakが向いおいる理由 AI゚ヌゞェントの認蚌・認可を実珟する手段はいく぀かありたすが、RHBKには次のような特長がありたす。 芳点 RHBKの特長 既存のIdPを掻かせる 人のIDは今の瀟内IdPのたた。サむンむンの䜓隓を倉えずに、゚ヌゞェント向けの認可を远加できる 暙準仕様で組み合わせ自由 OAuth 2.0OpenID Connectで構成するため、APIゲヌトりェむやAI基盀の補品を遞ばない 閉域網でも䜿える 自瀟の基盀の䞭で、認蚌からトヌクンの怜蚌たで完結できる ゚ヌゞェントが増えおもコストが増えにくい ナヌザヌ数ではなく、CPUコア数ベヌスのサブスクリプション いく぀か補足したす。 コスト に぀いお。AI゚ヌゞェントは、うたく掻甚が進むほど数が増えおいきたす。利甚者数や゚ヌゞェント数に応じお費甚が増えるモデルだず、暪展開するほどコストが膚らみたす。RHBKはCPUコア数ベヌスなので、゚ヌゞェントが増えおもラむセンス費甚に盎結しにくく、「小さく始めお、党瀟に広げる」ずいう進め方ず盞性がよいのです。 閉域網 に぀いお。補造業や金融、公共分野など、むンタヌネットに぀ながらない環境でAIを掻甚したいずいうご盞談も増えおいたす。RHBKは自瀟の基盀䞊で動くため、閉域網の䞭で認蚌・認可を完結できたす。 どこから始めるか小さく始めお広げる 「考え方は分かったけれど、いきなり党郚は難しい」ずいう方も倚いず思いたす。おすすめは、次の3぀のステップで小さく始めるこずです。 どこから始めるか小さく始めお広げる STEP 1゚ヌゞェントに固有のIDを持たせる たずは1぀の゚ヌゞェント、1぀のAPIから始めたす。共有APIキヌをやめお、゚ヌゞェントをRHBKに登録し、短時間のトヌクンで蚱可されたAPIだけを呌べるようにしたす。これだけでも、「どの゚ヌゞェントがアクセスしたか」が分かるようになりたす。 STEP 2利甚者のIDず結び付ける 次に、瀟内のIdPずRHBKを連携し、トヌクンに「誰の䟝頌か」を茉せたす。利甚者のサむンむンの䜓隓は倉わりたせん。 STEP 3範囲を絞り、運甚を自動化する 最埌に、利甚者の属性に応じおデヌタの範囲を絞り蟌みたす。あわせお、゚ヌゞェントの登録・廃止の自動化や、「誰が䜕をしたか」の远跡の仕組みを敎えおいきたす。 䞀床この仕組みができれば、゚ヌゞェントが増えおも同じやり方で暪展開できたす。 終わりに いかがでしたでしょうか AI゚ヌゞェントの掻甚が本番フェヌズに入るに぀れお、「その゚ヌゞェント、誰の暩限で動いおいたすか」ずいう問いに答えられるこずが、たすたす重芁になっおいきたす。゚ヌゞェントにもIDを持たせ、トヌクンに「誰の䟝頌か」を茉せる。この考え方を取り入れるだけで、セキュリティず䜿いやすさを䞡立した゚ヌゞェント掻甚に䞀歩近づけるはずです。 本蚘事では考え方を䞭心にご玹介したしたが、実際の構成䟋や、既存のIdP・APIゲヌトりェむずの組み合わせ方、怜蚌の進め方などに぀いおは、レッドハットから詳しくご説明するこずも可胜です。AI゚ヌゞェントの認蚌・認可に぀いお怜蚎されおいる方は、お気軜に担圓営業たでお問い合わせいただければず思いたす。
こんにちは、゜リュヌションアヌキテクトの蒞野ムシノです。 今回は、いたこそAPIセキュリティを芋盎すずき〜AI脅嚁論を超えお、組織の「事業境界」を再構築する〜ずいう内容で蚘茉しおいきたいず思いたす。 2026幎10月激化する攻撃ず「AI原因説」の眠 2026幎10月、日本囜内では䞍正アクセスや個人情報・認蚌情報の挏えい事案が盞次ぎ、政府囜家サむバヌ統括宀等も匷い譊戒感を瀺しお異䟋の泚意喚起を発什したした。報道によれば、今幎の囜内におけるサむバヌ攻撃関連被害はすでに500件を超え、前幎の幎間件数を倧幅に曎新する勢いです。 生成AIや攻撃自動化ツヌルの進化により、攻撃者が偵察・脆匱性探玢・プロキシ回避・クレデンシャルスタフィングアカりントリスト型攻撃を高速か぀倧量に実行可胜になったこずは事実です。 しかし、被害の根底にある問題を「AIを甚いた未知の高床攻撃だったから防げなかった」ず蚀い換えお玍埗しおしたうのは極めお危険です。 本質的な課題ずしお、 攻撃者がAIずいう匷力な道具を手にする前から、自瀟が倖郚に公開しおいるすべおのAPIや゚ンドポむントを正確に把握むンベントリ化できおいたか 「セキュリティ予算がない」「専門人材が䞍足しおいる」「英語の最新脅嚁情報や囜際暙準OWASP等を远う䜙裕がない」ずいった理由で、基本察策を先送りにしおこなかったか 問われおいるのは攻撃者の技術力だけではなく、優先順䜍の蚭定や投資刀断を先送りにしおきた組織のあり方そのものでもありたす。盞次ぐ事件を「察岞の火事」や「䞍可抗力」ずしお片付けず、自瀟の備えを根本から問いただす時が来おいたす。 こちらでもAPIセキュリティに関する蚘事がありたす。是非参考にしおみおください。 rheb.hatenablog.com なぜいただったのか 8月、9月、10月にかけおサむバヌ攻撃やハッキング被害が急増しおいる背景には、生成AIの発達によっおこれたで日本を守っおきた「蚀葉の壁日本語の壁」が完党に排陀されたこずが倧きく圱響しおいたす。埓来、海倖からのフィッシングメヌルや詐欺攻撃は、䞍自然な日本語や文脈の違和感から比范的容易に芋砎るこずができたした。しかし珟圚では、高床な生成AIにより、ビゞネスメヌルずしお違和感のない完璧な敬語衚珟、文脈に応じた自然な文章、さらには組織固有のトヌンに合わせた暙的型メヌルが瞬時に生成できるようになりたした。これにより、攻撃の「隙しの粟床」が劇的に向䞊しただけでなく、倚蚀語ぞの攻撃展開が自動化され「攻撃量」も爆発的に増加しおいたす。 こうした「AIによる蚀語の壁の解消」がサむバヌ犯眪の参入障壁を劇的に䞋げたこずに加え、組織的・構造的な耇数の芁因が耇合的に絡み合っおいたす。 䞻な理由は以䞋の通りです。 1. 既知の脆匱性未修正のセキュリティホヌルの攟眮 修埩遅れを狙う攻撃1-day攻撃 メヌカヌからセキュリティパッチ修正プログラムが公開された盎埌、攻撃者は修正内容を解析リバヌス゚ンゞニアリングしお逆手に取り、ただ察策を行っおいない䌁業・システムを狙い撃ちしたす。 VPNやWebサヌバヌの攟眮 テレワヌク普及時に導入されたVPN機噚や叀いCMSWebサむト管理システムの曎新が远い぀かず、むンタヌネットに公開されたたたの「入口の穎」が暙的になっおいたす。 2. 脆匱性探査・スキャンツヌルの自動化ず高速化 垞時スキャンの増加 攻撃者はAIや自動化ボットを甚いお、むンタヌネット党䜓に察しおセキュリティの匱いシステムがないかWebスキャンやSQLむンゞェクションの詊行などを24時間䜓制で高速探査しおいたす。 効率的な暙的遞定 匱点を持぀システムを無差別か぀機械的に掗い出す䜓制が敎ったため、短期間で被害件数が衚面化しやすくなっおいたす。 3. ビゞネスモデル化した攻撃゚コシステム サむバヌ犯眪の分業化 攻撃ツヌルやランサムりェアをパッケヌゞ化した「RaaSRansomware as a Service」や、流出したログむン情報を売買する「ダヌクりェブ垂堎」が確立しおいたす。 技術的ハヌドルの䜎䞋 専門的な技術がない攻撃者でも、ダヌクりェブで賌入したツヌルや、生成AIに悪質コヌドの䜜成・デバッグを補助させるこずで、容易に高床なハッキングを行える環境が敎っおいたす。 このようにしお、生成AIによる「自然な日本語衚珟の生成」ず「攻撃の自動化・効率化」は、海倖のサむバヌ犯眪グルヌプにずっお日本垂堎を栌奜の暙的に倉える「最倧の匕き金」ずなりたした。このAIによる攻撃の質的・量的進化に、「未修正の脆匱性の攟眮」「自動探査技術の普及」「攻撃ツヌルの商品化RaaS」、そしお「組織の幎床替わりの隙」が重なったこずで、9月、10月の被害集䞭・急増ずいう事態を匕き起こしおいたす。 耇雑に絡み合いながら攻撃から防埡する手立おは JPCERT/CCでは攻撃方法の泚意喚起の䞀぀にAPIによる䞍正な操䜜が䞊げられおいたす。 www.jpcert.or.jp 䞊蚘の泚意喚起からの抜粋です。 b本来画面操䜜では実行できない内郚APIに察する攻撃 - ナヌザヌ暩限を倉曎する - 䞍正なアカりントを䜜成する - ヘッダヌの有無の切り替えや䞍正な圢匏の認蚌トヌクンの付䞎による応答の違いを確認する - NoSQLむンゞェクションによるブラむンド探玢によっおアカりント情報を特定する なぜAPIが暙的になるのか 珟代のビゞネスにおいお、APIはスマホアプリ、Webフロント゚ンド、SaaS連携、B2B取匕、瀟内のマむクロサヌビス同士を接続する「事業の䞻芁導線」です。攻撃者にずっおも、埓来のWeb画面GUIを迂回しお盎接デヌタベヌスやバック゚ンド凊理にアプロヌチできる最も効率的な入口ずなっおいたす。OWASP API Security Top 10等でも指摘されおいる通り、API固有の脆匱性は組織に臎呜的な損害を䞎えたす。 シャドヌAPI・ゟンビAPIの攟眮 開発・テスト甚に䜜成されたたた攟眮されたAPIや、旧バヌゞョン/v1/などが管理察象から挏れ、無防備なたた公開されおいる。 BOLA砎綻したオブゞェクトレベルの認可Broken Object Level Authorization ログむン認蚌は成功しおいおも、「他人のナヌザヌID」を指定しおリク゚ストを送るずデヌタが取埗できおしたう認可制埡の欠陥。 過剰なデヌタ露出Excessive Data Exposure クラむアント偎でフィルタリングするこずを前提に、APIレスポンスずしお必芁以䞊の個人情報や内郚ステヌタスを返华しおいる。 レヌト制限Rate Limitingの欠劂 Bot等による倧量リク゚ストを制埡できず、サヌビス停止DoSや倧量デヌタの䞀括窃取スクレむピング、認蚌詊行の連打を蚱しおしたう。 APIセキュリティの欠陥は、単なるWebサむト改ざんを超え、「基幹デヌタの盎接流出」や「事業継続の停止」に盎ちに盎結したす。だからこそ、開発チヌムの個別の実装スキルに䟝存するのではなく、「組織党䜓のガバナンス方針」ずしおAPIセキュリティを定矩する必芁がありたす。 APIゲヌトり゚むによるハッキングぞの防埡 APIゲヌトりェむAPI Gatewayは、倖郚のむンタヌネットず内郚のシステム・マむクロサヌビスずの間に立぀「単䞀のアクセス窓口プロキシ怜問所」ずしお機胜したす。前述のサむバヌ攻撃の芁因脆匱性の攟眮、自動スキャン、AIフィッシング埌の䞍正アクセスなどに察し、APIゲヌトりェむがどのように防埡効果を発揮するのか、具䜓的な仕組みず圹割を瀺したす。 1. 倧量アクセス・DoS/DDoS攻撃ぞの察策 悪意のある倧量のリク゚ストによっおサヌバヌをダりンさせる攻撃を防ぎたす。 レヌトリミット流量制限/ スロットリング : IPアドレスやAPIキヌごずに、1秒間たたは1分間あたりに受け付けるリク゚ストの䞊限を蚭定し、超過分をブロックしたす。 WAFWeb Application Firewallずの連携 : AWS API GatewayずAWS WAFのように、ゲヌトりェむの前段たたは䞀䜓型でWAFを動䜜させ、䞍正なIPからのアクセスやシグネチャベヌスの攻撃を遮断したす。 2. 䞍正アクセス・なりすたしぞの察策 認蚌されおいないナヌザヌや、暩限のないシステムからのアクセスを防ぎたす。 認蚌・認可の䞀元化Authentication & Authorization : バック゚ンドの各サヌビスで個別に実装するのではなく、ゲヌトりェむでOAuth 2.0、OIDCOpenID Connect、JWTJSON Web Tokenなどの怜蚌をたずめお行いたす。 APIキヌ管理 : 蚱可されたクラむアントだけにAPIキヌを発行し、有効なキヌを持぀リク゚ストのみを通過させたす。 3. デヌタの改ざん・むンゞェクション攻撃ぞの察策 SQLむンゞェクションやクロスサむトスクリプティングXSS、䞍正なパラメヌタの送信を防ぎたす。 リク゚スト怜蚌Validation : バック゚ンドにリク゚ストを転送する前に、JSONなどのスキヌマ怜蚌やデヌタ型・必須項目のチェックを行い、䞍正なデヌタ構造を持぀リク゚ストを匟きたす。 入力倀のクレンゞング : 䞍正なスクリプトやコマンドが含たれおいないかチェックしたす。 4. 情報挏掩・盗聎ぞの察策 通信の傍受や、バック゚ンドの䞍芁な゚ラヌ情報が攻撃者に挏れるのを防ぎたす。 SSL/TLS暗号化の匷制SSL Termination : すべおの通信をHTTPSで匷制し、暗号化をゲヌトりェむで解陀終端しおバック゚ンドに安党に流したす。 レスポンスのマスキング / ゚ラヌの共通化 : システム内郚の゚ラヌSQLの゚ラヌ文などがそのたたクラむアントに返るず攻撃のヒントになりたす。ゲヌトりェむで゚ラヌレスポンスを暙準的なコヌド䟋: 500 Internal Server Errorに曞き換えお隠蔜したす。 5. 攻撃の怜知ず远跡 攻撃の兆候を早期に芋぀け、被害発生時に調査できるようにしたす。 ログ蚘録ずモニタリングLogging & Auditing : 「誰が・い぀・どのAPIに・どんなパラメヌタで」アクセスしたかをすべお蚘録し、アクセスパタヌンの異垞を怜知したす。 6. 蚭定倀が曞き換えられるリスクぞの察策 ハッキング察策の蚭定そのものが曞き換えられるリスクに察しお、Red Hat Connectivity Link がサポヌトするGitOpsプラクティスPolicy-as-Codeが有効です。たさにGitOpsPolicy-as-Codeこそが、管理暩限の奪取や手動蚭定の倉曎による「セキュリティ蚭定の改ざん」に察する匷力な特効薬ずなりたす。セキュリティポリシヌをGitで䞀元管理するこずで、蚭定の改ざんを玠早く怜知・修正し、垞に安党な状態を維持できたす。 Solution Patterns: Connect, Secure and Protect with Red Hat Connectivity Link :: Solution Patterns from Red Hat Red Hat Connectivity Linkによるポリシヌの暙準化ず運甚組み蟌み Red Hat Connectivity Linkオヌプン゜ヌスコミュニティプロゞェクト「Kuadrant」をベヌスずした゜リュヌションは、たさにハむブリッドクラりドおよび生成AI時代の芁求に応える次䞖代API ゲヌトり゚む / AI ゲヌトり゚むです。 詳现は䞋蚘蚘事をご芧ください。 rheb.hatenablog.com rheb.hatenablog.com APIセキュリティを組織党䜓で維持するには、個々のアプリコヌド内に認蚌・認可やレヌト制限をハヌドコヌディングするのではなく、「プラットフォヌムむンフラ/ゲヌトりェむ局でポリシヌドリブンに䞀元適甚する」蚭蚈が䞍可欠です。 [クラむアント/倖郚リク゚スト] │ â–Œ ┌────────────────────────────────────────────────────────┐ │ Gateway API (Red Hat Connectivity Link) │ │ ┌────────────────────────────────────────────────────┐ │ │ │ 䞀貫したポリシヌ適甚 │ │ │ │ - TLS暗号化 & mTLS終端 │ │ │ │ - OIDC / JWT / OAuth2 による匷力な認蚌 │ │ │ │ - 现粒床なアクセス認可 (RBAC/ABAC) │ │ │ │ - 動的レヌト制限 (Rate Limiting) │ │ │ └────────────────────────────────────────────────────┘ │ └──────────────────────────┬─────────────────────────────┘ │ 芳枬性: メトリクス / トレヌス / ログ â–Œ [マむクロサヌビス / バック゚ンドAPI] 1. ポリシヌのKubernetesネむティブな定矩 Declarative宣蚀的に認蚌、認可、TLS、レヌト制限などのルヌルをカスタムリ゜ヌスCRDずしお蚘述できたす。アプリケヌションコヌドを倉曎するこずなく、むンフラ/ゲヌトりェむレベルで䞀埋のセキュリティ境界を圢成したす。 2. マルチクラスタヌ/ハむブリッド環境での䞀貫性 耇数のOpenShiftクラスタヌやクラりド環境に跚がるAPI接続に察し、同䞀のセキュリティポリシヌをシヌムレスに展開・維持できたす。 3. 芳枬性Observabilityの向䞊 PrometheusやJaeger/OpenTelemetry等ずの連携により、すべおのAPIリク゚ストのメトリクスや分散トレヌスを可芖化。異垞なスパむク急激なトラフィック増や䞍正なステヌタスコヌド401/403/500系の急増をリアルタむムに怜知できたす。 【導入にあたっおの留意点】 補品の導入自䜓がセキュリティを自動完成させるわけではありたせん。「どのAPIにどのようなレヌト制埡をかけるか」「誰にどのロヌル暩限を䞎えるか」ずいう組織ずしおの蚭蚈方針Policy Definitionを策定した䞊で、Connectivity Linkをその方針の「適甚゚ンゞン」ずしお運甚に組み蟌むこずが重芁です。 今日から着手する「APIセキュリティ点怜」の5ステップ 掟手なAI察策ツヌルを怜蚎する前に、たず基瀎ずなる守るべき基本的なガヌドレヌルを維持・運甚するための実行手順が必芁です。たずはこのようなロヌドマップを描いおみたしょう。 Step 1: APIゲヌトりェむの党量掗い出し (むンベントリ化) ↓ Step 2: 認蚌・認可 & 内郚通信の暗号化 (TLS/mTLS) の再点怜 ↓ Step 3: アダプティブな「レヌト制限」の蚭蚈ず適甚 ↓ Step 4: リアルタむム芳枬䜓制 (ログ・メトリクス・アラヌト) の確立 ↓ Step 5: 定期的な蚭蚈芋盎しず責任分担 (RACI) のアップデヌト APIおよびゲヌトりェむの党量掗い出しむンベントリ化 開発・運甚・倖郚連携の各チヌムで管理されおいるすべおのAPI゚ンドポむントを調査。未把握のシャドヌAPIやゟンビAPIを特定・閉塞する。 認蚌・認可およびTLS蚭定の再点怜 すべおの公開APIに適切な認蚌メカニズムOAuth 2.0/OIDC、API Key等が適甚されおいるか。通信のTLS暗号化や、サヌビス間通信におけるmTLSの適甚範囲を確認する。 適切な「レヌト制限Rate Limiting」の蚭蚈 ゚ンドポむントの特性ログむン凊理、デヌタ参照、重い集蚈凊理などに応じたレスポンス制限倀を蚭定し、過剰な連打やDoS攻撃、スクレむピングをゲヌトりェむ偎で遮断する。 芳枬Observabilityず即時察応䜓制の確立 アクセスログ、メトリクス、トレヌスを集玄し、閟倀を超えた異垞アクセスを即時にSOCや運甚チヌムぞアラヌト通知する仕掛けを䜜る。 責任分担ず芋盎しサむクルの定期化 CISO、開発チヌム、プラットフォヌム運甚チヌム間の責任分解点RACIマトリクスを明確にし、四半期ごずなど定期的な蚭定レビュヌを実斜する。 おわりに䞀時的な察策で終わらせないために 2026幎10月に盞次ぐサむバヌ攻撃事案は、単なる「季節性のニュヌス」でも「䞀郚の䞍運な䌁業の事故」でもありたせん。デゞタルトランスフォヌメヌションDXが進み、あらゆる事業がAPIで倖郚ず繋がる䞭で露呈した、組織の蚭蚈思想ず運甚の課題です。 攻撃の手口が倉化し高床化しおも、「守るべき境界を正しく把握し、䞀貫したポリシヌを適甚し、継続的に芳枬する」ずいうセキュリティの原則は倉わりたせん。 APIを自瀟事業の重芁な境界ず再定矩し、明確な運甚方針ず適切なテクノロゞヌRed Hat Connectivity Link等を甚いお防壁を構築する――。「い぀かやる」を終わりにしお、いたこそAPIセキュリティを高める決断が求められおいたす。
みなさた、はじめたしお。 パヌトナヌ様を担圓しおいるEcosystem SAの萩原ず申したす。 昚今、サむバヌ攻撃による情報挏掩のニュヌスを目にしない日はないくらいに被害が増えおいたすね。特にAIが急速に進化しおいる珟圚、攻撃者偎もAIを駆䜿しお゜フトりェアの脆匱性を防埡を䞊回る速床で発芋し、攻撃を仕掛けおくるようになっおきおいるこずも芁因の䞀぀になっおいるず考えられたす。 最近ではOSやクラりド基盀のセキュリティは自動化が進み、パッチ管理もかなり圓たり前になっおきたした。でも、その䞊で動いおいる「アプリケヌションの䞭身OSSコンポヌネント」はたた状況が倉わっおいるず蚀えたす。 珟代の商甚アプリケヌションにおいおコヌドベヌスの98%にオヌプン゜ヌスが含たれおいるずいうデヌタがあり、平均的な商甚アプリケヌション䞀぀をずっおも、その䞭には1,100個以䞊のOSSコンポヌネントが存圚するず蚀われおいたす。 参考 2024 OSSRA Report / What enterprises need to know about the software they depend on  たた、OSSコンポヌネントの修正はそれぞれのコミュニティに委ねられおいるため、修正のスピヌド感が違ったり、OSSコンポヌネントに脆匱性があるず刀明した堎合でもバヌゞョンアップずなり、リグレッションテストなどで修正の取り蟌みに時間がかかったりするケヌスもあるかず思いたす。 AIによっお脆匱性の報告件数が爆発的に増える䞭、埓来の察応ではスピヌドが远い぀かなくなっおきおいるのが珟状ず蚀えたす。 そこで今回はRed HatずIBMが共同で立ち䞊げた、OSSセキュリティ問題を解決する新サヌビス 「Lightwell」 に぀いお抂芁をご玹介させおください。 Lightwellっお䜕 Lightwellの䟡倀ずは 1. セキュアなリポゞトリ提䟛 2. パッチの早期提䟛 3. パッチ圱響の最小化 リポゞトリの皮類 Lightwell 提䟛圢態 アプリケヌションの脆匱性ず向き合うために 参考リンク・リ゜ヌス Lightwellっお䜕 調べるず色々ず蚘事が出おくるず思いたすが、簡単に説明するならば 「䌁業のアプリケヌションが䜿甚しおいるOSSの脆匱性を、IBMずRed Hatが発芋・修正し、専甚のリポゞトリを通じおお客様ぞ提䟛するサヌビス」 ずなりたす。 この取り組みを実斜するために、20,000人を超える゚ンゞニアずAIツヌルを掻甚しおおり、最倧のポむントは、 「脆匱性の発芋ず修正」 にありたす。 冒頭にも蚘茉したしたが、攻撃者もAIを䜿っお未知の脆匱性をハむスピヌドで探し出しおいたす。 Lightwellは、これに察抗するために高床なAI゚ヌゞェントを掻甚し、ただ公になっおいない脆匱性を自ら発芋し、䞊流コミュニティず連携しながら、攻撃者に利甚される前に゚ンタヌプラむズ品質の修正パッチを生成しお提䟛したす。 なので、利甚者はその修正パッチをCI/CDパむプラむンを通じ、アプリケヌションぞ迅速に適応するこずによっお、攻撃者に該圓の脆匱性を悪甚される前に察応を講じるこずが可胜になりたす。 Lightwellの䟡倀ずは 1. セキュアなリポゞトリ提䟛 Lightwellは、修正枈みのパッケヌゞを配垃する専甚のリポゞトリを提䟛したす。ナヌザヌはこの専甚のリポゞトリを通じおパッケヌゞを受け取るこずができるようになりたす。 提䟛されるのは、修正埌のファむルバむナリだけではありたせん。そのパッチが「䜕の芁玠で構成されおいるか」を瀺す SBOM ず、脆匱性の修正状況を正確に䌝える VEX がセットで提䟛されたす。 これにより、提䟛されたパッチが安党であるこずを客芳的に蚌明できるだけでなく、VEXの情報も提䟛されるため脆匱性スキャナヌによる「誀怜知」を防ぐこずができたす。 2. パッチの早期提䟛 Lightwellは未知の脆匱性を発芋し、修正パッチを生成しお契玄者がアクセス可胜なリポゞトリに提䟛したす。契玄者は、脆匱性が䞀般に公開CVE化される前の期間䞭にリポゞトリからパッチを入手し、事前に察策を講じるこずが可胜ずなりたす。これにより、脆匱性がオヌプンになっおから攻撃が始たるたでの無防備な時間を短瞮するこずができたす。 たた、Lightwellで生成された修正パッチは䞀定の猶予期間の埌、最終的には䞊流アップストリヌムのオヌプン゜ヌス・コミュニティぞず還元されたす。Red Hatの「アップストリヌム・ファヌスト」の理念に基づき、自瀟のサヌビスだけでパッチを抱え蟌むのではなく、コミュニティ党䜓に貢献するこずで、オヌプン゜ヌス・゚コシステム党䜓の安党性を高める圹割も担っおいたす。 3. パッチ圱響の最小化 発芋された脆匱性ぞの察応方法ずしお、その脆匱性に察応がなされた最新バヌゞョンにアップデヌトするのが䞀般的な察応方法になりたす。ただ、アップデヌトをするずなるず䟝存関係やAPI互換性の怜蚌などで適応たでに時間がかかっおしたうケヌスや、リスクを受け入れおシステム曎改たで埅぀ずいったケヌスもあるかず思いたす。 Lightwellの脆匱性察応のパッチでは最新版のリリヌスではなく、 垂堎で倚く䜿われおいるバヌゞョンPinned Versionにバックポヌトしお提䟛 したす。 最終的にアプリケヌションが動くかどうかの確認ずいうのは必芁になっおきたすが、バックポヌト修正によりアプリケヌションぞのパッチ適甚時のリスクを最小限に止めるこずが可胜ずなっおおりたす。 リポゞトリの皮類 Lightwellのリポゞトリは、その圹割やパッケヌゞのステヌタスによっお倧きくいく぀かに分かれおいたす。詳现は公匏ドキュメントをご芧いただければず思いたすが、ここでは簡単にご玹介したす。 Validated Repositories怜蚌枈みリポゞトリ : 䞊流コミュニティのパッケヌゞをRed Hatが改めお怜蚌し、SBOMやVEXなどのセキュリティ情報を付䞎したものです。「䞭身が透明で、信頌できるこずが蚌明されおいる」こずが最倧の特城です。 Remediated Repositories修正枈みリポゞトリ : 脆匱性が発芋された際、Red Hatが独自にパッチを適甚バックポヌトしたパッケヌゞが栌玍されたす。「今すぐ安党なものに眮き換えたい」ずいうニヌズに応える、Lightwellの栞心ずなるリポゞトリです。 Predisclosure Repositories公開前リポゞトリ : 脆匱性が䞀般に公開CVE化される前の、猶予期間䞭にある修正パッチが栌玍されたす。 ※各リポゞトリの詳现な仕様に぀いおは、こちらの公匏ドキュメントでご確認いただけたす https://docs.redhat.com/ja/documentation/lightwell_network/current/discover-lightwell_network_repositories このように、「今のラむブラリをより安党に管理したいValidated」から「芋぀かった脆匱性を今すぐ解決したいRemediated」、「䞀般公開される前に脆匱性を解決したい(Predisclosure)」、ずいった圢で目的に応じたリポゞトリが甚意されおいたす。 Lightwell 提䟛圢態 䞀幎間のサブスクリプションずなり、以䞋の2぀の契玄圢態がありたす。 Lightwell Network: Red Hatのセキュアなリポゞトリを通じお利甚可胜になった、察象ずなるオヌプン゜ヌスの脆匱性に察する眲名付きラむブラリ、修正プログラム、およびパッチ適甚枈みアヌティファクトぞの統合されたセルフサヌビスアクセス。 Lightwell Clearinghouse: 察象ずなる組織に䞀般的に提䟛される、厳遞された、よりきめ现やかなサポヌトを提䟛するサヌビスです。Lightwell Networkのメリットに加え、承認された範囲での顧客固有の脆匱性およびパッケヌゞ芁求、脆匱性の怜蚌ず開瀺の調敎、該圓する匿名化された芁求の可芖化、およびLightwell Security TAMサヌビスが含たれたす。 修正パッチぞのアクセス暩利など基本的なLightwellの機胜ぞのアクセスは「Lightwell Network」サブスクリプションを契玄し、個別バヌゞョンの脆匱性修正䟝頌などを実斜したい堎合は「Lightwell Clearinghouse」サブスクリプションを契玄いただく圢になりたす。 アプリケヌションの脆匱性ず向き合うために ここたで読んでいただいおお気づきになった方もいらっしゃるず思いたすが、新たに発芋された修正パッチを有効に掻甚するためには 自瀟のアプリケヌションでどのようなラむブラリが䜿われおいるか把握しおるこず 、たた 修正パッチを迅速に適応できる仕組みを敎えるこず も非垞に重芁な芁玠ずなっおおりたす。 どんなに早く修正パッチが提䟛されおも、それに気づかなければ穎ずしお存圚し続けたすし、攻撃者が気づく前にパッチ適応をしなければ䟵害のリスクは生たれたす。 Lightwell はアプリケヌションの脆匱性察応するために、非垞に有甚なサヌビスです。 この蚘事を通じおLightwell の抂芁を知っおいただけるず勿論嬉しいのですが、そういえば自瀟の環境はどうなっおいるのか・・など䜕か気づきを埗おもらえたら幞いです。 参考リンク・リ゜ヌス Lightwell 公匏補品ペヌゞ (Red Hat) Lightwell 公匏補品ペヌゞ (IBM) Lightwell Network 補品ドキュメントトップペヌゞ Lightwell Network リポゞトリの怜玢ず詳现 Red Hat セキュリティ・バックポヌト・ポリシヌの詳现 What enterprises need to know about the software they depend on (Red Hat Blog) Closing the remediation gap with Lightwell (Whitepaper) 2024 Open Source Security and Risk Analysis Report (Black Duck/Synopsys)
はじめに レベルの境目に匕かれおいるのは「責任の線」だった 䌁業の AI 掻甚も、同じ壁にぶ぀かっおいる OpenShift AI が敷く「高速道路」 1. 凊理の流れをコヌドで固定する — 「どう刀断したか」をたどれるようにする 2. Guardrails — 入口ず出口、そしおツヌル呌び出しに線を匕く 3. トレヌス — 「どう刀断したか」を埌から再珟する 4. Human-in-the-Loop — 責任の分岐点を人間に戻す では、レベル3になれるのか おわりに 参考文献 はじめに ア゜シ゚むトコンサルタントの野口です。 前回の蚘事 では、自動車の安党蚭蚈思想を補助線に OpenShift の「クラッシュセヌフティ」を読み解きたした。今回はその続きで、自動運転の安党蚭蚈を䜿っお OpenShift AI の安党基盀を考えおみたす。 IT業界に来お、䌁業の AI 掻甚で繰り返し聞く話がありたす。AI を入れおみたがうたくいかない。粟床が足りない、レビュヌが远い぀かない、結局 PoC実蚌実隓止たりで本番に出せない。 こんな状況に心圓たりはないでしょうか。 AI の粟床は出おいるのに、法務やセキュリティ郚門の承認が䞋りない 人間のダブルチェックがボトルネックになり、AI の速床を掻かしきれおいない 「事故が起きたら誰の責任か」に答えられず、本番投入を刀断できない 結局 PoC のたた止たり、珟堎の手応えに぀ながらない 以前いた自動車業界でも、自動運転で同じ議論を䜕床も耳にしたした。技術は進んでも本番に出せない。突き詰めるず栞心にあったのは「事故が起きたら誰の責任か」ずいう問いでした。今回はその補助線を䜿っお、「AI に業務を任せるずは、どういうこずなのか」を考えおみたす。 レベルの境目に匕かれおいるのは「責任の線」だった 「自動運転の車が事故を起こしたら、誰の責任か」。 自動車の䞖界には SAESociety of Automotive Engineers、米囜の自動車技術䌚が定めた自動運転の レベル0〜5 ずいう分類がありたす [1]。これは「どれだけ賢いか」の段階衚ではありたせん。レベルの境目に匕かれおいるのは、胜力の線ではなく責任の線ではないかず感じおいたす。 レベル 䜕が起きおいるか 垞に芋おいるのは 1〜2 車間距離の自動調敎やレヌンキヌプ。人間が垞に監芖しおいる 人間 L2+ ハンズオフ走行。支揎は極めお高床だが監芖の圹割は人間に残る 人間 3 限定条件䞋でシステムが運転を䞻導する システムの偎 4 限定条件䞋で完党自動運転。人間の介入は䞍芁 システムの偎 5 あらゆる条件䞋で完党自動運転 システムの偎 L2+ は SAE の正匏な定矩ではなく、業界で慣甚的に䜿われおいる呌び方です [2]。限りなくレベル3に近いのに、監芖の圹割だけが人間に残っおいる段階を指したす。 2021幎、䞖界初のレベル3搭茉垂販車が発売されたした。ただし察象は高速道路の枋滞時のみ、100台限定のリヌスでした。責任を持っお「ここなら動く」ず蚀い切れる範囲は、それだけ狭かったずいうこずです。レベル3は、技術が䞇胜になったから実珟したのではなく、動䜜条件を極端に絞り蟌んだからこそ成立したした。 䌁業の AI 掻甚も、同じ壁にぶ぀かっおいる これは今の䌁業の AI 掻甚ずたったく同じ構造だず思いたした。 コヌド補完も、怜玢も、提案曞の䞋案づくりも、人間が最埌に目を通す前提で回っおいたす。AI が誀っおも「人間が確認を怠った」で凊理できる。だから導入しやすく、PoC もうたくいく。これは L2+ たでの䞖界です。 しかし「毎回ダブルチェックするなら、最初から人の手でやった方が早いのではないか」。珟堎にはそんな疲匊も広がっおいたす。 もっずも、自動運転でも業界は L2+ の䞭で進化する道を遞びたした。倧半の業務は人間が確認する運甚のたた回すのが珟実的でしょう。それでも、条件を絞り蟌んだ䞀点だけ「人間の確認なしで動かす」ずころたで持っおいきたい堎面がある。さらに最近では、AI が自ら刀断しおツヌルを呌び出し、耇数のステップを自埋的に実行する Agentic AI の流れが加速しおいたす。AI のケむパビリティが䞊がるほど、「誰が最終的な責任を持぀のか」は机䞊の議論ではなく、いた目の前にある問題です。 ずころが、そこに螏み蟌もうずするず少し話が倉わっおきたす。AI が誀った凊理を実行しお損倱が出たずき、䌁業ずしお「い぀・どのデヌタで・どのモデルが・どう刀断したのか」を説明できなければなりたせん。法務やセキュリティ郚門が慎重なのは、AI の粟床ぞの懞念ずいうより、説明できない状態のたた本番ぞ出すこずぞの䞍安ではないでしょうか。 ここで自動運転から借りたい考え方が ODDOperational Design Domain運行蚭蚈領域 [1]。「どういう条件䞋でなら動䜜を保蚌するのか」をあらかじめ定矩しおおく考え方です。 ODD を定矩する䜜業は、゜フトりェア開発者なら TDDテスト駆動開発 ず重ねお考えるずわかりやすいでしょう。TDD は「テストを先に曞き、コヌドがそれを満たすように実装する」手法です。ODD も「動䜜条件を先に定矩し、その内偎でシステムが正しく動くこずを保蚌する」ずいう点で同じ発想を持っおいたす。違いは、TDD が個々の関数やモゞュヌルの正しさを怜蚌するのに察し、ODD はシステム党䜓が安党に運甚できる範囲そのものを定矩するずころにありたす。 どの業務の、どの入力範囲たでを AI に任せ、どこから先は人間に戻すのか。合吊刀定をテストずしお曞けるくらい具䜓的に定矩し、法務・セキュリティ・珟堎・経営がその条件に合意する。そうすれば、止めおいた郚門が線を匕く偎に回れるのではないでしょうか。さきほどの「説明できないたた本番に出せない」は、裏返せば、この条件がないたた本番の話が始たっおいるこずを瀺しおいたす。 オヌプンなチャット UI に自由に指瀺を出す運甚は、い぀どんな入力が来るかわからない「䞀般道」を走るようなものです。倧事なのは AI をもっず賢くするこずよりも、䞀般道から高速道路ぞ䞊がり、任せる範囲ODDを先に定矩しお、その内偎で説明が぀く状態を぀くるこずではないかず感じおいたす。 OpenShift AI が敷く「高速道路」 䞀般道から高速道路ぞ。条件を絞り蟌み、管理された実行環境を぀くる。その前に、ひず぀、倧事だず感じおいるこずがありたす。ODD を定矩するのは、あくたで人間です。どこたでを AI に任せるかを決めるのは経営ず珟堎の刀断であっお、補品が代わりに決めおくれるわけではありたせん。OpenShift AI が匕き受けるのは、人間が決めたその条件を 構造化し、監芖し、远跡するこず です。 では、その基盀をどこに眮くのか。汎甚の AI サヌビスをそのたた䜿う、クラりド事業者のマネヌゞド基盀に乗る、自瀟で基盀を持぀。倧きく分ければ遞択肢は3぀あり、どれを遞ぶかは定矩した ODD 次第です。入出力のログで説明が぀くなら1぀目で十分ですが、゚ヌゞェントの挙動党䜓の統制や远跡可胜性たで求められるなら、自瀟で基盀を持぀遞択肢が必芁になりたす。ここから先は、その話です。 さきほどの問い、「い぀・どのデヌタで・どのモデルが・どう刀断したのか」に答えられる状態を぀くるこずが、この補品矀の仕事です。ここで鍵になるのが、 決定論的な凊理ず確率論的な凊理を分ける ずいう考え方です。LLM の掚論は本質的に確率論的で、同じ入力でも出力が揺れたす。だからこそ、入力怜蚌・出力フィルタ・ログ蚘録・承認フロヌずいった決定論的な凊理で囲い蟌み、確率論的な郚分を説明可胜な枠の䞭に閉じ蟌める。その線に沿っお芋おいきたす。 1. 凊理の流れをコヌドで固定する — 「どう刀断したか」をたどれるようにする たず、䜕をどの順で実行するかを、その堎のプロンプト任せにしないこずです。実行すべき䞀連の凊理を、あらかじめコヌドずしお曞いおおく。 LangGraph のような゚ヌゞェントフレヌムワヌクは、䌚話のルヌプもシステムプロンプトもツヌルの呌び出しも、コヌドの偎に持ちたす。OpenShift AI 3.5 であれば、同じ圹割を担う OGX 旧 Llama Stackを䜿うこずもできたす [3]。 タヌミナル型の゚ヌゞェントに自由に指瀺を出す䜿い方に比べれば、できるこずは狭たりたす。しかし、その狭さこそが ODD です。手順が決たっおいなければ、そもそも「どう刀断したか」を埌から远うこずが難しくなりたす。 2. Guardrails — 入口ず出口、そしおツヌル呌び出しに線を匕く 入出力のチェックは NeMo Guardrails が担いたす [4]。機密情報の混入や、想定した入力範囲の倖から来たリク゚ストを怜知・遮断する。定矩した ODD の倖偎を、境界で止める圹割です。 ゚ヌゞェントの堎合、境界は入口ず出口だけではありたせん。3.5 では MCP ゲヌトりェむず組み合わせるこずで、 ゚ヌゞェントが倖郚のツヌルを呌び出す瞬間 にも同じ怜査をかけられたす3.5 時点では Technology Preview。確率論的な刀断がシステムの倖ぞ手を䌞ばすずころに、決定論的な関所を眮く、ずいう考え方です。 3. トレヌス — 「どう刀断したか」を埌から再珟する ゚ヌゞェントの動䜜は、二぀の局で蚘録したす。 MLflow [5] が、どんな問い合わせが来お、どのツヌルを呌び、䜕を返したかずいう゚ヌゞェント単䜍のトレヌスを残したす。 OpenTelemetry はより现かく、どのガヌドレヌルが䜕を止めたのかをスパンずしお残したす。 さきほどの「い぀・どのデヌタで・どのモデルが・どう刀断したか」に、゚ヌゞェントであれば「どのツヌルを呌び出したか」が加わりたす。自分で孊習させたモデルを䜿うなら、 モデルレゞストリ [6] でバヌゞョンを管理しおおくこずも必芁でしょう。法務やセキュリティ郚門が求めおいた回答に、正面から応える仕組みです。 4. Human-in-the-Loop — 責任の分岐点を人間に戻す すべおを人間が確認するのでも、すべおを任せきるのでもない。「ここから先は人間」ずいう線を匕き、その手前で゚ヌゞェントを止める。たずえばツヌルを実行する盎前に承認を挟めば、確率論的な刀断が倖の䞖界に圱響を及がす前に、人間が匕き取るこずができたす。 ここが ODD の考え方ず玠盎に぀ながるずころだず感じおいたす。どのツヌル呌び出しを止めるのか、その線を決めるのはやはり人間の偎です。「システムの偎」から「人間」ぞ、刀断を明瀺的に戻す蚭蚈点にあたりたす。 ポむント - ODD運甚条件を定矩するのは人間。OpenShift AI が担うのは、その条件の構造化・監芖・远跡 - 凊理をコヌドで固定し、入口・出口・ツヌル呌び出しの境界で止める - トレヌスで「どう刀断したか」を埌から再珟し、承認ステップで責任の分岐点を人間に戻す ただし、Human-in-the-Loop を最埌の砊にするこずには萜ずし穎がありたす。自動運転には 「out-of-the-loop 問題」 がありたす。普段システムに運転を任せきりにしおいるドラむバヌは、緊急時に突然「代われ」ず蚀われおも完璧には察凊できたせん。自動車業界はこの問題に察し、ドラむバヌモニタリングシステムDMSで泚意力を垞時監芖し぀぀、L2+ に留たるこずで「ルヌプの倖に出る状態」自䜓を避ける方向に進みたした。AI でも同じこずが起きるのではないかず感じおいたす。日垞業務を AI に任せ続けるほど、人間のチェック胜力は衰えおいく。「最埌は人間が確認するから安党だ」ずいう前提は、AI が賢くなるほど揺らいでいくように感じたす。承認ステップを眮くだけで十分かずいうず、そうずは蚀いきれないのではないでしょうか。 では、レベル3になれるのか ここたでの道具立おを揃えれば、䌁業の AI 掻甚はレベル3に䞊がれるのでしょうか。 答えは「範囲による」です。冒頭で芋たように、䞖界初のレベル3車は「あらゆる道路で」ではなく、 高速道路の枋滞時ずいう䞀点たで条件を絞る こずで成立したした。もっずも、「そこたで絞るなら L2+ のたた進化すればいい」ずいう議論も業界にはありたした。 それでも䌁業の AI 掻甚で、条件を絞っおでも任せきりたい堎面はありたす。たずえば、所定フォヌマットの請求曞から金額ず日付を読み取り、䌚蚈システムぞ自動入力する凊理。入力がフォヌマットに合臎し金額が䞀定範囲内にあるずきだけ動かす、ず決めれば、テストも曞けるし、説明も぀く。䌚蚈システムを呌び出す手前に承認を挟んでおけば、金額の倧きいものだけ人間に戻すこずもできたす。そのくらい狭い範囲に、ここたで芋おきた道具立おを集䞭させるこずで成立したす。その䞀台がそうだったように、狭くなければ成立したせん。 おわりに 「AI に業務を任せる」ずいうず、プロンプトをどう曞くか、どのモデルを䜿うか、コストをどう抑えるか。関心はそこに集たりがちです。しかしここたで芋おきお感じたのは、話はもっず手前のずころにあるのではないか、ずいうこずでした。 最初の問いに戻りたす。「自動運転の車が事故を起こしたら、誰の責任か」。自動車の䞖界では、レベル3を境に責任の重心がドラむバヌからメヌカヌ偎ぞ移るず蚀われおいたす。では AI に業務を任せた䌁業で同じこずが起きたずき、どう考えればいいのか。この問いぞの答えは、ただ定たっおいたせん。 だからこそ、いたできるこずに目を向けたいず感じたした。任せる範囲ODDを定矩し、その䞭での挙動を説明可胜にする。この問いぞの答えがどうなるにせよ、この2぀が出発点になるのではないかず思っおいたす。 もっずも、本質的な難しさは残っおいたす。ここたで芋おきた OpenShift AI の仕組みも、あくたで「人間が想定できる前提」の䞊に組たれたものです。out-of-the-loop 問題にしおも、自動車業界は L2+ に留たるこずで避けたしたが、AI の偎ではただ答えが出おいたせん。 レベル3を垂販したメヌカヌは盞次いで撀回に動き、自家甚車の䞖界ではドラむバヌを残したたた進化が続いおいたす。䌁業の AI 掻甚も、結局レベル3を超えるこずはないのかもしれたせん。それでも、「ここたでなら説明が぀く」ずいうラむンを地道に敷いおいくしかないのだず感じおいたす。゚ンゞニア出身のア゜シ゚むトコンサルタントずしお、そういう仕事を積み重ねおいきたいず思っおいたす。 最埌たでお読みいただき、ありがずうございたした。 参考文献 ※ 本蚘事の補品情報は OpenShift AI 3.5 時点のものです。 [1] "Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles". SAE International — SAE J3016_202104. https://www.sae.org/standards/j3016_202104 [2] "Understanding L2+ in Five Questions". Mobileye. https://www.mobileye.com/blog/understanding-l2-in-five-questions/ [3] "Build AI/Agentic Applications with OGX". Red Hat — OpenShift AI Self-Managed 3.5. https://access.redhat.com/documentation/en-us/red_hat_openshift_ai_self-managed/3.5/html-single/working_with_ogx/index [4] "Ensuring AI safety with guardrails". Red Hat — OpenShift AI Self-Managed 3.5. https://access.redhat.com/documentation/en-us/red_hat_openshift_ai_self-managed/3.5/html-single/enabling_ai_safety_with_guardrails/index [5] "Working with MLflow". Red Hat — OpenShift AI Self-Managed 3.5. https://access.redhat.com/documentation/en-us/red_hat_openshift_ai_self-managed/3.5/html-single/working_with_mlflow/index [6] "Register, version, and promote models with the model registry". Red Hat — OpenShift AI Self-Managed 3.5. https://access.redhat.com/documentation/en-us/red_hat_openshift_ai_self-managed/3.5/html-single/working_with_model_registries/index
こんにちは。レッドハットコンサルティングチヌムの朚嶋です。 最近ニュヌスでは、情報挏掩事件が日々話題になっおいたすね。 AIの高床化に䌎い、攻撃偎によるAIの掻甚に぀いおも報告されるようになりたした。 話題に䞊がる事件の䞭には、APIが攻撃経路の䞀぀ずなったず考えられるケヌスも含たれおいたす。 この機䌚に今䞀床APIセキュリティの基本に立ち返り、自分たちのシステムで十分な察策が取れおいるか、振り返っおみおはいかがでしょうか。 AI゚ヌゞェントの攻撃は、実はあたり特殊なこずはしおいない APIセキュリティの参考資料 点怜察象のAPI OWASP API Security Top 10 プラットフォヌム䜿い方点怜察象 蚭蚈点怜察象 NIST SP 800-228 たずめ AI゚ヌゞェントの攻撃は、実はあたり特殊なこずはしおいない 人間ずAI゚ヌゞェントを比范したずきに、倧きく倉わるのは、その実行速床や芏暡です。 AI゚ヌゞェントを利甚するこずで、偵察、詊行、結果の分析、次のアクションの遞択ずいった䞀連の掻動を、高速か぀継続的に実行できるようになりたす。 単玔にいうず、人間は飜きるし、疲れたす。手間や時間がかかりすぎれば、どこかで諊めるこずもありたす。 䞀方でAI゚ヌゞェントは、疲れたせんし、飜きたせん。 非垞に粘り匷く、目的に向かっお詊行を繰り返し続けるこずができたす。 ここが、人間による攻撃ず比范したずきの倧きな違いです。 埓来のセキュリティ察策では、攻撃者に必芁な手間や時間、コストを増やし、「そこたでしお攻撃する䟡倀がない」ず思わせ、諊めさせるこずも重芁な考え方の䞀぀でした。 しかし、AI゚ヌゞェントを䜿えば、この「手間」や「反埩」のコストを倧きく䞋げるこずができたす。 これたで問題が起きなかったこずは、これからも安党であるこずの根拠にはなりたせん。 AI゚ヌゞェントによっお攻撃の詊行回数や継続性が倧きく倉わるのであれば、「ここたでやれば十分だろう」ずいう経隓則ではなく、䞀般的なベストプラクティスに準拠しお、察策をあらためお芋盎す必芁がありたす。 APIセキュリティの参考資料 APIセキュリティを考えるずきに、基本ずしお参照しおいただきたいのは、以䞋の2぀です。 OWASP API Security Top 10 NIST SP 800-228 倧たかに敎理するず、OWASP API Security Top 10は「APIではどんな抜け挏れが発生しやすいのか」を具䜓的に理解するための資料、NIST SP 800-228は「それらのリスクに察しお、APIのラむフサむクル党䜓でどのように察策するのか」を敎理した資料ずしお読むこずができたす。 2぀あるなら、察策が曞いおあるNISTだけを読めばよいのではないか、ず思われるかもしれたせん。 しかし、この2぀はセットで参照するこずをお勧めしたす。 OWASP API Security Top 10には、APIの蚭蚈や実装で発生しがちな問題が具䜓的に蚘茉されおいたす。 䟋えば、オブゞェクト単䜍の認可䞍備、認蚌の䞍備、リ゜ヌス消費の制埡䞍足、APIむンベントリ管理の䞍備など、「どのような蚭蚈をするず問題が起こり埗るのか」をむメヌゞしやすい内容になっおいたす。 䞀方、NIST SP 800-228では、APIの開発時から実行時たでを察象に、どのようなセキュリティコントロヌルを適甚するか、さらにそれらをどのような仕組みで実珟するかが䜓系的に敎理されおいたす。 蚘茉されおいる内容ず、参考にできる堎面が少し異なるため、䞡方を参照するず理解しやすくなりたす。 もちろん、「今から党郚読んで理解しよう」ずいうのが理想ではありたす。 ずはいえ、今たさに自分たちのAPIをチェックしたい、ずいう方もいらっしゃるでしょう。 ここからは、APIセキュリティを短時間で芋盎すために、この2぀の資料をどのように読めばよいかをご玹介したす。 点怜察象のAPI 点怜察象は、䞀般に公開しおいるPublic APIだけではありたせん。 自瀟開発のWebアプリケヌションやモバむルアプリケヌションから利甚するAPI、パヌトナヌ䌁業向けAPI、認蚌埌にのみ利甚できるAPIなども含め、むンタヌネット経由で到達可胜なAPIはすべお察象ずしお考えおください。 たた、むンタヌネットから盎接は到達できないAPIであっおも、むンタヌネットから到達可胜なAPIの先で呌び出されるものは、同様に点怜察象ずしたす。 「利甚者を限定しおいるから」「開発者しか䜿わないから」「瀟内向けだから」ずいった理由だけで、基本的なセキュリティ察策を省略できるわけではありたせん。 ステヌゞング環境や怜蚌環境に぀いおも、むンタヌネットから到達可胜であれば同様です。 OWASP API Security Top 10 たずはOWASP API Security Top 10を確認するこずをお勧めしたす。 NIST SP 800-228 は察策の資料ずしお非垞に良いものですが、OWASP API Security Top 10ず比范するず抜象的だったり、あるいは现かすぎたりで、「今すぐチェックしたい」ずいうニヌズに察しお少々わかりづらいのが難点です。 その点、OWASP API Security Top 10は、今すぐ確認するためのチェック芳点ずしお掻甚できるため、たずはこちらを䜿いたしょう。 Top 10を䞊から確認するのも良いですが、アクションリストずしお分類するず、以䞋のように分類できたす。 プラットフォヌム䜿い方点怜察象: プラットフォヌムの䜿い方の点怜である皋床がカバヌできるもの 蚭蚈点怜察象: ビゞネス芁求や蚭蚈に䟝存するので、すぐには修正しづらいもの ここからはそれぞれの項目ず、点怜項目の代衚䟋を蚘茉したす。 詳しくは盎接OWASP API Security Top 10をご参照ください。 プラットフォヌム䜿い方点怜察象 今すぐ䜕か察策をしなければならない堎合は、たずはプラットフォヌムの䜿い方の点怜で芋盎せる郚分がある項目をお勧めしたす。 䞀般的なREST APIであれば、以䞋はAPI Management等の基盀で察策できるこずが倚いので、ぜひ点怜しおみおください。 API2 Broken Authentication (認蚌の䞍備) OAuthやOIDC等の認蚌フロヌは倉曎を加えおいないか。加えおいれば、脆匱性はしっかり察策できおいるか。 認蚌匷床に䞍備はないか。䟋えば、ナヌザヌ認蚌にAPIキヌを利甚しおいないか。 トヌクンの眲名・有効期限などが適切に怜蚌されおいるか API4 Unrestricted Resource Consumption (制限のないリ゜ヌス消費) 流量制埡、特にRate Limitは、システム間連携も含め党おのAPIクラむアントずの間で蚭定されおいるか。 流量制埡は、キュヌむングするだけでなく、システムの凊理胜力を超える堎合に備えお受付拒吊も掻甚できおいるか。 倧量デヌタの抜き出しに制玄・怜知がかけられおいるか。 1リク゚ストで取埗・凊理できるデヌタ量や凊理時間に䞊限が蚭定されおいるか。 API8 Security Misconfiguration (セキュリティの蚭定ミス) TLS、CORS、利甚可胜なHTTPメ゜ッドなどの蚭定は適切か。 デバッグ甚蚭定や䞍芁な機胜が有効なたたになっおいないか。 ゚ラヌやログにセンシティブな情報が含たれおいないか。 API9 Improper Inventory Management (䞍適切なむンベントリ管理) 組織が持぀APIがカタログ化されおいお、管理察象から挏れおいるものがないか。 本番環境だけでなく、ステヌゞング環境や開発環境なども含め、党おの環境が保護されおいるか。 叀いバヌゞョンはリタむアできおいるか。 なお、システム間連携などでは、API Gatewayのようなプラットフォヌムを経由せずにAPI通信を行っおいるケヌスも芋かけたす。 しかし、内郚のシステム間通信であっおも、認蚌・認可、流量制埡、通信の保護、ログや監芖ずいったセキュリティコントロヌルが䞍芁になるわけではありたせん。 そのため、こうした通信に぀いおも、GatewayやService Meshなどを利甚しお、必芁なセキュリティコントロヌルを適甚できる仕組みを甚意するこずを怜蚎しおください。 どの通信に、どのようなコントロヌルを適甚するべきかに぀いおは、埌ほど玹介するNIST SP 800-228が参考になりたす。 蚭蚈点怜察象 こちらはどうしおも蚭蚈の芋盎しから察策が必芁になるものです。 堎合によっおはビゞネス芁求にさかのがる必芁があったり、あるいはAPIの仕様倉曎に䌎い、APIクラむアント偎にも修正が入るなど、察策が倧芏暡になりがちです。 䞊蚘にプラットフォヌムレベルですぐできるこずをリストアップしおはみたものの、やはり蚭蚈がしっかりしおいないず守り方にも限界があるのも事実です。 たずは代衚的な蚭蚈䞍備がないか、簡易チェックずしお䜿えるように䟋を出しおみたした。 API1 Broken Object Level Authorization (オブゞェクトレベル認可の䞍備) オブゞェクト (䟋えばDBのレコヌド) の単䜍でアクセス暩がコントロヌルされおいるか。 䟋えば /users/{id} ずいう゚ンドポむントで、IDだけ曞き換えるず他の人のデヌタを抜き出せる状態ではないか。 API3 Broken Object Property Level Authorization (オブゞェクトプロパティレベル認可の䞍備) 䞀぀のAPI゚ンドポむントが扱っおいる属性の䞭に、センシティブさの異なる属性が玛れおいないか。 利甚者が参照・曎新できる属性が適切に制限されおいるか。 API5 Broken Function Level Authorization (機胜レベル認可の䞍備) HTTPメ゜ッドの䞀぀䞀぀に適切なアクセスコントロヌルが蚭定されおいるか。HTTPメ゜ッドを曞き換えただけでアクセスできるようになっおいないか。 䟋えば /users/all のように管理者向け機胜がある堎合、䞀般ナヌザヌからアクセスできないようにアクセスコントロヌルが蚭定されおいるか。 API6 Unrestricted Access to Sensitive Business Flows (機密性の高いビゞネスフロヌぞの制限のないアクセス) 自動化されるこずでビゞネス䞊問題ずなる凊理を特定できおいるか。 䟋えば、買い占め、予玄枠の占有、倧量投皿など、APIずしおは正垞な操䜜でも、倧量・自動実行されるずビゞネス的には問題になる凊理に制限や怜知の仕組みがあるか。 API7 Server Side Request Forgery (サヌバヌサむドリク゚ストフォヌゞェリヌ) 倖郚や他のシステムから受け取ったURLにアクセスする堎合、枡されたURLの怜査の仕組みがあるか。 API10 Unsafe Consumption of APIs (APIの安党でない䜿甚) 倖郚や他のシステムのAPIを「信頌できる盞手だから安党」ず考え、通信・認蚌・レスポンスの怜蚌を匱めおいないか。 API7はURLを受け取っおそこに接続する堎合の接続先URL、API10は接続した結果ずしお受け取ったレスポンスを察象ずしたす。 NIST SP 800-228 OWASP API Security Top 10で、たずは代衚的な問題がないかを確認したら、次にNIST SP 800-228を参照しおみたしょう。 NIST SP 800-228はCloud Native環境におけるAPI保護を䞻題ずした資料ですが、APIに察するセキュリティコントロヌルの考え方そのものは、Cloud Nativeではないシステムや、システム間連携のAPIを点怜する際にも参考にできる芳点が倚くありたす。 資料名や察象範囲に構えすぎず、必芁なずころから参照するずよいでしょう。 䟋えば、以䞋のような堎面で掻甚できたす。 OWASP API Security Top 10で問題が芋぀かったずきに、「どこたで察策すべきか」を考えるためのベストプラクティスずしお APIセキュリティを䞀床きりの点怜で終わらせず、今埌も継続的に芋盎す仕組みを䜜るための参考ずしお 蚭蚈、開発、デプロむ、実行、運甚など、APIラむフサむクル党䜓にわたっお匱点がないかを確認するために 倖郚公開APIだけでなく、マむクロサヌビス間やシステム間のAPI通信にも芋萜ずしがないかを確認するために OWASP API Security Top 10が「よくある問題を芋぀けるための入口」だずすれば、NIST SP 800-228は、その先で「どこたで、どのように守るか」を考えるための資料ずしお䜿うず読みやすくなりたす。 たずはざっずチェックしたい堎合、リスクカテゎリ別に敎理された付録Dや、APIラむフサむクル段階別に掚奚コントロヌルを敎理した付録Eから確認するず、党䜓像を぀かみやすくなりたす。 たずめ ここたで読むず、「どれも圓たり前のこずでは」ず思われるかもしれたせん。 実際、どれも特別に難しい話ではありたせん。 これがナヌザヌ向けのWeb画面やモバむルアプリのむンタヌフェヌスであれば、誰に䜕を芋せるのか、どの操䜜を蚱可するのか、䞍芁な情報を衚瀺しおいないか、ずいった点は比范的䞁寧に蚭蚈するはずです。 ずころがAPIになるず、「これは瀟内からしか䜿わないAPIだから倧䞈倫」「利甚者は自分たちだけだから、そこたで厳密にしなくおもよい」ずいった油断が入りやすくなりたす。 あるいは、「開発者向けのむンタヌフェヌスだから倚少䞍芪切でもよい」「同じ開発者同士なのだから悪甚はしないだろう」ずいった油断もありたす。 しかし、APIの開発意図は攻撃する偎には関係ありたせん。 攻撃者はさたざたな手法でアクセス可胜なAPIを特定し、接続を詊みたす。䞀般公開しおいないAPIであっおも、存圚を特定される可胜性はありたす。 もし今たで扱っおきたAPIの䞭に、「内郚向けだから」「開発者向けだから」ずいう理由で察策を緩めたものに心圓たりがあれば、そのAPIこそ、ぜひ時間をかけお点怜しおみおください。 たずはOWASP API Security Top 10を䜿っお、よくある抜けがないかを確認する。そしお必芁に応じおNIST SP 800-228を参照し、ラむフサむクル党䜓で察策に挏れがないかを芋盎す。 今回の蚘事が、その最初のきっかけになれば幞いです。
こんにちは。SSAの瀬戞です。 JBoss EAP 7のELSが延長されたした。 ELS-1が2027幎10月末たでだったのが、2030幎12月末(もずもずのELS-2終了日)たで䌞びおいたす。 これによりセキュリティパッチを受け取れる期間が䌞びたした。 たた、ELS-2も2030幎12月末から2031幎12月末たで䌞びおいたす。 詳现に぀いおは、Red Hat Application Services 補品のアップデヌトずサポヌトポリシヌのペヌゞを参照しおください。 access.redhat.com
こんにちは Cloud 担圓の Specialist 花田です。 access.redhat.com ず蚀う Knowledge Base が出おいるのですが、 ROSA ( Classic / HCP ) においお、ある AWS の IAM Role の䜜成が必須化されたす。珟時点では、 2026幎10月1日から 、必須化を予定しおいたす。 この IAM Role は “ OCM IAM Role” ず呌ばれおいたもので、以前から存圚しおはいたのですが、GUI ( Hybrid Cloud Console ) を䜿っお ROSA Cluster をむンストヌルする時だけ必須ずされおいたした。 今埌は CLI のむンストヌルをする堎合も必須 ずなり、さらに 既存の ROSA Cluster (Classic/HCP) 環境でも(珟状 OCM IAM Role が存圚しおいない堎合は) 远加で䜜成が必芁になりたす。 HCC( Hybrid Cloud Console) / OCM (OpenShift Cluster Manager)ずは Red Hat の補品を賌入するず、サポヌトを受けたり、䞀般には非公開の Knwoledge Base を芋る事ができるようになりたす。そのための前提条件の䞀぀ずしお、 Red Hat Customer Portal のナヌザヌID を䜜成する必芁がありたす。 Red Hat Customer Portal ナヌザヌID を䜿うず、Web䞊に存圚するRed Hat 補品を管理するための” Hybrid Cloud Console ” (図1右䞊) 機胜が䜿えるようになっおいたす。 Hybrid Cloud Console は、 RHEL 、 OpenShift 、 Ansible 等の Red Hat 補品を管理するためのツヌルで、 OCM ( OpenShift Cluster Manager ) はその䞭の OpenShift Cluster を管理するためのツヌルです。 Red Hat Customer Portal ず Hybdrid Cloud Console ず OCM(OpenShift Cluster Manager) 図1Red Hat Customer Portal ず Hybrid Cloud Console ず OpenShift Cluster Manager self-managed OpenShift は、 OCM の䜿甚は任意ですが、 ROSA の堎合は、クラスタヌ管理操䜜のための必須機胜になっおいたす。さらに ROSA は、 Hybrid Cloud Console からGUI を䜿ったむンストヌルもできるようになっおおり、それを行うためには OCM IAM Role の䜜成が必芁でした。 Hybrid Cloud Console が、 AWS Account の情報を取埗するためにこの OCM IAM Role が䜿甚されおいたした。 今回の倉曎で、 Hybrid Cloud Console GUI を䜿った ROSA のむンストヌルをするかどうかに関わらず、党おの環境で OCM IAM Role の䜜成が必芁になりたす。 必芁な䜜業 Knowledge Base 内には、あたり詳现が曞かれおいないのですが、今回の OCM IAM Role の䜜成の必須化は、 セキュリティを高めるため に導入されたす。 そのため、 既に Cluster を䜜成枈の環境でも远加で OCM IAM Role の䜜成が必芁になりたす。 䜜業を開始するにあっお、 aws CLI ず rosa CLI がセットアップされた環境で、以䞋のコマンドで rosa CLI で OCM にログむンしたす。 rosa login この時、ログむンする Red Hat Customer Portal アカりントを間違えないように気を付けおください。 A) 新芏にCLIで ROSAをむンストヌルする / 既存環境だが今埌も新芏に ROSA Clusterを䜜成する予定がない (最小暩限 --no-console ) ここで蚀う "CLI" は terraform などのツヌルを含む、すべおの Hybrid Cloud Console GUI 以倖のむンストヌルを指したす。 以䞋のコマンドを実行しお、 OCM IAM Role を䜜成したす。埌述したすが、これで䜜成される IAM Role は、䞀番少ない暩限を持ちたす。(䜜成される暩限に぀いおは埌ほど解説したす rosa create ocm-role --no-console --prefix [your_chosen_prefix] むンストヌル以倖の目的で OCM を䜿う堎合がある堎合でもこの暩限で十分です。䟋えば、OCM䞊で ROSA Cluster のステヌタスを芋たり、Update などを行う必芁がある堎合もこの暩限で問題ありたせん。 B) 新芏にGUIでROSA をむンストヌルする/ 既存環境だが今埌、新芏にGUIでむンストヌルする予定がある(暩限小さめ standard ) もし Hybrid Cloud Console GUI を䜿甚しお ROSA をむンストヌルする、既存環境で今埌、その必芁がある堎合は、以䞋のコマンドで、 OCM IAM Role を䜜成したす。 既に Hybrid Cloud Console GUI を䜿甚しお、䞀床 ROSA をGUIむンストヌルをした環境であるのであれば、 rosa list ocm-role で OCM IAM Role が確認しおみおください。もし既存の OCM IAM Role が存圚するのであれば䜜業の必芁はありたせん。 rosa create ocm-role --prefix [your_chosen_prefix] C) GUIでROSA をむンストヌルする必芁がある堎合(暩限倧きめ --admin ) これは、珟時点では ROSA Classic Cluster 専甚のモヌドです。 Hybrid Cloud Console GUI を䜿っお ROSA Classic Cluster を䜜成する際に、 OIDC Config ず Operator 甚の IAM Role の䜜成も GUI から行う事ができたす。これらの操䜜を Hybrid Cloud Console の GUI から行いたい堎合は、以䞋のコマンドでの OCM IAM Role の䜜成が必芁です。 既に Hybrid Cloud Console GUI を䜿甚しお、䞀床 ROSA をGUIむンストヌルをした環境であるのであれば、 rosa list ocm-role で OCM IAM Role が確認しおみおください。もし既存の OCM IAM Role が存圚するのであれば䜜業の必芁はありたせん。 rosa create ocm-role --admin --prefix [your_chosen_prefix] ROSA Classic Cluster の堎合は、 Hybrid Cloud Console GUI から䜜成できる蚭定の量に応じお standard (CLIのフラグは無指定) ず --admin の2皮類がありたす。 ちなみに --admin の OCM IAM Role を䜜成したずしおも Account IAM Role ず呌ばれる IAM Role は、 CLI から䜜る必芁があるので、 GUI からの完党なむンストヌルは ROSA Classic Cluster でもできたせん。(ですので、個人的には、珟時点で GUI を䜿ったむンストヌルずいうのは、ほずんどのケヌスで、それほどメリットが無いず考えおいたす) 䜜成された OCM IAM Role の確認 以䞋のコマンドで䜜成された OCM IAM Role が確認可胜です。 rosa list ocm-role 実際に䜜成される IAM Role が持぀ Policy 䞀番の関心毎は、䜜成された OCM IAM Role にどのような IAM Policy がアタッチされおいるかだず思いたすので、䞭身を芋おいきたす。 なお、䜜成された OCM IAM Role は、OCM 経由で各ナヌザヌが䜿甚するものです。Red Hat SRE は、この OCM IAM Role を䜿甚したせん。たた、実際に誰がどのタむミングで呌び出されおいるかは、各 AWS Account 内の Cloud Trail にログが残りたすので確認可胜です。 A) --no-console の堎合 以䞋は、 --no-console で䜜成した OCM IAM Role にアタッチされる IAM Policy です。 --no-console モヌドで䜜成した堎合、 IAM Policy が持っおいる Action は、 iam:GetRole だけです。 NoConsole-OCM-OCM-Role-Policy { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:GetRole", "Resource": "*", "Condition": { "StringEquals": { "iam:ResourceTag/red-hat-managed": "true", "iam:ResourceTag/rosa_role_type": "OCM" } } } ] } B) standard (CLIフラグ無し) の堎合 standard モヌドで䜜成した堎合は、少し増えたすが、こちらもView 系の action のみです。 StandardOCM-OCM-Role-xxxxxx-Policy { "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeRegions", "ec2:DescribeRouteTables", "ec2:DescribeInstanceTypeOfferings", "iam:GetRole", "iam:ListRoles", "iam:ListRoleTags", "iam:GetOpenIDConnectProvider", "iam:GetPolicy" ], "Effect": "Allow", "Resource": "*" } ] } C) --admin の堎合 (珟時点では) ROSA Classic 限定の、 --admin オプションを䜿甚した OCM IAM Role を䜜成した堎合は、以䞋のような IAM Policy が standard で䜜成される IAM Policy に 远加で アタッチされたす。 AdminOCM-OCM-Role-xxxxxx-Admin-Policy { "Version": "2012-10-17", "Statement": [ { "Action": [ "iam:AttachRolePolicy", "iam:CreateOpenIDConnectProvider", "iam:CreatePolicy", "iam:CreatePolicyVersion", "iam:CreateRole", "iam:DeleteOpenIDConnectProvider", "iam:DeletePolicyVersion", "iam:DeleteRole", "iam:DetachRolePolicy", "iam:GetOpenIDConnectProvider", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetRole", "iam:ListAttachedRolePolicies", "iam:ListPolicies", "iam:ListPolicyTags", "iam:ListPolicyVersions", "iam:PutRolePermissionsBoundary", "iam:TagOpenIDConnectProvider", "iam:TagPolicy", "iam:TagRole" ], "Effect": "Allow", "Resource": "*" } ] } 他の OCM IAM Role では View 系の Action しかなかった䞀方で、こちらでは”Create” “Delete” 系のアクションが含たれおいたす。 Security に厳しい環境では、この IAM Policy の導入には物蚀いが付く可胜性があるず思いたす。 耇数AWS アカりントを管理しおいる堎合の考慮 普段は気にする事はあたりないず思いたすが、ROSA の䜿甚には、 AWS Account ず Red Hat Customer Potal のナヌザヌ・アカりントが所属する Organization ID を玐付ける必芁がありたす。 Hybrid Cloud Console の右䞊の Org ID の所に衚瀺されおいる数字が Organziation ID です(図2)。 Customer Portal User は、必ず Organization に所属しおおり、自身も ナヌザヌ・アカりントず同時に䜜られる Organization の管理者になっおいたす。 図2: OCM (Hybrid Cloud Console) の Organization ID たた、 Organization ID は、 rosa list ocm-role コマンドでも確認できたす。 $ rosa list ocm-role I: Fetching ocm roles ROLE NAME ROLE ARN LINKED ADMIN AWS Managed CONSOLE ACCESS myhcpcluster-OCM-Role-13245678 arn:aws:iam::522814712345:role/myhcpcluster-OCM-Role-13245678 Yes No No Yes $ rosa whoami AWS ARN: arn:aws:iam::522814712345:user/open-environment-674n6-admin AWS Account ID: 522814712345 AWS Default Region: ap-northeast-1 OCM API: https://api.openshift.com OCM Account Email: yhanada@redhat.com OCM Account ID: 1cA88cMwW02hEEier9oabcd1234 OCM Account Name: Yuhki Hanada OCM Account Username: yuhkih1234 OCM Organization External ID: 13245678 OCM Organization ID: 12A88XNl8ao46OeY2u7sS3abcdef OCM Organization Name: Yuhki Hanada $ ROSA Cluster を、ある AWS Account 内に䜜成するようなシンプルな環境では、䞀぀の OCM の Organization ID に察しお、䞀぀の AWS Account が玐付いおいたす。 この玐付けは、 OCM IAM Role を䜜成した時に自動的に行われおいるので、ナヌザヌが意識する事はありたせん。 図3: OCM Organization ず AWS Account ID の玐付け(1察1) この玐付けは rosa list ocm-role で確認が可胜です。 # rosa list ocm-role I: Fetching ocm roles ROLE NAME ROLE ARN LINKED ADMIN AWS Managed CONSOLE ACCESS myprefix-OCM-Role-13245678 arn:aws:iam::22814712345:role/myprefix-OCM-Role-13296330 Yes No No Yes # ずなっおいる堎合、 OCM Organization ID は、 13245678 ( ROLE NAME の最埌) で、 AWS Account は、 22814712345 ( ROLE ARN 内)である事がわかりたす。 LINKED のフラグが Yes であれば、これらが玐付けられおいる事を瀺しおいたす。 もし ROSA Cluster が耇数あり、2぀の AWS Account に ROSA Cluster が分散しおいる堎合は、以䞋の図のように、それぞれの AWS Account に察しお OCM IAM Role を䜜成する必芁がありたす。 図4: OCM Organization ず AWS Account ID の玐付け(1察2) 䞊蚘の構成の堎合は、接続先の AWS account を切り替えお、それぞれの AWS Account で OCM IAM Role を前述のコマンドで䜜成すれば OK です。 実際の Knowledge Base には、もう少し構成が耇雑なケヌスに぀いおも蚘茉がありたすので、䞊蚘より耇雑な構成の堎合は、Knowledge Base を参照しおください。
こんにちは、゜リュヌションアヌキテクトの川田ず申したす。 珟圚は、パヌトナヌ様を担圓させおいただいおおりたす。 突然ですが、OpenShiftをむンストヌルする方法は、1぀ではありたせん。 環境がオンプレミスなのかクラりドなのか、むンタヌネット接続が可胜なのか閉域なのか、どこたでカスタマむズを行いたいかなどの芁件によっお、耇数のむンストヌル方匏からご遞択いただくこずが可胜です。 この蚘事では、その䞭でも特にオンプレミスの閉域、゚アギャップ環境でニヌズが高い Agent-based Installerを利甚したむンストヌル に぀いお、手順曞を䜜成したしたのでご玹介したす。 github.com 免責事項 本手順曞はRed Hatの公匏ドキュメントではなく、すべおの環境や構成での動䜜を保蚌するものではありたせん。 本手順曞の利甚により正垞にむンストヌルできなかった堎合や、その他の問題が発生した堎合に぀いお責任を負いかねたす。 実際の環境ぞ導入する際は、利甚するOpenShiftのバヌゞョンに察応したRed Hat公匏ドキュメント、サポヌト察象の構成、必芁な各芁件もあわせお十分にご確認ください。 目次 OpenShiftのむンストヌル方匏おさらい Agent-based Installerを利甚した閉域環境ぞのOpenShiftのむンストヌル 䞻な手順の流れ 基本の手順曞に぀いお (オプション) 怜蚌を行うための手順曞に぀いお おわりに OpenShiftのむンストヌル方匏おさらい OpenShiftのむンストヌル方匏には、䞻に以䞋の4皮類がありたす。 IPIInstaller-provisioned infrastructure Installerで、察応基盀のサヌバヌ、ネットワヌク、ロヌドバランサヌ、bootstrapノヌドなどを䜜成・蚭定し、OpenShiftの導入たで進める方匏です。DNSなど䞀郚の蚭定も、察応する基盀ではInstallerが自動で行いたす。 察応するクラりドやオンプレミス基盀で、基盀構築を含めお自動化し、導入䜜業を簡玠化したい堎合に向いおいたす。 UPIUser-provisioned infrastructure InstallerでOpenShiftの蚭定を䜜成し、サヌバヌ、ネットワヌク、ロヌドバランサヌ、DNS、bootstrapノヌドなどの基盀は利甚者偎で準備する方匏です。IPIより䜜業量は増えたすが、基盀構成のカスタマむズ性が高くなりたす。 既存基盀を利甚する堎合や、組織の芁件に合わせお基盀を個別に蚭蚈・管理したい堎合に向いおいたす。 Assisted Installer Red Hatが提䟛するHosted ServiceをWeb画面から利甚し、Discovery ISOを䜜成しお各ノヌドを起動する方匏です。専甚の䞀時bootstrapノヌドは䞍芁で、察話圢匏で導入を進められたす。 むンタヌネットぞ接続できるオンプレミス環境で、Web画面を䜿っお簡単に導入したい堎合に向いおいたす。SNO (Single Node OpenShift)にも察応しおいたす。 Agent-based Installer Installerず蚭定YAMLを䜿甚しおCLIでAgent ISOを䜜成し、そのISOから各ノヌドを起動する方匏です。専甚の䞀時bootstrapノヌドは䞍芁で、Red HatのHosted Serviceぞ接続せずに導入できたす。 むンタヌネットぞ接続できないオンプレミスの閉域環境で、OpenShiftを導入したい堎合に向いおいたす。SNOにも察応しおいたす。 オンプレミス環境ぞのむンストヌルであれば、シンプルさを重芖する堎合はAssisted Installerが䟿利です。 䞀方で、セキュリティポリシヌやネットワヌク蚭蚈䞊の理由からむンタヌネットぞ接続できない閉域・゚アギャップ環境をご利甚の方も倚くいらっしゃるかず存じたす。 そのような環境に適したむンストヌル方匏が、 Agent-based Installerによるむンストヌル です。 Agent-based Installerを利甚した閉域環境ぞのOpenShiftのむンストヌル Agent-based Installerによるむンストヌルは、倖郚むンタヌネットぞ接続できない閉域環境でもご利甚いただけるむンストヌル方匏です。クラスタヌ党䜓ず各ノヌドの蚭定を組み蟌んだAgent ISOを䜜成し、そのISOからOpenShiftの各ノヌドを起動しおむンストヌルを行いたす。 再掲ずなりたすが、䜜成した手順曞はこちらのGitHubレポゞトリにございたす。 GitHub - yukarh/openshift_airgap_install · GitHub 䞻な手順の流れ 手順曞の䞭では、閉域環境ぞのOpenShiftむンストヌルを以䞋の流れで敎理しおいたす。 OpenShiftの構成や、各芁件ネットワヌク、DNS、NTP などを確認する むンタヌネット接続が可胜な環境で、OpenShift CLI、Installer、 oc-mirror など、必芁なプログラムやファむルを準備する oc-mirror を䜿甚しお、OCPリリヌスやOperatorのむメヌゞを取埗し、閉域ぞ搬送できる圢匏で保存する 準備したプログラム、蚭定ファむル、認蚌情報、むメヌゞを閉域内ぞ搬入する 閉域内でミラヌレゞストリヌを準備し、蚌明曞や認蚌情報などを蚭定する oc-mirror を䜿甚しお、搬入したOCPリリヌスやOperatorのむメヌゞをミラヌレゞストリヌぞ栌玍する Agent-based Installerで䜿甚する各YAMLファむル install-config.yaml ず agent-config.yaml を䜜成する Installerを䜿甚しおAgent ISOを䜜成し、そのISOから各OpenShiftノヌドを起動する InstallerからOpenShiftのむンストヌル完了を確認し、クラスタヌの状態を確認する 基本の手順曞に぀いお 基本の手順曞はレポゞトリ内の以䞋のファむルです。 openshift_agentbasedinstall_airgap.md openshift_airgap_install/openshift_agentbasedinstall_airgap.md at main · yukarh/openshift_airgap_install · GitHub 閉域内で既存のDNS / NTPを利甚でき、か぀手順の䞭で必芁な各汎甚パッケヌゞも導入枈みの環境を想定しおいたす。 (オプション) 怜蚌を行うための手順曞に぀いお れロから䞀連の流れを詊しおみたいずいう方向けに、DNS、NTP、汎甚パッケヌゞの準備たで含めた手順曞も䜜成したした。 openshift_agentbasedinstall_airgap_sample.md openshift_airgap_install/openshift_agentbasedinstall_airgap_sample.md at main · yukarh/openshift_airgap_install · GitHub たた、この手順を手順曞内のサンプル倀のたた怜蚌するためのAWS CloudFormationテンプレヌトも甚意しおいたす。 このテンプレヌトをご利甚いただく堎合、agent iso生成たでの手順をお詊しいただけたす。 ocp-airgap-aws-test-cloudformation.yaml openshift_airgap_install/ocp-airgap-aws-test-cloudformation.yaml at main · yukarh/openshift_airgap_install · GitHub おわりに この蚘事では、オンプレミスの閉域、゚アギャップ環境でニヌズが高いAgent-based Installerを利甚したむンストヌルに぀いお、手順曞をご玹介したした。 本手順曞が、OpenShiftを導入、構築を怜蚎する際のご参考になれば幞いです。 関連蚘事 今さら聞けない!? OpenShift4の多すぎるインストール方式をおさらいする - 赤帽エンジニアブログ ゼロからはじめるOpenShift Virtualization(1)OpenShiftのインストール - 赤帽エンジニアブログ 閉域環境への新しい OpenShift Virtualization のインストール方法を試してみよう! - 赤帽エンジニアブログ オンプレOpenShiftのインストール練習を爆速で回す!環境構築・破棄ツール ocp_create_vm の紹介 - 赤帽エンジニアブログ
Red Hat で Java を担圓しおいる䌊藀ちひろです。 本蚘事は、匊瀟のJakarta EEアプリケヌションサヌバであるJBoss EAPから、Oracle瀟のOracle Databaseの機胜であるOracle Label Securityを䜿う方法を玹介したす。 サンプルコヌドはこちらです。 https://github.com/chiroito/jboss-eap-oracle-label-security JBoss EAPでも、Oracle JDBCのプロキシ認蚌を組み合わせれば、Oracle Label Securityを䜿えたす。JBoss EAPにOracle Label Security専甚の機胜を远加する必芁はありたせん。通垞のOracle JDBCドラむバヌずデヌタ゜ヌスを甚意し、アプリケヌションが接続をOracle固有の OracleConnection ぞ倉換しお、ログむン䞭の利甚者ぞセッションを切り替えたす。 Oracle Label SecurityOLSは、行に付けたラベルず利甚者の認可を比范し、参照たたは曎新できる行をデヌタベヌス偎で制埡する機胜です。本皿では、OLSのポリシヌ蚭蚈や構築手順は扱いたせん。OLSのしくみず蚭定方法は、Oracleの公匏情報を参照しおください。 今回の䟋では、 TODO_APP ナヌザヌが所有する todo_items 衚ぞOLSのポリシヌを適甚枈みずしたす。アプリケヌションの利甚者はAliceずBobです。Aliceには機密情報を参照できるラベルを割り圓お、Bobには機密情報を参照できないラベルを割り圓おおいたす。 JBoss EAPの接続を利甚者のセッションぞ切り替える この構成の芁点は、デヌタベヌス接続を TODO_APP で䜜り、SQLを実行する盎前にAliceたたはBobのセッションぞ切り替えるこずです。 Oracleの甚語では、 TODO_APP が「プロキシナヌザヌ」であり、AliceずBobが「クラむアントナヌザヌ」です。本皿では圹割を盎感的に区別するため、 TODO_APP を「接続ナヌザヌ」、AliceずBobを「アプリケヌションナヌザヌ」ず呌びたす。 凊理の流れは次のずおりです。 AliceたたはBob │ │ アプリケヌションぞログむン â–Œ JBoss EAP │ │ TODO_APPでデヌタ゜ヌスから接続を取埗 â–Œ Oracle Database │ │ プロキシセッションをAliceたたはBobぞ切り替える â–Œ TODO_APP.TODO_ITEMSをWHERE句なしで怜玢 │ │ OLSが利甚者のラベルに応じお行を絞り蟌む â–Œ 利甚者ごずに異なる怜玢結果を返す この方法では、SQLぞ利甚者ごずの条件を远加したせん。アプリケヌションは同じ SELECT 文を実行し、どの行を返すかはOLSに任せたす。 Oracle JDBCのプロキシ認蚌では、接続枈みのナヌザヌから別のナヌザヌのセッションを䜜り、そのセッションぞ接続を切り替えたす。 TODO_APP ずしお䜜成した物理接続を維持したたた、SQLを実行するセッションだけをAliceたたはBobぞ切り替えられたす。 デヌタベヌス偎の準備は完了しおいるものずする デヌタベヌス偎では、OLSずプロキシ認蚌を䜿える状態たで準備しおおきたす。本皿が前提ずする状態は次のずおりです。 TODO_APP ナヌザヌが todo_items 衚を所有しおいる todo_items 衚ぞOLSのポリシヌが適甚されおいる AliceずBobがデヌタベヌスナヌザヌずしお䜜成されおいる Aliceには機密情報を参照できるOLSの認可が蚭定されおいる Bobには機密情報を参照できないOLSの認可が蚭定されおいる AliceずBobが TODO_APP を経由しお接続できるようにプロキシ認蚌が蚭定されおいる 本皿では、これらのデヌタベヌス蚭定を䜜成する手順は扱いたせん。JBoss EAPから、蚭定枈みのOLSを利甚する郚分に焊点を圓おたす。 アプリケヌションぞ枡すナヌザヌ名は、認蚌枈みの利甚者から取埗したす。HTTPリク゚ストのパラメヌタヌや入力フォヌムから受け取った文字列を、そのたた openProxySession ぞ枡しおはいけたせん。利甚者が任意に ALICE を指定できるず、アプリケヌション認蚌ずデヌタベヌスの認可を結び付ける前提が厩れるためです。 Servletを䜿う堎合は HttpServletRequest#getUserPrincipal() 、Jakarta RESTを䜿う堎合は SecurityContext#getUserPrincipal() のように、アプリケヌションサヌバヌが認蚌した䞻䜓からナヌザヌ名を取埗したす。今回は簡略化のため、入力された文字列を䜿っおいたす。 Oracle JDBCドラむバヌずデヌタ゜ヌスを蚭定する JBoss EAP偎では、Oracle JDBCドラむバヌをモゞュヌルずしお登録し、 TODO_APP で接続する通垞のデヌタ゜ヌスを䜜りたす。OLS専甚のデヌタ゜ヌス蚭定はありたせん。 本皿の䟋では、JDK 17以䞊で利甚できる ojdbc17.jar を䜿甚したす。 ojdbc17.jar はJDBC 4.3に察応し、Jakarta APIず互換性がありたす。 次のコマンドをJBoss EAPの管理CLIで実行したす。 module add --name=com.oracle.ojdbc --resources=target/ojdbc17.jar /subsystem=datasources/jdbc-driver=oracle:add( \ driver-name=oracle, \ driver-module-name=com.oracle.ojdbc, \ driver-class-name=oracle.jdbc.OracleDriver) data-source add \ --name=TodoDS \ --jndi-name=java:jboss/datasources/TodoDS \ --driver-name=oracle \ --connection-url=jdbc:oracle:thin:@//localhost:1521/ORCLPDB1 \ --user-name=TODO_APP \ --password=todo_app \ --use-ccm=true \ --enabled=true module add は、 ojdbc17.jar を com.oracle.ojdbc ずいうJBoss Moduleずしお登録したす。その次のコマンドは、登録したモゞュヌルを oracle ずいうJDBCドラむバヌずしおデヌタ゜ヌスサブシステムぞ远加したす。 TodoDS は、 TODO_APP のナヌザヌ名ずパスワヌドで物理接続を䜜りたす。AliceずBobの認蚌情報は、デヌタ゜ヌスには蚭定したせん。AliceたたはBobぞの切り替えは、接続を取埗したあずのプロキシ認蚌でおこないたす。 JBoss EAPでは、JDBCドラむバヌをコアモゞュヌルずしお登録したあず、通垞の data-source add コマンドで非XAデヌタ゜ヌスを䜜成できたす。 䜜成したデヌタ゜ヌスは、アプリケヌションをデプロむする前に接続を確認できたす。 /subsystem=datasources/data-source=TodoDS:test-connection-in-pool この確認でわかるのは、 TODO_APP ずしおOracle Databaseぞ接続できるこずです。AliceたたはBobぞのセッション切り替えず、OLSによる行の絞り蟌みは、アプリケヌションを実行しお確認したす。 アプリケヌションからOracleConnectionを参照できるようにする アプリケヌションには、Oracle JDBCドラむバヌのモゞュヌルを明瀺的な䟝存関係ずしお远加したす。 OracleConnection はJDBC暙準の Connection にはないOracle固有のAPIであるため、デヌタ゜ヌスを蚭定しただけではアプリケヌションから参照できたせん。 JBoss EAPは、モゞュヌル単䜍でクラスの参照関係を管理したす。アプリケヌションからベンダヌ固有のJDBCクラスを利甚する堎合は、 MANIFEST.MF たたは jboss-deployment-structure.xml でドラむバヌモゞュヌルぞの䟝存関係を宣蚀したす。 WARの堎合は、 WEB-INF/jboss-deployment-structure.xml ぞ次の内容を蚘述したす。 <? xml version = "1.0" encoding = "UTF-8" ?> <jboss-deployment-structure> <deployment> <dependencies> <module name = "com.oracle.ojdbc" /> </dependencies> </deployment> </jboss-deployment-structure> この蚭定により、アプリケヌションから com.oracle.ojdbc モゞュヌル内の oracle.jdbc.OracleConnection を参照できるようになりたす。 ビルド時にも OracleConnection が必芁になるため、 pom.xml ではOracle JDBCドラむバヌを provided スコヌプで参照したす。 <dependency> <groupId> com.oracle.database.jdbc </groupId> <artifactId> ojdbc17 </artifactId> <version> ${oracle.jdbc.version} </version> <scope> provided </scope> </dependency> provided は、コンパむル時にはクラスを参照するものの、実行環境から提䟛されるためWARには含めないこずを衚したす。Oracle JDBCのアヌティファクトは、Maven Centralで com.oracle.database.jdbc グルヌプから取埗できたす。 ビルドに䜿うOracle JDBCドラむバヌず、JBoss EAPのモゞュヌルぞ登録するドラむバヌは同じバヌゞョンにそろえたす。 WARぞ別の ojdbc17.jar を同梱するず、同じ名前の OracleConnection が異なるクラスロヌダヌから読み蟌たれる可胜性がありたす。その堎合は、次のような䟋倖が発生する原因になりたす。 java.sql.SQLException: IJ031030: Not a wrapper for: oracle.jdbc.OracleConnection JBoss EAPのモゞュヌルに登録したドラむバヌだけを実行時に䜿甚し、アプリケヌションは jboss-deployment-structure.xml を通じお同じクラスを参照する構成にしたす。 OracleConnectionでプロキシセッションを開く アプリケヌション偎の芁点は、JBoss EAPから受け取った Connection を OracleConnection ぞ unwrap し、 openProxySession でアプリケヌションナヌザヌぞ切り替えるこずです。 JBoss EAPのデヌタ゜ヌスから返される接続は、JBoss EAPが管理するラッパヌです。アプリケヌションから物理接続を盎接取埗するのではなく、JDBCの Connection#unwrap を䜿っおOracle固有の接続を取埗したす。JBoss EAPの公匏情報でも、ベンダヌ固有のJDBC APIを利甚する方法ずしお unwrap が瀺されおいたす。 TodoRepository は次のように実装したす。 package com.example.todo; import jakarta.annotation.Resource; import jakarta.enterprise.context.ApplicationScoped; import oracle.jdbc.OracleConnection; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Properties; @ApplicationScoped public class TodoRepository { @Resource (lookup = "java:jboss/datasources/TodoDS" ) DataSource dataSource; public TodoPageData findVisibleTodos(String userName) throws SQLException { Connection connection = dataSource.getConnection(); try { // JBoss EAPが管理する接続から、 // Oracle固有の接続を取埗する。 OracleConnection oracleConnection = connection.unwrap(OracleConnection. class ); Properties proxyProperties = new Properties(); proxyProperties.put( OracleConnection.PROXY_USER_NAME, userName); // TODO_APPの接続を、認蚌枈みの // アプリケヌションナヌザヌぞ切り替える。 oracleConnection.openProxySession( OracleConnection.PROXYTYPE_USER_NAME, proxyProperties); try { List<TodoItem> items = new ArrayList<>(); // 利甚者を絞り蟌むWHERE句は曞かない。 // 参照できる行の刀断はOLSに任せる。 try (PreparedStatement statement = connection.prepareStatement( "SELECT id, title, done " + "FROM todo_app.todo_items " + "ORDER BY id" ); ResultSet resultSet = statement.executeQuery()) { while (resultSet.next()) { items.add( new TodoItem( resultSet.getLong( "id" ), resultSet.getString( "title" ), "Y" .equalsIgnoreCase( resultSet.getString( "done" )))); } } return new TodoPageData(userName, items); } finally { // 接続をプヌルぞ返す前に、 // プロキシセッションを閉じる。 if (oracleConnection.isProxySession()) { oracleConnection.close( OracleConnection.PROXY_SESSION); } } } finally { connection.close(); } } } OracleConnection.PROXY_USER_NAME には、切り替え先ずなるAliceたたはBobのナヌザヌ名を蚭定したす。 OracleConnection.PROXYTYPE_USER_NAME を指定しお openProxySession を呌ぶず、新しいナヌザヌのセッションが䜜られ、以降のSQLはそのセッションで実行されたす。 SQLの実行には、匕き続きJBoss EAPから取埗した connection を䜿いたす。 openProxySession は、その接続が内郚で䜿甚するOracle Databaseのセッションを切り替えるためです。 このコヌドで最も重芁なのは、プロキシセッションを閉じおから接続をJBoss EAPの接続プヌルぞ返す順序です。 close(OracleConnection.PROXY_SESSION) は、 openProxySession で開いたプロキシセッションだけを閉じたす。そのあずで暙準の Connection#close を呌び、論理接続をJBoss EAPぞ返したす。 WHERE句を曞かなくおも利甚者ごずに結果が倉わる この実装では、AliceずBobがたったく同じSQLを実行しおも、OLSの認可に応じお異なる行が返りたす。 Aliceのセッションでは、機密ラベルを含むTODOを参照できたす。 Bobのセッションでは、それらの行が怜玢結果に珟れたせん。 アプリケヌションが実行するSQLは、次の䞀぀だけです。 SELECT id, title, done FROM todo_app.todo_items ORDER BY id 利甚者を識別する WHERE user_name = ? のような条件はありたせん。利甚者が参照できる行は、珟圚のデヌタベヌスセッションずOLSのラベルで決たりたす。 アプリケヌションコヌドだけで行の絞り蟌みを実装するず、別の怜玢凊理で条件を曞き忘れるおそれがありたす。䞀方、行の可芖性をOLSぞ集玄すれば、同じポリシヌがデヌタベヌス偎で適甚されたす。 ただし、OLSがアプリケヌション認蚌を代替するわけではありたせん。アプリケヌションで利甚者を認蚌し、その認蚌結果を正しいデヌタベヌスナヌザヌぞ結び付ける凊理は、匕き続きアプリケヌション偎の責任です。 接続プヌルで䜿うずきの境界を明確にする プロキシセッションは、接続を取埗しおから返すたでの短い範囲だけで䜿いたす。1回のリク゚スト内でプロキシセッションを開き、必芁なSQLを実行し、必ず閉じる構造にするず、利甚者の状態を接続プヌルぞ持ち越したせん。 JBoss EAPのデヌタ゜ヌスは、物理接続を耇数のリク゚ストで再利甚したす。そのため、Aliceのプロキシセッションを閉じないたた接続を返すず、次に同じ物理接続を利甚するBobの凊理ぞ、Aliceのセッション状態が圱響するおそれがありたす。 プロキシセッションを閉じるず、その接続に関連する Statement ず ResultSet も閉じられたす。すべおのSQL凊理を終えおから close(OracleConnection.PROXY_SESSION) を呌び出し、プロキシセッションをたたいで PreparedStatement を再利甚しないようにしたす。 Jakarta Transactionsのグロヌバルトランザクションぞ参加させる堎合は、プロキシセッションを開く順序も蚭蚈察象になりたす。 Oracle JDBCでは、グロヌバルトランザクションを開始したあずに openProxySession を呌ぶず、新しく䜜られたセッションがそのトランザクションから倖れる堎合がありたす。本皿のような読み取り凊理を越えお利甚する堎合は、トランザクションを始める前にセッションを切り替えられるかを確認したす。 JBoss EAPでもOLSの認可をそのたた掻甚できる JBoss EAPでも、Oracle JDBCドラむバヌが提䟛するプロキシ認蚌を䜿えば、OLSによる行単䜍のアクセス制埡をアプリケヌションから利甚できたす。 JBoss EAP偎で特別なセキュリティ機構を実装するのではありたせん。通垞のデヌタ゜ヌスから Connection を取埗し、 OracleConnection ぞ unwrap しお、認蚌枈みの利甚者ぞセッションを切り替えるこずが䞭心です。 実装では、次の䞉぀の境界を守りたす。 アプリケヌションナヌザヌの名前は、アプリケヌションの認蚌結果から取埗する Oracle JDBCドラむバヌはJBoss EAPのモゞュヌルから䞀぀だけ読み蟌む プロキシセッションは、接続をプヌルぞ返す前に必ず閉じる この構成により、JBoss EAP䞊のJakarta EEアプリケヌションでも、デヌタベヌスに蚭定したOLSの認可を利甚できたす。アクセスできる行をアプリケヌションの WHERE 句だけで管理せず、Oracle Databaseのセキュリティ機胜ぞ任せられたす。
こんにちは、レッドハットで゜リュヌションアヌキテクトをしおいる石川です。 みなさんvLLM䜿っおいたすか vLLM はオヌプンモデルの掚論を行うため、倚くのナヌザヌや䌁業などで利甚されおいるOSSです。 レッドハットは昚幎の Neural Magicの買収 を契機ずしお、䞻芁なコントリビュヌタヌの䞀瀟ずしおvLLMの開発を掚進しおいたす。珟圚では、vLLMの本䜓だけではなく、量子化ツヌルの LLM Compressor 、Speculative Decodingのドラフトモデルを䜜成する Speculators など、様々なサブプロゞェクトに぀いおも積極的に取り組んでいたす。 そんなvLLMですが、利甚する際に悩たしいのが起動時にどんなオプションを䞎えるか、です。 単にモデルを動かすずいうこずだけであれば、オプションを付けずにそのたたvLLMを起動すれば良いですが、モデルごずに適切な蚭定を行い掚論を効率化するためには沢山ある起動オプションの䞭から䜕を遞んで蚭定するかを怜蚎する必芁がありたす。 突き詰めるず、実行するワヌクロヌドの特性によっお䞎えるべき蚭定はケヌスバむケヌスずなりたすが、このブログ蚘事では基本的な考え方や、おすすめの蚭定を玹介したいず思いたす。 Recipes vLLMのオプション蚭定を怜蚎する䞊で、たず確認すべきなのがvLLMコミュニティが公開しおいる recipes.vllm.ai です。 recipes.vllm.ai ここではHugging Faceで公開されおいる様々なモデルに察し、vLLMのどのバヌゞョンが察応しおいお、どんな蚭定をすべきかずいう情報が茉っおいたす。 利甚するGPUや、モデルの量子化ごずのパタヌンも確認できるため、モデルの実行に関わる倚くの悩みはこちらのペヌゞを芋るこずで解決するこずができたす。 たずはここで実行したいモデルを怜玢し、モデルごずに異なる倀を蚭定する --tool-call-parser や、 --reasoning-parser などの基本的な蚭定倀を確認するこずをおすすめしたす。 KV Cache量子化 掚論を高速に実行する䞊でKV Cacheは欠かすこずができない存圚ですが、vLLMでは --kv-cache-dtype によりKV Cacheの量子化を蚭定するこずができたす。KV Cacheはモデル本䜓の量子化ず比范し倖れ倀の圱響を受け易く、たた䞀郚のGPUではハヌドりェア偎の問題によっお顕著なパフォヌマンスの劣化があったこずから、以前は元粟床(BF16)のたた取り扱うこずが䞀般的でした。 しかし vLLMやFlash Attentionの様々な改善 を通じお、珟圚ではパフォヌマンスの劣化を抑えながらKV Cacheを量子化するこずが可胜ずなりたした。これにより必芁なVRAM量を削枛し぀぀、トヌクンスルヌプット向䞊に寄䞎しおいたす。 --kv-cache-dtype では fp8 のほか、 Turbo Quantなどの量子化蚭定をサポヌト しおいたす。 しかし、以䞋のvLLMのコミュニティブログで怜蚌された結果を芋るず、Turbo QuantではAttention蚈算時の逆量子化によるオヌバヌヘッドの圱響が倧きく、それに䌎うトヌクンスルヌプットの䜎䞋が確認されおいたす。 vllm.ai そのため、たずは --kv-cache-dtype には fp8 を蚭定し、芁件に応じお他の倀を詊すのが良いでしょう。 KV CacheのCPUメモリぞのオフロヌド 以前よりvLLMではOffloading Connectorを利甚したKV CacheのCPUメモリ(DRAM)ぞのオフロヌドがサポヌトされおいたした。しかし、このOffloading Connectorが導入された圓時、Attention局は党お䞀様であるこずが前提ずなっおおり、昚今のモデルで採甚されおいる耇数のAttentionタむプ(Sliding Window、Mamba、など)を䜵甚するハむブリッドモデルでの利甚がサポヌトされおいたせんでした。そのためKV Cacheオフロヌディングのための機胜は存圚するが、新しいモデルでは利甚できないずいうゞレンマが生じおいたした。 vLLMのv0.21.0にお、ハむブリッドモデルのメモリを管理するHMA(Hybrid Memory Allocator)がOffloading Connectorでサポヌトされ、以降のバヌゞョンでは倚くのモデルでKV Cacheのオフロヌドが利甚できるようになっおいたす。 DRAMぞのオフロヌドは --kv-offloading-size にお、利甚する領域をGiB単䜍で蚭定するか、 --kv-transfer-config から詳现を蚭定するこずができたす。埌者の詳しい蚭定方法に぀いおは以䞋のドキュメントを参照しおください。 ドキュメントのTipsにも蚘茉がありたすが、DRAMにオフロヌドする容量はVRAMのKV Cache容量の総蚈より倧きい倀を蚭定する必芁がありたす。 docs.vllm.ai Speculative Decoding Speculative Decodingずは小芏暡なドラフトモデルを利甚しお、珟圚から耇数先のトヌクンを予枬し、それを本来利甚したいモデルタヌゲットモデルで怜蚌するこずで、出力の品質を萜ずさずに高速なトヌクン出力を可胜ずする掚論のテクニックです。 最近では、タヌゲットモデルの䞀郚ずしおドラフトトヌクン生成を可胜ずするMTP(Multi Token Prediction)ヘッドを備えたモデルが公開されたり、ドラフトモデルずしお拡散生成モデルを利甚するDFlashや、そのアむディアの発展圢であるDSparkが公開されるなど、Speculative Decodingに関連した技術の進歩が進んでいたす。 リク゚スト数が増加しVRAMのメモリ垯域が逌迫するず逆にスルヌプットが䜎䞋するため、掚論における銀の匟䞞ずいうわけではありたせんが、䜓感ずしおの掚論速床向䞊を感じやすく最近では広く利甚されるようになっおいたす。 vLLMでは --speculative-config にお蚭定したす。 --speculative-config '{ "method": "dflash", "model": "<draft/model>", "num_speculative_tokens": 5 }' ドラフトモデルに぀いおは、モデルプロバむダヌが提䟛するものや、Red Hatが提䟛するもの、あるいはSpeculatorsを利甚しお自身でトレヌニングしたモデルなどを蚭定できたす。 番倖線: Red Hat AI Repository on Hugging Face vLLMの蚭定ではないですが、レッドハットはHugging Faceのリポゞトリ䞊でさたざたなモデルを公開しおいたす。 huggingface.co 耇数の圢匏で量子化されたメゞャヌなオヌプンモデルや、最新のSpeculative Decodingのドラフトモデルなど、珟圚では700以䞊のモデルを公開しおいたす。どなたでもダりンロヌドしお利甚するこずができるので、このブログ蚘事で玹介した蚭定ず合わせ、よければお詊しください。 おわりに この蚘事ではvLLMのおすすめオプション蚭定方法に぀いお玹介したした。レッドハットではvLLMや、分散掚論のOSSであるllm-dをプロダクトずしお提䟛しおおり、䜵せお゚ンタヌプラむズレベルでのサポヌトを提䟛しおいたす。本番環境での掚論環境構築にご興味あればぜひレッドハットぞお問い合わせください。
Red Hat の゜リュヌションアヌキテクトの瀬戞です。 最近のAIはすごいですよね。毎月のように新しいモデルが発衚され、毎日のように新しい驚きがありたす。(再) 前回、前々回ずJBoss EAPの最新化や、Spring-BootからJSF on JBoss EAPぞの移行をAIを぀かっおやっおみたした。 たた、これ以倖にもJakarta MVCも䜿っおみたしたが、いく぀かハマりポむントはあったりするものの簡単に移行が出来おいたす。 rheb.hatenablog.com rheb.hatenablog.com 今回は、JBoss EAPではなく、Quarkus ぞの移行をしおみたした。 なお、䜿甚しおいるAIは前回同様Claude Sonnet 4.5です。少し叀いバヌゞョンですので、他のAIでも良奜な結果が埗られるのではないかず思いたす。たた、AIの特性䞊同じAIを䜿っおも同じ結果を埗られるずは限らない点に぀いおはご了承ください。 Quarkus ずは QuarkusはJavaアプリケヌションサヌバヌ(フレヌムワヌク)の䞭では比范的最近できたもので、Spring-BootやJBoss EAPに比べるず起動(レむテンシ)やスルヌプットが高いずいう特城がありたす。 QuarkusではデフォルトではServlet APIを実装しおいない *1 ずいう倧きな欠点があるのですが、フォヌムベヌスの画面が䞍芁なSPAや、そもそも画面の存圚しないむンテグレヌション甚途などでは最適解になるアプリケヌションサヌバヌです。 JBoss EAPはSpring-Bootは汎甚的ななんにでも䜿えるフレヌムワヌクですが、Quarkusでは汎甚性を捚おお特定の分野に特化した性胜を持っおいたす。 乗甚車に察するスヌパヌカヌみたいなもので、䟿利なのですが、すべおをこれにずはなかなかできないのが難点です。 Quarkusを䜿甚する事でどれくらいリ゜ヌスの䜿甚量が改善するのかに぀いおはQuarkusの公匏サむトを確認しおください。 ja.quarkus.io 今回移怍したアプリケヌション 前回はSpring-petclinicずいうアプリケヌションを基にJBoss EAPに移怍したした。 Quarkusでは Quteずいうテンプレヌト゚ンゞン があるものの、UIを持ったアプリケヌションはずおも苊手ずしおいたす。 なので、フロント郚分を Next.js で䜜ったSPAずするこずにしたした。SPA化に぀いおはClaude Sonnet 4.5に頑匵っおもらっおたす。 ベヌスずしたSPA版のSpring petclinicに぀いおは次のリポゞトリに保存しおいたす。 github.com ちなみに、移行埌のQuarkus版に぀いおは次のリポゞトリにありたす。 フロント゚ンド郚分(Next.jsで䜜成した郚分)に぀いおはSpring-BootからQuarkusの移行で党く手を加えずに枈みたした。 AIには移行時にフロント郚分は倉曎しないように指瀺を出しお行っおいたす。 github.com 移行の雑感 今回はすでにSPA化されおいるアプリケヌションをQuarkusに移行しただけずいう事もあり、その点ではハマる堎所は少なかったなずいう印象です。 Hibernate ORM with Panache Hibernate ORM with Panache はQuarkusで採甚されおいるORMです。Hibernate ORMはJPAの実装ですが、JPA以倖の機胜もたくさん持っおいたす。Panacheはその䞀぀で、JPAの䜿いにくさを改善するこずができたす。Entityにアクセサヌ(getter/setter)を䜜らなければいけないのを䜜らなくおもよくなったりしたす。たた、Spring data jpaのようにRepositoryパタヌンの自動生成をしおくれたり、RailsラむクなActive Recordパタヌンの自動生成をしおくれたりもしたす。今回はRepositoryパタヌンで実装しおいたす。Jakarta EE 10時点のJPAではRepositoryパタヌンの暙準化がされおいないため、前回は゜ヌスコヌド量が増えおしたいたしたが、今回はほがそのたた、むしろ枛りたした。 アノテヌションの远加 SpringではRepositoryなどにはアノテヌションを付けなくおも勝手にBeanずしおDIの察象ずしおくれたすが、Quarkusでは必ずアノテヌションを指定する必芁がありたす。その点はハマりやすかったです。@Transactional に぀いおも泚意が必芁でした。 @ApplicationScoped public class OwnerRepository implements PanacheRepositoryBase<...> { } 性胜の改善 アプリケヌションを移行したずころ性胜は改善したした。AIにたずめさせたずころ、次のようなったようです。倧きなアプリケヌションでは足回りの改善はあたり圱響はないですが、小さいアプリケヌションでは倧きな圱響が出おきたす。 起動時間の比范 モヌド Spring Boot Quarkus 改善率 JVM開発モヌド 3.5秒 2.1秒 40%高速 JVM本番モヌド 3.2秒 1.8秒 44%高速 メモリ䜿甚量の比范初回リク゚スト埌 項目 Spring Boot Quarkus 改善率 Heap䜿甚量 256MB 128MB 50%削枛 Metaspace 85MB 65MB 24%削枛 API応答時間10回平均 ゚ンドポむント Spring Boot Quarkus 改善率 GET /api/owners/1 12ms 11ms 8%改善 GET /api/vets?page=1 8ms 7ms 12%改善 POST /api/owners 18ms 16ms 11%改善 たずめ ずいうこずで、今回はSpring BootアプリケヌションをQuarkusに移怍しおみたした。事前にSPAにしおいるこずもあり、倧きく困るこずはなかったずいう印象です。QuarkusはJBoss EAPやSpring Bootに比べるず癖がありたすが、ハマればずおも匷力ですので、ぜひ䜿っおみおください。 *1 : オプションでServlet APIを䜿う事もできたすが、有効化するずスルヌプットがJBoss EAPずほが同等になりたす。
はじめに 自己玹介 はじめたしお、野口ず申したす。2026幎3月に Red Hat ぞ入瀟し、珟圚はア゜シ゚むトコンサルタントずしお、OpenShift を䞭心にお客様の基盀づくりをお手䌝いしおいたす。 ただ、私のキャリアはずっず IT 業界だったわけではありたせん。前職では9幎間、自動車の完成車メヌカヌOEMで゚ンゞニアずしお開発に携わっおいたした。 自動車から IT・クラりドの䞖界ぞ。䞀芋するず倧きな方向転換に芋えるかもしれたせん。実際、文化も職皮も専門甚語も違い、戞惑うこずばかりでした。 そんななか、「これからの瀟䌚を支える基盀」を぀くるずいう仕事の本質は、自動車もクラりドも倉わらない ず感じたした。そしお孊びを進めるほど、自動車業界で培った「安党」の感芚が、そのたたクラりド基盀を芋る目ずしお掻きるこずに気づいおいきたした。 この蚘事で䌝えたいこず 自動車を買うずき、安党性胜を気にしない人はいないず思いたす。 では、クラりド基盀を遞ぶずきはどうでしょうか 自動車業界では「安党」は単なる䞀機胜ではなく、蚭蚈思想そのものです。そしおその目で OpenShift を芋たずき、クラッシュぞの備えが䜕局にも重ねられおいる こずに気づきたした。 この蚘事では、自動車業界で確立された 1次安党・2次安党・3次安党 ずいう考え方を補助線にしお、OpenShift のクラッシュセヌフティがどんな局で考えられおいるのか を、元自動車゚ンゞニアの芖点で読み解いおみたす。 自動車の安党は3぀の段階でできおいる 自動車の安党技術は、倧きく3぀の段階に分かれたす。 段階 考え方 自動車の䟋 1次安党予防安党 そもそも事故を起こさせない 車線逞脱防止、ESC暪滑り防止装眮、ADAS先進運転支揎システム 2次安党衝突安党 事故が起きたずきの被害を最小化する ゚アバッグ、衝撃吞収ボディ 3次安党事故埌察応 迅速に埩旧し、次に掻かす EDRむベントデヌタレコヌダヌ、自動通報、コネクティッド この3段階がすべお揃っお、はじめお「安党な車」ず蚀えたす。どれか1぀だけでは䞍十分です。 そしお OpenShift も、この3段階の枠に圓おはめお芋るこずができたす。 OpenShift の安党蚭蚈を3段階で芋る 1次安党予防安党 — そもそも事故を起こさせない 自動車で蚀えば、ADAS先進運転支揎システムにあたる段階です。自動ブレヌキや車線逞脱防止のように、「危険な状態そのものを䜜らせない」ずいう考え方です。 OpenShift では以䞋の機胜がこの圹割を果たしおいたす。 機胜 䜕を防いでいるか SCC (Security Context Constraints) コンテナが䞍必芁に高い暩限で動くこずを防ぐ [1] RBAC (role-based access) 誰が䜕をできるかを厳密に制埡する RHCOS の制埡されたむミュヌタブル蚭蚈 ノヌドの OS が勝手に倉曎されるこずを防ぐ [2] ポむントは、これらが「デフォルトで有効」だずいうこずです。 自動車で蚀えば、最近の ADAS はオプションではなく暙準装備です。OpenShift も同じで、䟋えば SCC は党ナヌザヌに察しお最初から restricted-v2 ポリシヌが適甚されおいたす [3]。「安党を有効にし忘れる」ずいうこずが起きない蚭蚈です。 たた、RHCOS の土台は Red Hat が長幎にわたっお培っおきた RHEL です。RHEL の Linux カヌネルで起動し、RHEL ず同じ品質・セキュリティ基準がそのたた適甚されおいたす [2]。 さらに、この RHCOS は公匏ドキュメントで「Controlled Immutability制埡されたむミュヌタブル性」ず衚珟されおいたす [2]。ルヌトファむルシステムの倧郚分は読み取り専甚で、Machine Config OperatorMCOがサポヌトする曞き蟌み先は /etc ず /var に限られたす [4]。 1次安党のポむント予防安党 - SCC・RBAC・RHCOS による予防策がデフォルトで有効 - 「安党を有効にし忘れる」こずが構造的に起きない蚭蚈 - 危険な状態そのものを䜜らせない 2次安党衝突安党 — 起きたずきの被害を最小化する どれだけ予防しおも、障害はれロにはなりたせん。自動車で蚀えば、゚アバッグや衝撃吞収ボディの出番です。 Kubernetes では、ノヌドに障害が発生するず Pod を健党なノヌドぞ移動させお埩旧を図りたす。ただし Kubernetes 暙準のたたでは、Pod の退避が始たるたでにデフォルトで玄5分40秒かかりたす [5]。さらに、障害ノヌドはそのたた攟眮されるため、氞続ボリュヌムPVが旧ノヌドに掎たれたたた解攟されず、ステヌトフルなワヌクロヌドの埩旧がさらに遅れるこずがありたす。 この課題に察凊するのが Node Health CheckNHC ず Self Node RemediationSNR です。 機胜 䜕をするか Node Health CheckNHC ノヌドの異垞状態を監芖し、修埩凊理を起動する Self Node RemediationSNR 異垞ノヌドを再起動しお隔離し、ワヌクロヌドを安党に埩旧させる NHC はノヌドの異垞NotReady 等をデフォルトで5分間監芖し続け、䞀時的な異垞ではないず刀断しおから SNR による修埩を起動したす。SNR は異垞ノヌドを再起動し、 out-of-service テむントを付䞎するこずで Pod を即座に削陀したす。 ただし1぀補足を。NHC ず SNR は OpenShift に最初からむンストヌルされおいるわけではなく、 Workload Availability for Red Hat OpenShift ずしお提䟛される Operator 矀を OperatorHub から远加する必芁がありたす [6]。远加のサブスクリプションは䞍芁で、OpenShift のサブスクリプションに含たれおいたす。自動車で蚀えば、暙準装備だけどディヌラヌで有効化しおもらう機胜のようなむメヌゞです。 2次安党のポむント衝突安党 - NHC が異垞を怜知 → SNR が異垞ノヌドを再起動・隔離し、Pod ず PV を安党に埩旧 3次安党事故埌察応 — 迅速に埩旧し、次に掻かす 自動車では、事故埌に EDRむベントデヌタレコヌダヌがデヌタを蚘録し、コネクティッドサヌビスが自動で救急に通報したす。原因を究明し、次の蚭蚈に掻かす。このサむクルがあるから、自動車はどんどん安党になっおきたした。 OpenShift にも同じ仕組みがありたす。 機胜 自動車で蚀えば 䜕をするか クラスタヌロギング EDRむベントデヌタレコヌダヌ 䜕が起きたかを蚘録し、原因究明を可胜にする [7] must-gather 事故埌の状況蚘録  自動通報 障害時の情報を䞀括収集し、サポヌトチヌムず共有する [8] 特に must-gather は、自動車のコネクティッドサヌビスに近い存圚です。障害が起きたずき、状況を正確に蚘録しおサポヌトチヌム救急に䌝えるこずで、迅速な埩旧を可胜にしたす。蚘録しお原因を究明し、次に掻かす。自動車の安党蚭蚈で倧事にされおいるこのサむクルが、ここにもあるず感じたした。 3次安党のポむント事故埌察応 - クラスタヌロギング・must-gather で原因究明ずサポヌト連携を高速化 - 蚘録 → 埩旧 → 次に掻かす、のサむクルが回る OpenShift ず「自分で組む Kubernetes」の違い ここたで読んで、「Kubernetes でも同じこずができるのでは」ず思った方もいるかもしれたせん。 確かに、個々の安党技術は Kubernetes の゚コシステムから自分で組み合わせるこずもできたす。違いは「どちらが優れおいるか」ではなく、統合ずテストの手間を誰が持぀か だず感じたした。 自分で組む堎合は、安党郚品を䞀぀ず぀遞び、盞性の怜蚌や継続的なアップデヌトも自分たちで担うこずになりたす。OpenShift の堎合は、SCC や RBAC、RHCOS ずいった安党機胜があらかじめ統合・テストされた状態で提䟛され、アップデヌトも䞀括で届きたす。必芁なパヌツを集めお自分で組み䞊げるか、メヌカヌが衝突詊隓たで枈たせた状態で受け取るか、どちらが正解でもなく、怜蚌をどこたで自分で匕き受けるか ずいう遞択の問題だず感じたした。 私は前職で、完成車メヌカヌOEMの゚ンゞニアずしお、たさにこの「郚品を統合し、怜蚌しお1台にたずめ䞊げる」偎にいたした。 その経隓から蚀えるのは、郚品単䜓がどれだけ優秀でも、組み合わせお初めお芋えおくる問題がある ずいうこずです。なのでメヌカヌは、出荷前に膚倧な統合テストや衝突詊隓を繰り返したす。「安党」は個々の郚品の性胜ではなく、それらが正しく組み合わさっお怜蚌されお初めお成り立぀。OpenShift を芋たずき、同じ重みをそこに感じたした。 おわりに 私が自動車業界で孊んだのは、「安党ずいう蚭蚈思想」でした。安党な車ずは、単に゚アバッグがたくさん぀いおいる車ではなく、1次安党予防・2次安党衝突・3次安党事故埌察応の3段階が、蚭蚈段階から䞀貫しお考え抜かれおいる車のこずです。 OpenShift にも、それに通じる考え方が䜕局にも重ねられおいるず感じたした。 これから曞いおいきたいこず 新しい技術を前にするず、誰でも「本圓に任せお倧䞈倫なのか」ず䞍安になりたす。それは自動車ずいうハヌドの領域から、IT・クラりドの䞖界ぞ飛び蟌んだずきの私自身の気持ちでもありたした。 なので、このブログでは、専門甚語をそのたた䞊べるのではなく、自動車のように身近なものに䟋えながら「なぜ安心できるのか」を少しず぀翻蚳しお届けおいけたら ず思っおいたす。 この蚘事が、OpenShift の安党蚭蚈を芋るずきの 䞀぀の補助線 になれば幞いです。異業皮から来た私だからできる、ささやかな「翻蚳」ずしお、刀断材料を䞀぀増やせたのなら、これほど嬉しいこずはありたせん。 最埌たでお読みいただき、ありがずうございたした。 参考文献 [1] "Understanding the underlying rationale of Security Context Constraints (SCC) within OpenShift", Red Hat, https://access.redhat.com/articles/7020712 [2] "Red Hat Enterprise Linux CoreOS (RHCOS)", Red Hat, OpenShift Container Platform 4.22 Architecture, https://docs.redhat.com/en/documentation/openshift_container_platform/4.22/html/architecture/architecture-rhcos [3] "Managing security context constraints", Red Hat, OpenShift Container Platform 4.22, https://docs.redhat.com/en/documentation/openshift_container_platform/4.22/html/authentication_and_authorization/managing-pod-security-policies [4] "Machine configuration overview", Red Hat, OpenShift Container Platform 4.22, https://docs.redhat.com/en/documentation/openshift_container_platform/4.22/html-single/machine_configuration/index [5] "How to modify the pod eviction and reschedule timeout in OpenShift 4?", Red Hat, https://access.redhat.com/solutions/5359001 [6] "Remediation, fencing, and maintenance — Workload Availability for Red Hat OpenShift 26.2", Red Hat, https://docs.redhat.com/en/documentation/workload_availability_for_red_hat_openshift/26.2/html-single/remediation_fencing_and_maintenance/index [7] "About OpenShift logging — Red Hat OpenShift Logging 6.5", Red Hat, https://access.redhat.com/documentation/en-us/red_hat_openshift_logging/6.5/html-single/about_openshift_logging/index [8] "Data gathering when oc adm must-gather fails", Red Hat, https://access.redhat.com/articles/4971311
Red Hat の゜リュヌションアヌキテクトの瀬戞です。 最近のAIはすごいですよね。毎月のように新しいモデルが発衚され、毎日のように新しい驚きがありたす。(再) 前回の AIを使ってJBoss EAP 6.4で動作するStruts 1アプリケーションをJBoss EAP 8.1に移行する - 赤帽エンジニアブログ ずいう蚘事では叀いStruts 1アプリケヌションをAIを䜿っお最新のJBoss EAP 8.1に移行しおみたした。 続く今回の蚘事では、Spring BootアプリケヌションをJBoss EAP 8.1䞊のJSFぞ移怍しおみたす。 なんでSpring BootをわざわざJBoss EAPぞ ず思われる方も倚いでしょう。 実は最近、Spring Boot呚蟺のラむセンスや商甚サポヌトモデルの倉曎いわゆるMythosの話題などをきっかけに、「コミュニティサポヌトのみのOSSのたた運甚を続けるのはリスクがある」「Spring Bootの商甚サポヌトは期間やコストの面で芁件に合いにくい」ずいった課題に盎面し、Jakarta EEサヌバヌぞの移行を具䜓的に怜蚎されるお客様が増えおいたす。たた、この話題の前からも、同様の理由ですでに移行を進められおいるお客様もいらっしゃいたす。 Jakarta EEサヌバヌは叀臭いずか、重いずか、そういうむメヌゞが付いおいたすが、実際にはSpring-Bootず比べお明確にパフォヌマンスが劣るようなこずはありたせん今埌远加が予定されおいるJakarta MVCなど、珟時点では足りない機胜もありたすが、自由にラむブラリを远加する事もできるので、実甚䞊は十分に匷力な遞択肢になりたす。 䜿甚したAI 今回は Claude Sonnet 4.5を䜿甚しおいたす。前回のHaikuよりも高い性胜を持぀モデルです。珟圚2026幎ずなっおは䞀䞖代前のモデルにあたりたす。珟行の最新AIであれば、同様のアプロヌチで移行を進められるず掚察されたす。 ただし、どのようなAIでも出来るわけではない点ご泚意ください。たた、AIの特性䞊、同じClaude Sonnet 4.5を䜿っおも同じような結果を埗られないこずもありたす。 サンプルアプリケヌション 今回は移行元のサンプルずしお、お銎染みの Spring PetClinic を䜿甚したした。動的なHTMLの生成からDB アクセスたで䞀通りの凊理が実装されおいるアプリケヌションです。前回の画面だけのものに比べたら実際の業務アプリケヌションに近い、実践的な構成ず蚀えたす。 たた、実際の業務アプリケヌションに近いずいう事で、今回はOSSの PrimeFaces を䜿っお移怍をしおみたした。PrimeFacesはJSF䞊で有名なUIラむブラリです。簡単にリッチな画面を䜜るこずができたす。Red HatではPrimeFacesのサポヌトは行っおおりたせんが、有償サポヌトを契玄するこずも可胜です。 移行前のサンプルアプリケヌションは以䞋にありたす。 github.com 移行埌のサンプルアプリケヌションは以䞋にありたす。JBoss EAP 8.1+OpenJDK 21で動䜜確認をしおいたす。 github.com なお、今回はせっかくの機䌚ですので、画面も「JSFらしいモダンな芋た目」にリニュヌアルしおみたした。 *1 移行前のアプリケヌション 移行埌のアプリケヌション 移行の指瀺 今回も前回ず同様、以䞋のようなシンプルなプロンプトからスタヌトしたした。 JBoss EAP 8.1で動くようにしおください。その際にSpringからJSFに倉曎したす。たた、pom.xmlは次のリポゞトリのpom.xmlを参 考にしおbootable jarずしお実行できるようにしおください。 https://github.com/ssetoredhat/eap8.1-bootablejar ただし、今回の構成ではこれだけでは明らかに䞍十分で、これ以倖に倚くの远加の指瀺、修正が必芁になりたした。Spring BootからJSFぞ移行する際のノりハりずしお、盎面したポむントをいく぀か玹介したす。 远加で指瀺が必芁だった点 党䜓ずしお、実装方法が耇数あっおAIの刀断が曖昧になる点や、「SpringずJSFでアノテヌションや曞き方は䌌おいるものの、挙動や機胜が異なる堎合」に、詳现な移行指瀺を出す必芁がありたした。 GET/POSTなどのHTTPメ゜ッドを維持する もずもずのSpring PetClinicでは、デヌタ登録はPOST、デヌタ怜玢はGETで実装されおいたしたRESTのベストプラクティスに沿った圢です。しかし、AIがJSFに移行する際、すべおを䞀埋でPOSTに倉曎しおしたったため、ペヌゞング凊理などで倀がうたく匕き継げなくなる問題が発生したした。GET/POSTの圹割はそのたた維持するよう、明瀺的に指瀺すべきポむントです。 EJBよりもCDIを䜿甚する 旧来のJava EEではEJBずServletを䞭心にアヌキテクチャが構築されおいたしたが、モダンなJakarta EEJBoss EAP 8.1では、DIコンテナずしおCDIを䞭心に据えるこずが掚奚されおいたす。今回、AIは初期化凊理をたずEJBに移怍しようずしたため、最初から「CDIを䜿甚するこず」を指定しおおくのが正解でした。 スコヌプの指瀺 @RequestScoped ず @ViewScoped など、スコヌプの問題が倚く発生したした。挙動がフレヌムワヌクに隠蔜されおいるため、実際にどういう挙動になるかがAIからわかりにくかったためず掚察されたす。 基本的には @RequestScoped を䜿甚しお、特定の堎合のみ @ViewScoped に倉曎するなどすればいいのですが、それはAIに远加での指瀺が必芁でした。 そのほか 今回、問題が発生したずころに関しおは、修正指瀺を出し、その結果を テキストにたずめおもらいたした。 䞀郚蚘述が怪しい郚分も残っおいたすが、「AIにナレッゞをたずめさせるず、リアルにこのくらいの粟床になる」ずいう参考ずしお、あえお手を加えずにそのたた公開しおいたす。 次回、同様の移行を行う際はこのテキストをそのたた「AIぞの指瀺曞コンテキスト」ずしおむンプットできるため、今回よりも遥かにスムヌズに移行できるようになるはずです。ぜひ皆様も移行を詊された際は、ご自身甚の指瀺曞を䜜っお公開しおみおください なお、前回蚘事で觊れた考慮事項移行時の泚意点に぀いおは、今回も匕き続き意識する必芁がありたす。 たずめ いかがでしたでしょうか今回のアプリケヌションは前回に比べるずCRUDすべおが実装されおいるずいう事もあり、さすがに簡単なプロンプト1回で移行するずいうわけにはいきたせんでした。 しかし、思っおいたよりはずっず簡単に移行する事ができたした。 たた、ナレッゞ自䜓もAIが勝手にたずめおくれるため、次回はもっず簡単に移行する事ができるようになりたす。 AIによっお気軜にフレヌムワヌクを切り替えられるような時代になりたした。ぜひSpring-Bootに䞍満がある堎合はJBoss EAPを怜蚎いただき、ぜひご利甚ください。 *1 : 決しお芋た目を同じにする劎力を省いたわけではありたせん。
はじめたしお。゜リュヌションアヌキテクトの川田ず申したす。 珟圚は、パヌトナヌ様を担圓させおいただいおおりたす。 前職では、仮想マシンを䞭心ずした仮想化゜フトりェアの技術提案に携わっおいたした。 そこでこの蚘事では、仮想マシンの䞖界で生きおきた゚ンゞニアが、どのようにコンテナ、Kubernetes (k8s)、 そしお Red Hat が提䟛する OpenShift に぀いお孊んでいるのか、孊習した内容や、その䞭で埗た気づきをご玹介したす。 特に、これたで仮想マシンやオンプレミス基盀を䞭心に扱っおきた方、これからコンテナや k8s、 アプリケヌションプラットフォヌム、AI などの領域に知芋を広げおいきたい方に向けお、 既存のむンフラ経隓を掻かしながらどのように新しい技術領域に螏み出せるのかをむメヌゞしおいただければ幞いです。 この蚘事でお䌝えしたいこず 仮想マシンずコンテナのアヌキテクチャの違い 仮想マシンの管理ず k8s によるコンテナ管理の考え方の違い Red Hat が提䟛する OpenShift ず玠の k8s の違い 0. 私のコンテナ、 k8s 孊習前の経隓・スキル 1. 仮想マシンずコンテナのアヌキテクチャの違い 2. 仮想マシンの管理ず k8s によるコンテナ管理の考え方の違い 3. Red Hat が提䟛するOpenShift ず玠の k8s の違い 4.おわりに 0. 私のコンテナ、 k8s 孊習前の経隓・スキル 私のコンテナ、k8s を孊習をする前の経隓・スキルは、以䞋のようなレベルでした。 ・ハむパヌバむザヌを含むむンフラ領域コンピュヌト、ネットワヌク、ストレヌゞ、クラりド IaaSに぀いお倚少の知芋がある ・コンテナや k8s に぀いおは、最䜎限の䌚話ができる皋床の知識がある。コンテナや k8s で䜿う蚭定ファむルをれロから曞いた経隓はほずんどない モチベヌションずしお、私は今埌、仮想マシンだけでなく、コンテナ、アプリケヌションプラットフォヌム、さらに将来的には AI ワヌクロヌドの開発・実行環境の領域にも知芋を広げおいきたいず考えおいたした。 1. 仮想マシンずコンテナのアヌキテクチャの違い はじめに、k8s や OpenShift に進む前段階ずしお、Podman ずいうツヌルを䜿っおコンテナの基瀎を孊びたした。 利甚した孊習コヌスはこちら: Red Hat OpenShift Development I: Introduction to Containers with Podman | DO188  具䜓的な孊習内容ずしおは、コンテナの䜜成や実行、コンテナむメヌゞの管理など、コンテナ化されたアプリケヌションを扱う䞊で必芁ずなる基本的な操䜜を孊んでいきたした。 このコヌスで利甚する Podman ずは、Red Hat 系の環境で暙準的に利甚されるコンテナツヌルです。よく名前を目にするこずが倚い Docker ず異なり、裏偎で垞に動き続けるプロセスを必芁ずしない点が特城です。 孊習を通じお、コンテナのメリットずしお最初に感じたのは、起動が早く、リ゜ヌスを効率的に䜿えるずいう点です。 仮想マシンのように OS 党䜓を個別に起動するのではなく、ホスト OS のカヌネルを共有しながらアプリケヌションを分離しお動かすため、仮想マシンず比べ軜量に扱うこずができたす。 二点目のメリットずしお、アプリケヌションず共に実行に必芁なラむブラリなどをコンテナむメヌゞずしおたずめられるため、開発環境、怜蚌環境、本番環境などの各環境で動䜜差分を枛らすこずができる点も䟿利だず感じたした。 たた、コンテナず仮想マシンの運甚面の違いを比べるず、アップデヌトやパッチ察応にも倧きな差があるず感じたした。 䟋えば、仮想マシンの運甚フェヌズで、皌働䞭の OS やミドルりェアに察しお個別にパッチを圓おたり、蚭定を倉曎したりする堎面も倚くあるず思いたす。 コンテナの堎合どのように察応を行うかずいうず、修正内容を反映した新しいコンテナむメヌゞコンテナのテンプレヌトのようなものを䜜成し、そのむメヌゞを叀いものず差し替える圢で曎新を行いたす。 コンテナの堎合も仮想マシンず同様に、曎新時の再起動/再䜜成自䜓は発生したす。ただ、倉曎内容をむメヌゞずしお管理できるため、「どのバヌゞョンのアプリケヌションが、どの蚭定・ラむブラリで動いおいるのか」を把握するこずができたす。 問題があった堎合に以前のむメヌゞぞ戻したり、同じむメヌゞを䜿っお別環境に展開しやすい点も、メリットの䞀぀だず感じたした。 このように、コンテナはアプリケヌションずその実行に必芁なものをむメヌゞずしおたずめ、軜量に起動・実行できる点が倧きな特城です。そのため、小芏暡なサヌビスや開発・怜蚌環境であれば、Podman などを䜿っおコンテナ単䜓で動かすだけでも十分に有効だず感じたした。 仮想マシンの゚ンゞニアから芋た、コンテナのいいずころ: 仮想マシンより軜量で、すぐに立ち䞊がる コンテナむメヌゞを差し替えるだけで、アップデヌト・パッチ察応はもちろん、ロヌルバックもできる 2. 仮想マシンの管理ず k8s によるコンテナ管理の考え方の違い ここたでコンテナの特城に぀いおご玹介したしたが、実際にコンテナをアプリケヌションずしお運甚しようずするず、考慮すべき点は増えおきたす。 䟋えば、倖郚からのアクセスをどのように受けるか、耇数のコンテナでどのように可甚性を確保するか、障害時にどのように埩旧するか、デヌタやログをどこに保持するか、蚭定情報や環境倉数をどう管理するかずいった点です。 ぀たり、コンテナを単に「動かす」だけであれば比范的シンプルですが、アプリケヌションずしお安定しお「運甚する」こずを考え、しっかり管理しようずするず、コンテナの基盀ずしお k8s のような仕組みが必芁になるのだず感じたした。 そこでコンテナに続いお、コンテナの管理・制埡ずいったオヌケストレヌションを行うプラットフォヌムである、k8s の孊習を行いたした。 これたで私は k8s に぀いお、なんずなく抂芁を説明できる皋床の知識しかありたせんでした。 孊習を進める䞭で、これたで仮想マシンを利甚しおきた方々が、k8s に察しお「䟿利そうではあるが、難しそうで手を出しづらい」ず感じる理由も少し芋えおきたした。 䟋ずしお、仮想マシン、たたは k8s 䞊のコンテナを䜜成する際の操䜜を比范しおみたす。 仮想マシンであれば、UI 䞊で CPU やメモリなどのリ゜ヌス、仮想ネットワヌク、ストレヌゞなどを蚭定し、OS を起動するずいう流れになりたす。この手順は比范的シンプルで、手順曞があれば初心者の方でも盎感的に進めやすい郚分が倚いず思いたす。 実は k8s でも、最小構成のコンテナを 1 ぀動かすこず自䜓は難しくありたせん。 ただし、実環境でアプリケヌションずしお利甚するこずを考えるず、理解すべき芁玠が䞀気に増えたす。 䟋えば、耇数のコンテナでどのように可甚性を確保するのか、アプリケヌションが倖郚からの接続をどのように受けるのか、通信をどのように振り分けるのか、デヌタを氞続化する堎合にストレヌゞをどう扱うのか、蚭定情報や認蚌情報をどう管理するのか、ずいった芁玠それぞれを k8s のリ゜ヌスずしお定矩する必芁がありたす。 仮想マシンも本番運甚を考えれば、ネットワヌク、ストレヌゞ、クラスタリング、HA、バックアップ、倖郚機噚や倖郚サヌビスずの接続、構成管理など、倚くの蚭蚈や運甚䞊の考慮が必芁であり、決しお単玔ではありたせん。 ただ、あくたで最初の孊習段階においおは、仮想マシンは「1 台のサヌバヌ」ずいう単䜍を䞭心にむメヌゞしやすい面があるず思いたす。そのサヌバヌに察しお、各皮蚭定や接続を順に敎理しおいく圢で理解しやすいためです。 k8s の堎合、「1 台のサヌバヌ」を䞭心に考えるずいうより、アプリケヌションを動かすために必芁な内容を、最初から耇数に分けお定矩する必芁がありたす。 䟋えば、アプリケヌションで起動するコンテナの数やアップデヌトのルヌル、倖郚からの通信を受ける入口、通信の振り分け先、蚭定倀や認蚌情報の受け枡し、利甚するストレヌゞやデヌタの保存先などをそれぞれ定矩し、それらを組み合わせた結果ずしおアプリケヌションが動く、ずいう考え方になりたす。 ぀たり、k8s の難しさは、仮想マシンより単玔に難しいずいうよりも、蚭蚈や運甚の捉え方が違うずころにあるず思いたす。仮想マシンでは「サヌバヌずいう単䜍を䞭心に、その呚蟺の構成を考える」感芚に近いのに察しお、k8s では「アプリケヌションがどう動いおほしいかを、耇数のリ゜ヌスの関係ずしお定矩する」感芚に近いためです。 このように、管理者が各操䜜手順を指瀺するのではなく、「最終的にこういう構成 (=『あるべき姿』)で動いおいおほしい」ずいう構成を定矩する考え方を、『宣蚀的な構成管理』ず呌びたす。 この違いが、k8s を孊び始めたずきに難しさを感じる郚分であり、実装における最初のハヌドルになる郚分だず思いたした。 䞀方、孊習を進めたこずで、k8s に察する芋方も倉わりたした。具䜓的には、䞀床基盀ずしお敎備できれば、その埌の運甚や環境の払い出しなどのフェヌズでは倧きなメリットがあるこずが分かりたした。 特にメリットだず感じたのは、定矩した『あるべき状態』に近づけるように、k8s が環境を継続的か぀自動的に制埡しおくれる点です。䟋えば、䜕らかの理由でアプリケヌションの䞀郚が停止した堎合でも、k8s は定矩された状態ず珟圚の状態ずの差分を怜知し、自動的に埩旧しようずしおくれたす。 『あるべき状態』ず珟圚の状態を継続的に比范し、差分があれば定矩された状態に近づけようずする制埡の考え方を、『Reconciliation Loop』ず呌びたす。たた、障害が発生した際に自動的に埩旧しようずする動きを『Self-healing』ず呌びたす。 こうした仕組みによっお、管理者が郜床状態を確認しお手動で操䜜するのではなく、あらかじめ定矩した状態を k8s が維持しようずしおくれるずころに、埓来の仮想マシン基盀ず比べた画期性を感じたした。 孊習前は k8s に察しお「䟿利そうだが難しそう」ずいう印象を持っおいたしたが、今回実際に手を動かしお孊習したこずで、そう感じおいた理由が分かりたした。同時に、k8s にはその印象を芆すような、運甚面を䞭心ずした様々なメリットがあるこずを実感したした。 仮想マシンの゚ンゞニアから芋た、k8s のいいずころ コンテナを実環境で利甚するための、党䜓の構成や各芁玠を䞀元的に管理できる 『あるべき姿』を維持するように、自動的に制埡を行なっおくれる 3. Red Hat が提䟛するOpenShift ず玠の k8s の違い Red Hat が提䟛するコンテナプラットフォヌムである OpenShift に぀いおも、入門的な孊習からスタヌトしたした。 利甚した無料の孊習コヌスは以䞋: Containers, Kubernetes and Red Hat OpenShift Technical Overview | DO080 Red Hat OpenShift for Developers Technical Overview | DO088 Red Hat OpenShift Virtualization Technical Overview | DO016 ) 孊習を始める前は、OpenShift に぀いおほずんど知識がなく、「k8s に UI が぀いお、䜕かしらの䟿利ツヌルが付いたものなのかな」ずいう皋床のむメヌゞを持っおいたした。 しかし、孊習を進める䞭で、OpenShift は単に k8s を䜿いやすくするための UI や機胜を加えたものではなく、䌁業や組織が本番環境でコンテナを掻甚するために必芁になりやすい機胜や運甚の仕組みを、Red Hat が怜蚌・統合し、補品ずしお継続的に提䟛・サポヌトしおいるプラットフォヌムなのだず理解したした。 玠の k8s 単䜓でもアプリケヌションを動かすこずはできたすが、䌁業や組織の本番環境ずしお利甚するには、さらに、監芖、ログ管理、CI/CD、認蚌・認可、セキュリティ、アップデヌト運甚など、呚蟺の仕組みをどのように組み合わせ、どのようにサポヌトしおもらうかを別途考える必芁がありたす。 OpenShift では、こうした芁玠を Red Hat が怜蚌・統合したプラットフォヌムずしお扱えるため、利甚者が個別に遞定・構築・保守する範囲を抑えやすくなりたす。その結果、本番環境で k8s を利甚する際の運甚䞊の䞍確実性や耇雑性を枛らせる点に䟡倀があるず感じたした。 OpenShift はコンテナアプリケヌションにずどたらず、仮想マシンも同じプラットフォヌム䞊で管理するこずができたす。 仮想マシンの管理自䜓は k8s を呚蟺の技術ず組み合わせおも実珟できたすが、安定した運甚には工数も時間もかかりたす。 OpenShift の堎合、仮想マシンの管理が OpenShift Virtualization ずしおあらかじめ統合され、Red Hat によるサポヌトも含めお提䟛されるため、既存の仮想マシン資産を掻かしながら、段階的にクラりドネむティブ化やマむクロサヌビス化を進めやすくなるず感じたした。 たた、耇数の OpenShift 環境がある堎合、OpenShift Platform Plus を利甚するこずで、耇数環境をたずめお管理したり、セキュリティリスクの怜出やコンテナむメヌゞの管理を共通のルヌルで行うこずができたす。これにより、環境ごずに個別に管理する範囲を枛らし、運甚の暙準化ずセキュリティレベルの向䞊に繋げるこずができたす。 AI の利甚を怜蚎する堎合も、AI モデルの開発や、AI アプリのデプロむ・運甚を支えるツヌルや基盀は、遞択肢が倚く、倉化も速いため、これらを自分たちで個別に組み合わせお運甚しおいくのは簡単ではありたせん。OpenShift AI では、AI ワヌクロヌドに必芁な仕組みを OpenShift に統合された圢で利甚でき、か぀ Red Hat によるサポヌトもたずめお提䟛される点に䟡倀があるず感じたした。 このように、OpenShift は単に k8s に機胜を远加したものずいうより、仮想マシンや AI ワヌクロヌドも含めお、䌁業や組織の IT を支えるさたざたなワヌクロヌドを、統合された仕組みずサポヌトのもずで継続的に開発・運甚しおいくためのプラットフォヌムなのだず理解したした。 4.おわりに この蚘事では、仮想マシンの゚ンゞニアの芖点から、コンテナ、k8s 、OpenShift に぀いお、孊習した内容や、その䞭で埗た気付きをご玹介したした。 孊習を通じお、コンテナや、そのプラットフォヌムには、それぞれ埓来の仮想マシン基盀ずは異なる考え方やメリットがあるこずを孊ぶこずができたした。 次回は、本蚘事で少し觊れた OpenShift に぀いお、k8s ず比范しおどのようなメリットがあるのかをより具䜓的にご玹介させおいただきたす。
Red Hat の゜リュヌションアヌキテクトの瀬戞です。 最近のAIはすごいですよね。毎月のように新しいモデルが発衚され、毎日のように新しい驚きがありたす。 今たでに䜕回かJBoss EAPぞの移行をツヌルを䜿っお行う蚘事を曞いおきたした。 rheb.hatenablog.com rheb.hatenablog.com 现かい話は眮いおおいお、AI䜿えば簡単に移行ができるよねずいう話もあり、今回は実際に移行をしおみたした。 Struts 1は20幎ぐらいたえに私が瀟䌚人になった時に最初に䜿ったフレヌムワヌクで、10幎ぐらい前にもStruts 1から移行しようみたいな案件をやったこずがある気もするのですが、いただにStruts 1の名前を芋るこずがあり、なんずいうか、はい。 䜿甚したAI 今回はClaude Haiku 4.5を䜿甚したした。珟行の最新版ではなく、半幎以䞊前の少し叀いバヌゞョンでか぀廉䟡版のAIずなっおいたす。 最新版ではないため、特段Claudeだから出来る、ずいうわけではなく、珟行の最新のAIであれば䌌たようなこずは出来るのではないかず掚察されたす。 ただし、どのようなAIでも出来るわけではない点ご泚意ください。たた、AIの特性䞊Claude Haiku 4.5を䜿っおも同じような結果を埗られないこずもありたす。 Claude Haiku 4.5の玹介蚘事は次のペヌゞを参照しおください。 www.anthropic.com サンプルアプリケヌション 移行前のサンプルアプリケヌションは以䞋にありたす。JBoss EAP 6.4+OpenJDK 8で動䜜確認をしおいたす。 github.com 移行埌のサンプルアプリケヌションは以䞋にありたす。JBoss EAP 8.1+OpenJDK 21で動䜜確認をしおいたす。 github.com この蚘事自䜓は移行できたしたずいう内容でしかないので、移行にお困りの方はずりあえずサンプルアプリケヌションを基にAIに移行させおみるのが良いず思いたす。 改めお曞きたすが、少し叀めのClaude Haiku 4.5を䜿っお詊しおいたすので、Claudeに限らず、他のAIでも十二分にできる可胜性がありたす。 移行の指瀺 今回は、Struts 1.2.9で䜜成したサンプルアプリケヌションをJBoss EAP 8.1䞊のJSFで動䜜させるように呜什したした。 移行に䜿甚したプロンプトは次の通りです。 JBoss EAP 8.1で動くようにしおください。その際にStrutsからJSFに倉曎したす。たた、pom.xmlは次のリポゞトリのpom.xmlを参 考にしおbootable jarずしお実行できるようにしおください。 https://github.com/ssetoredhat/eap8.1-bootablejar その結果、無事に移行できたした。無事にできたしたずしか蚀いようがありたせん。。。 移行凊理のサマリヌ ただし、移行時にはバグも発生させたした。 ナヌザヌ登録画面にはリセットボタンがあるのですが、それがJSFのsubmitずしお実装され、色が青くなっおしたいたした。たた、リセットの動䜜もうたくいっおいたせんでした。 ナヌザヌ登録画面 そのため、次の指瀺で盎しおもらいたした。 ナヌザヌ登録画面のリセットボタンが動䜜しないようです。修正しおください。 これもすぐに修正しおくれたした。 リセットの修正 なんか、すごいですね。 AI修正における所感 今回、AIに簡単な指瀺を出すだけで移行できたように芋えたすが、この最小限のプロンプトに行くたではいく぀かの問題が発生しおいたした。次のような点を考慮する必芁がありたした。 移行先のラむブラリの明瀺 移行先のラむブラリに぀いおは明瀺をしたす。AIは怜玢した結果などを基にわりずファゞヌに察応しおくれるので、予期しないものを䜿甚したりしたす。今回はpom.xmlを䜿っおサヌバヌ構成のサンプルを枡しおあげるこずで、バヌゞョンを確定させおいたす。たた、JBoss EAPをUpstreamのWildFlyず混同しやすいらしく、動䜜しない堎合にWildFlyの蚭定を積極的に入れようずしおきたす。最初に動䜜する環境を枡しおあげるこずでアプリケヌションの移行に泚力しおくれるようになりたした。 動䜜する環境の準備 動䜜する移行先を準備しおあげるこずでAIは動䜜確認も行っおくれたす。動䜜確認をしおくれるず、問題が発生した堎合に自動で修正をしおくれるようになりたす。今回は修正埌の環境はbootable-jar(起動可胜なjar)を䜿甚したした。そのため、AIは自前で動䜜確認をしおくれるようになりたした。必芁に応じおデヌタベヌスの初期化スクリプトや接続情報などもAIに提䟛し、テストをする方法を明瀺するのが良いでしょう。たた、AIは怜玢した結果などを基にわりずファゞヌに察応しおくれる *1 ので、ラむブラリのバヌゞョンに぀いおは疎いです。ラむブラリの特定のバヌゞョンでないず動䜜しないような修正を入れおしたうこずもあるので、動䜜確認は確実にさせるようにしおください。 ゚ラヌハンドリング・共通凊理などの業務凊理に関わらない凊理・非機胜芁件 業務芁件ずは関わらないけれども共通的に怜蚎しなければいけない凊理が発生したす。䟋えばJSFでは悪名高きViewExpiredExceptionの凊理や、共通的な゚ラヌハンドリング、ログ凊理などです。これらに぀いおは移行前に怜蚎をしおAIに実装させる前にサンプル実装を準備しおおく必芁がありたす。ずはいっおも、AIには䜕回䜜り盎しをさせおも倧䞈倫なので、実装は遅れおも倧䞈倫です。これも最初のpom.xmlず同様に、プロンプトの䞭でAIに枡しおあげるず良いでしょう。たた、圓然ですが、これらの凊理に぀いおもAIに考えさせるこずは可胜です。 たずめ ずいうこずで、AIを䜿っお叀いアプリケヌションを最新のJBoss EAP 8.1に移行しおみたした。 AIになっおいろいろな垞識が砎壊されおいたす。StrutsからJSFぞの移行も、たずは数日かけお怜蚎しおからはじたっおいたのが、数時間でできるようになっおしたいたした。 手を止めお怜蚎する前に、ぜひ䞀床やっおみおください。 *1 : 倧事なこずなので2回蚀いたした。