概要
CRI-O v1.34.3(2025-12-02公開)は、Kubernetes の CRI(Container Runtime Interface)実装である CRI-O に対して、(1) 外部の crio-credential-provider 連携、(2) CVE-2025-58183 対応、(3) irq-load-balancing.crio.io アノテーションの新しい housekeeping 値追加、(4) 依存関係更新(Kubernetes 0.34.1 系や Podman 関連ライブラリ追加など)を含むパッチリリースです。
変更内容(何が変わったか)
1) crio-credential-provider(外部 credential provider)対応
- リリースノート上、「credential provider のサポート追加」として
crio-credential-providerが明示的に挙げられています。 - 実装面では、CRI-O のイメージ pull 処理で
github.com/cri-o/crio-credential-provider/pkg/authを利用し、Pod の namespace をもとに “namespaced な auth ファイル” を取り回すコードが入っています(PullImageRequest の SandboxConfig metadata から namespace を取得し、namespace がある場合に auth ファイルを一時パスへ退避してAuthFilePathとして使う流れ)。 - あわせて CLI に
--namespaced-auth-dirが追加され、namespaced auth ファイル用ディレクトリを指定できるようになります(CLI から設定へ反映)。
2) CVE-2025-58183 修正(tar-split 更新)
github.com/vbatts/tar-splitを v0.12.2 へ更新し、CVE-2025-58183(GNU sparse tar の解析時に unbounded にメモリ確保が起こり得る問題)を修正した、とリリースノートおよび PR 本文で説明されています。- PR 本文では、
tar-split v0.12.2側で sparse block data を 1 MiB に制限する修正が入り、CRI-O のイメージ展開(containers/storage 経由)に影響し得る経路のリスクを下げる、という位置付けになっています。
3) irq-load-balancing.crio.io に housekeeping 値を追加
irq-load-balancing.crio.ioアノテーションにhousekeepingが追加されます。housekeeping指定時は、CRI-O 側の high-performance 向け処理で、OPENSHIFT_HOUSEKEEPING_CPUS環境変数として housekeeping CPU セットをコンテナへ注入し、IRQ affinity の扱いも “housekeeping CPUs では無効化しない” 方向に調整されます。- housekeeping CPUs は「コンテナ割り当て CPU の先頭 CPU とその thread siblings(SMT の兄弟)」を基準に選ぶ、という挙動がリリースノートとコードに記載されています。
4) 依存関係更新(Kubernetes 0.34.1 / Podman ライブラリなど)
- リリースノートの “Dependencies” にて、
k8s.io/*が 0.34.0 → 0.34.1 に更新されたこと、go.podman.io/image/v5とgo.podman.io/storageが追加されたこと等が列挙されています。
背景(なぜこの変更が必要か)
credential provider 対応の背景
- Kubernetes の kubelet は、レジストリ認証情報を exec プラグイン経由で動的に取得できる仕組み(kubelet image credential provider plugins)を持ち、静的な認証情報をディスクへ置く方式以外を選べます。
crio-credential-providerは、レジストリミラー向けの認証を「namespace にスコープされた Kubernetes Secret」を使って解決することを目的としており、k8s の credential provider API を使って kubelet から呼ばれ、namespace ごとの auth ファイルを生成する設計が README に整理されています。- それに合わせて CRI-O 側も、namespace を認識した pull 時に適切な auth ファイルを参照できる必要があり、v1.34.3 の “credential provider サポート” はこの統合を進める変更、と捉えられます。
CVE 修正の背景
- コンテナイメージは外部入力であり、展開処理(tar 解析)で過剰なメモリ確保を誘発できると、ノード上で DoS 的な影響が出やすい領域です。v1.34.3 は依存ライブラリ更新でこのリスクを下げます。
housekeeping 追加の背景
- 低レイテンシ志向の構成では「特定 CPU を割り込みやスケジューリングの揺らぎから隔離する」一方で、システム運用上は “割り込みを処理するための CPU” も必要になります。
housekeepingは、その折衷(残す CPU セットの可視化と IRQ affinity の扱い)をアノテーション経由で選べるようにする変更です。
影響(運用者/利用者/開発者への影響、注意点、移行)
- 運用者:
crio-credential-providerを使う場合、CRI-O 側で--namespaced-auth-dir(および関連設定)を意識する必要があります。kubelet credential provider の設定は Kubernetes ドキュメントに従って実施します。 - セキュリティ: CVE-2025-58183 対応が含まれるため、影響範囲のある環境では v1.34.3 への更新を検討ポイントにできます(少なくとも
tar-split v0.12.2を含むことが重要)。 - 高性能ワークロード運用:
irq-load-balancing.crio.ioを使っている場合、housekeeping値の追加により、従来の “disable/enable” とは別のチューニングが可能になります。コンテナ内へOPENSHIFT_HOUSEKEEPING_CPUSが注入され得る点も考慮が必要です。 - 開発者: イメージ pull の認証フロー(namespace・auth ファイル命名・一時ファイル化)に関わる挙動が追加されるため、テストや運用ドキュメント整備の対象になります。
用語メモ(用語の軽い説明)
- CRI-O: Kubernetes の kubelet が使う CRI を OCI ランタイムで実装するコンテナランタイム。
- CRI (Container Runtime Interface): kubelet とコンテナランタイム間の API。
- kubelet image credential provider (exec plugin): kubelet がレジストリ認証情報を stdin/stdout 経由で外部プラグインに問い合わせる仕組み。
- registry mirror / pull-through cache: 取得元レジストリの前段に置き、キャッシュや制御を行うミラー。
- IRQ SMP affinity / housekeeping CPU: 割り込みをどの CPU が処理するか(affinity)を制御し、隔離 CPU とは別にシステム用の CPU(housekeeping)を確保する考え方。
参考リンク
- https://github.com/cri-o/cri-o/releases/tag/v1.34.3
- https://github.com/cri-o/cri-o/pull/9512
- https://github.com/cri-o/cri-o/blob/9cad6a6b4d81dcae5bc011740eb9f01467c96450/server/image_pull.go
- https://github.com/cri-o/cri-o/blob/9cad6a6b4d81dcae5bc011740eb9f01467c96450/internal/criocli/criocli.go
- https://github.com/cri-o/crio-credential-provider
- https://github.com/cri-o/cri-o/pull/9590
- https://github.com/cri-o/cri-o/pull/9564
- https://github.com/cri-o/cri-o/blob/7004fa61eee534eb584db737a14ab907c29b228d/internal/runtimehandlerhooks/high_performance_hooks_linux.go
- https://github.com/cri-o/cri-o/blob/7004fa61eee534eb584db737a14ab907c29b228d/pkg/annotations/annotations.go
- https://github.com/kubernetes/website/blob/a01d6f3f0487860b12c47fe9953606db9508e3f9/content/zh-cn/docs/tasks/administer-cluster/kubelet-credential-provider.md