概要

containerd v1.7.30(1.7 系のパッチリリース)では、Kubernetes の CRI 経由で関係しやすい領域として、(1) NRI と CDI デバイス注入の取り扱い改善、(2) CRI のエラーログに出てしまう URL クエリ文字列の一括赤塗り(redaction)が入っています。

変更内容(何が変わったか)

1) NRI が要求した CDI デバイスが「黙って捨てられる」ケースの修正

  • CRI/NRI の Linux 実装で、NRI 側のコンテナ調整(container adjustment)に CDI デバイス注入用のオプションが追加されました(nrigen.WithCDIDeviceInjector(...))。
  • 設定で CDI が無効(EnableCDI が false)な状態で CDI デバイス注入を要求すると、要求デバイスを単に無視するのではなくエラーになります(「設定で CDI が無効なので注入できない」旨)。

2) CRI のエラーログで「URL のクエリパラメータを全部」赤塗り

  • CRI の instrumented サービス(ログ/計測用ラッパ)で、失敗時にログへ出す err をサニタイズする処理が追加されました。
  • url.Error を含むエラーの URL を解析し、クエリパラメータが存在する場合は 全パラメータ値[REDACTED] に置換します(例: ?sig=SECRET&sv=2020?sig=%5BREDACTED%5D&sv=%5BREDACTED%5D)。
  • 対象として差分で確認できるのは少なくとも PullImage / ListImages / ImageStatus / RemoveImage の失敗ログです。

背景(なぜこの変更が必要か)

  • ログ/イベントに署名付き URL 等の機微情報が混入し得る問題: レジストリやバックエンド(例: S3 ストレージ)由来のタイムアウト等で、エラー文中に署名付き URL(クエリに署名情報)を含んだまま Kubernetes 側に見える形(kubelet イベント例)で出てしまう、という課題が報告されています(containerd/containerd#5453)。
  • 「黙って成功扱い」になりうることが運用・デバッグを難しくする: CDI デバイス注入の要求が静かに無視されると、コンテナが起動してしまう場合でも後段で不可解な障害に見える可能性があり、少なくとも「要求を落とすなら分かる形にする」方向の問題意識が示されています(例: containerd/containerd#11975)。

影響(運用者/利用者/開発者への影響、注意点、移行)

  • 運用者:
    • 画像取得失敗などの CRI 関連ログに URL クエリが出なくなる ため、資格情報・署名・トークンなどがログに残りにくくなります。一方で、同種の障害調査で「クエリ文字列を見て切り分ける」スタイルは使いにくくなります。
    • NRI プラグイン等が CDI デバイス注入を要求する環境では、CDI を無効にしたままだと「静かに無視」ではなくエラーになり得ます。CDI を使う前提なら containerd 側の enable_cdicdi_spec_dirs(CRI プラグイン設定)を確認し、必要な CDI spec ファイル配置も合わせて見直すのが安全です。
  • 開発者:
    • NRI は「OCI 互換ランタイムにプラガブルな拡張ロジックを差し込む」目的の仕組みで、デバイス等のリソース管理改善用途が想定されています(NRI README)。CDI 注入経路がより明示的になったことで、「要求したのに入っていない」を検知しやすくなります。

用語メモ(用語の軽い説明)

  • CRI: kubelet がコンテナランタイムを差し替え可能にするためのプラグインインターフェース(gRPC/Protocol Buffers)。(kubernetes/cri-api README)
  • NRI: OCI 互換ランタイムに、ベンダー/ドメイン固有のロジックをプラグインとして差し込むための仕組み(※README では DRAFT 扱い)。(containerd/nri README)
  • CDI: サードパーティデバイスを「デバイス名 + spec ファイル」によりコンテナへ反映するための仕様。(cncf-tags/container-device-interface README)
  • ログの redaction(赤塗り): ログに出してはいけない可能性がある情報(例: URL クエリ中の署名/トークン)を、出力前に伏せること。
  • CNI: コンテナのネットワーク設定を行うための標準的なインターフェース/プラグイン群(本リリースでは CNI プラグイン同梱/取得周りの更新も含まれる)。

参考リンク