0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes v1.36 SIG-Auth 変更内容

0
Last updated at Posted at 2026-05-17

はじめに

この記事は Kubernetes v1.36 のリリースノート (CHANGELOG-1.36) から、SIG-Auth に関連する変更内容をまとめたものです。

ここに記載されていないものは別のまとめで記載されていると思いますので、 Kubernetes v1.36: 変更点まとめリンク集 から他のSIG分も参照してみてください。

機能の更新・追加など

Alpha で追加されたもの

  • ManifestBasedAdmissionControlConfig

Beta に昇格・追加されたもの

  • DRAResourceClaimGranularStatusAuthorization
  • ComponentFlagz
  • ComponentStatusz
  • ClientsAllowCARotation
  • ClientsAllowTLSCacheGC
  • ReloadKubeletClientCAFile

GA になったもの

  • CSIServiceAccountTokenSecrets
  • ExternalServiceAccountTokenSigner
  • DRAAdminAccess
  • ProcMountType

削除されたもの

N/A


Changes by Kind

Dependency

  • Pod のライフサイクルフック (lifecycle hooks) が Pod 終了時に最大時間まで実行され続けるバグを修正。(#136598)
  • etcd クライアントライブラリを v3.6.8 に更新。([#137225])

Deprecation

  • クレデンシャルプラグインの Allowlist で AllowlistEntry.NameAllowlistEntry.Command にリネーム。(#137272)

API Change

  • [ACTION REQUIRED] DRAResourceClaimGranularStatusAuthorization feature gate が v1.36 で Beta に昇格。有効時、DRA ドライバーとコントローラーは ResourceClaim のステータス更新に詳細な RBAC パーミッションが必要。スケジューラー・コントローラーは resourceclaims/binding への update/patch を、DRA ドライバーは resourceclaims/driver への associated-node:update または arbitrary-node:update を付与する必要がある(各ドライバーの resourceNames で制限)。(#134947)
  • TopologyAwareWorkloadScheduling feature gate 配下で、PodGroup スケジューリングのための SchedulingConstraints を追加。TAS (topology-aware scheduling) の制約を表現する。TopologyPlacement プラグインが PlacementGenerate extension point を実装し、制約を PodGroup スケジューリングに反映。(#137271)
  • WorkloadAwarePreemption feature gate 有効時の workload-aware preemption をサポートするため、Workload と PodGroup API に DisruptionModePriorityClassNamePriority フィールドを追加。(#136589)
  • Pod Certificates Beta API に spec.stubPKCS10Request フィールドを追加。PKCS#10 CSR を期待する既存の CA 実装との互換性向上のため。spec.pkixPublicKeyspec.proofOfPossession はこのフィールドを優先して非推奨化。(#136729

Alpha との違い: Alpha では公開鍵を独自フィールドで渡していた。

  • spec.pkixPublicKey: 公開鍵そのもの(PKIX 形式)
  • spec.proofOfPossession: Pod UID を秘密鍵で署名したバイト列(秘密鍵保有証明)

Beta の spec.stubPKCS10Request はこの2つを PKCS#10 フォーマットに統合。"stub" とある通り Subject 等の中身はほぼ空で、公開鍵の搬送手段として標準フォーマットを使うことが目的。通常はSubject に入れるべき情報は PodCertificateRequest の別フィールドに既にある。

spec:
  podName: my-pod
  podUID: abc-123
  serviceAccountName: my-sa
  nodeName: node-1
  stubPKCS10Request: <Subject が空の CSR>

発行する証明書の Subject(CN や SAN 等)は signer が独自に決める。

signer が Vault 等の既存 CA へリクエストをフォワードする際、独自フィールドでは変換処理が必要だったが、stubPKCS10Request であればそのまま転送できる。kube-apiserver が admission 時に CSR の署名を検証済みのため、signer 側での再検証も不要。

PKCS#10 とは: 証明書署名要求(CSR)のフォーマット標準(RFC 2986)。subject(誰の証明書か)+ 公開鍵 + 秘密鍵による自己署名 の構造を持ち、申請者が対応する秘密鍵を保有していることを証明できる。Vault をはじめ多くの既存 CA 実装が「リクエスト = PKCS#10 CSR」を前提として設計されている。

  • PodGroup オブジェクトの削除保護機構を追加。(#137641)
  • PersistentVolumeClaimUnusedSinceTime feature gate 配下で、PVC の未使用状態を追跡する Alpha サポートを追加。有効時、非終了状態の Pod から参照されていない PVC に PVC protection controller が PersistentVolumeClaimStatus の新しい Unused 条件として Unused=TruelastTransitionTime を設定する。(#137862)
  • manifest ベースの Admission Control 設定 (KEP-5793) の Alpha サポートを追加。ManifestBasedAdmissionControlConfig feature gate 有効時、AdmissionConfigurationstaticManifestsDir フィールドを通じてディスク上の静的 manifest から Admission Webhook と CEL ベースのポリシーをロード可能。API サーバー起動時から有効で etcd 障害時も動作し、API ベースの Admission リソースを改ざんから保護できる。(#137346)
  • PodGroup リソースが既存の Workload を参照しており宣言された PodGroupTemplate spec と一致することを検証する Admission Plugin を追加。(#137464)
  • DRA リソースプールの空き状況を照会するための ResourcePoolStatusRequest API (v1alpha1) を追加。外部スケジューラーがワークロード投入前にプール横断で利用可能なデバイスを把握できる。DRAResourcePoolStatus feature gate (alpha) が必要。(#137028)
  • TLS 証明書検証に使用するサーバー名を上書きできるよう、EgressSelectorConfigurationTLSConfigtlsServerName フィールドを追加。(#136640)
  • TopologyAwareWorkloadScheduling feature gate 配下で、PodGroup スケジューリングサイクルに TAS ロジックを追加。対応するトポロジードメインを持つノードへの PodGroup スケジューリングをサポート。(#137489)
  • apiserver の Admission サブシステムで非推奨の sets.Stringsets.Set[string] に置き換え。NewLifecycle 関数の利用者には 破壊的変更。(#134044)
  • DRA: PodGroup リソースが ResourceClaims と ResourceClaimTemplates を参照する spec.resourceClaims フィールドを追加。PodGroup のクレームは個々の Pod ではなく PodGroup 全体のために予約される。256 個を超える Pod が単一 ResourceClaim を共有することが可能になる。PodGroup のクレームから参照された ResourceClaimTemplate は PodGroup 固有の ResourceClaim に複製され、グループ内の全 Pod で共有される。(#136989)
  • DRA: デバイスの Taint と Toleration (KEP #5055) を Beta に昇格。ResourceSlice における DeviceTaint サポートはデフォルト有効。DeviceTaintRules サポートは resource.k8s.io/v1beta2DeviceTaintRules feature gate の有効化が必要。(#137170)
  • パラメータのフォーマットが正しく行われていなかった数件のログ呼び出しを修正。(#137108)
  • Workload と PodGroup API を Job コントローラーと統合し、gang-scheduling をサポート。(#137032)
  • ワークロードレベルのスケジューリング要件を表現し kube-scheduler が対応できるよう scheduling.k8s.io/v1alpha2 Workload と PodGroup API を導入。scheduling.k8s.io/v1alpha1 Workload API は削除。(#136976)
  • kube-apiserver: --audit-policy-file の resource rules で group: "*" を指定することで全 API グループにマッチするよう対応。(#135262)
  • 複数の component-base メトリクス (kubernetes_build_inforest_client_requests_totalrest_client_request_duration_secondsrunning_managed_controllers) を Alpha から Beta Stability に昇格。コンシューマーに対してより強固な API・ラベル安定性保証を提供。(#136154)
  • DRA の extended resource 機能を v1.36 で Beta に昇格。(#135048)
  • DRAAdminAccess feature gate を GA に昇格。(#137373)
  • ProcMountType feature を GA に昇格。(#137454)
  • StorageVersionMigrator によるマイグレーション後に CustomResourceDefinition の stored versions を status から削除するよう変更。(#135297)
  • k8s.io/api の Kubernetes REST API 型から、標準 v1 proto メッセージとして誤って識別していた一時的なビルドタグ付き ProtoMessage() マーカーメソッド実装を削除。Kubernetes API 型の Protobuf シリアライゼーションには k8s.io/apimachinery/pkg/runtime/serializer/protobuf を使用すること。(#137084)
  • ConstrainedImpersonation feature 有効時、Impersonation を使用する遅いリクエストを apiserver.latency.k8s.io/impersonation audit event annotation でトラッキング可能に。(#137523)
  • API サーバー内部 API グループを更新し、フィールドが optional か required かについての OpenAPI スキーマ正確性を改善。(#134675)

Feature

  • 制約付き Impersonation のメトリクスを追加: apiserver_impersonation_attempts_totalapiserver_impersonation_attempts_duration_secondsapiserver_impersonation_authorization_attempts_totalapiserver_impersonation_authorization_attempts_duration_seconds (ラベル: mode, decision)。(#137374)
  • admin ClusterRole に Workload の読み書き権限、edit ClusterRole に書き込み権限、view ClusterRole に読み取り権限を追加。(#135418)
  • CRD バリデーションにおいて、スキーマで指定された数値フォーマット (int32int64floatdouble) の範囲を厳密に適用するよう変更。範囲外の値を持つ既存オブジェクトは validation ratcheting により保持される。(#136582)
  • ComponentFlagz を Beta に昇格。(#137386)
  • ComponentStatusz を Beta に昇格。(#137384)
  • Kubernetes streaming transport と CRI streaming server のコードを新しい staging モジュール k8s.io/streamingk8s.io/cri-streaming として分離。k8s.io/apimachinery/pkg/util/httpstream (spdywsstream を含む) は k8s.io/streaming をバックとする非推奨互換ラッパーとして引き続き利用可能。抽出した SPDY roundtripper は NO_PROXY/no_proxy の CIDR マッチングを保持。(#137298)
  • kube-apiserver: ExternalServiceAccountTokenSigner feature gate を GA に昇格。(#136118)
  • Kubelet: --client-ca-file が kubelet 稼働中に更新された場合、更新されたルート証明書が kubelet エンドポイントに接続する TLS クライアントへのアドバタイズに正しく使用されるよう修正。ReloadKubeletClientCAFile feature gate で制御、デフォルト有効。(#136762)
  • CSIServiceAccountTokenSecrets feature gate を GA に昇格。(#136596)

Bug or Regression

  • PodCertificateRequest の OwnerReference で誤った apiVersion "core/v1" を使用していた問題を修正。これにより所有 Pod 削除時に PodCertificateRequest のガベージコレクションが行われなかった。(#137008)

  • kubelet の設定で preloadedImagesVerificationAllowlist に対するイメージ名の比較方法を修正。従来は "alpine" 等の familiar なイメージ名を Pod が使用していても preloadedImagesVerificationAllowlist 内の同名エントリと正しくマッチしなかった。(#137629)

  • server side apply と client-go の Extract{TypeName}() / Extract{TypeName}From() 関数において、空の配列・マップが誤って absent として扱われ、associative list の atomic 要素が誤って重複する問題を修正。(#135391)

  • 大規模クラスターで ResourceSlice エントリを shared と onNode カテゴリに分割することで DRA スケジューリングのパフォーマンスを改善。Filter ステージのレイテンシを最大 ~50% 削減。(#136588)

  • Kubelet: kubelet が DNS/ホスト名ではなく IP アドレスでダイヤルされている場合に、ディスク上のサーバー証明書ファイルの再ロードが正しく行われない問題を修正。(#133654)

  • k8s.io/client-go/transport パッケージが、ファイルパスで指定された CA ルートをディスクから自動的にリロードするように変更。デフォルト有効で ClientsAllowCARotation feature gate により無効化可能。(#132922)

    背景: issue #119483 として 2023年7月に報告。InClusterConfig を使う client-go は /var/run/secrets/kubernetes.io/serviceaccount/ca.crt 等の CA ファイルを起動時に一度しか読み込まず、クラスターの CA ローテーション時に kube-apiserver への接続が永続的に切断され、Pod を再起動するまで回復しなかった。CA ローテーションというセキュリティ運用が逆にサービス断を引き起こすという問題。

    実装: リクエストのたびに前回チェックから 5分 経過していれば CA ファイルを読み直す(ファイル監視ではなくポーリング)。内容が変わっていれば transport.Clone() で新しい transport を生成し RootCAs を差し替え、古い transport の CloseIdleConnections() を呼ぶ。5分のポーリング間隔があるため、CA ローテーション後最大 5 分は古い CA が使われ続ける点に注意。

    有効条件: ClientsAllowCARotation feature gate が ON、かつ TLS.ReloadCAFiles=true、かつ CAFile が指定されている場合のみ機能する。

    メトリクス: rest_client_transport_ca_reloads_total{status, reason} で成功・失敗・スキップを追跡。

  • k8s.io/client-go/transport パッケージが、使用されなくなった transport の TLS キャッシュエントリと証明書ローテーション goroutine をガベージコレクションするように変更。デフォルト有効で ClientsAllowTLSCacheGC feature gate により制御可能。feature gate 非有効時は TLS キャッシュが無制限に増加し goroutine がリークする。デバッグ用に新しいカウンターメトリクス rest_client_transport_cert_rotation_gc_calls_total{}rest_client_transport_cache_gc_calls_total{result: deleted/skipped} を追加。これらは既存の rest_client_transport_* メトリクスと組み合わせてデバッグに活用できる。k8s.io/client-go を組み込むが feature gate を配線していないバイナリは KUBE_FEATURE_ClientsAllowTLSCacheGC=false 環境変数で無効化可能。(#136355)

    背景: issue #109289 として 2022年4月に報告、約3年放置されていた。グローバルな tlsCache が eviction 機構を持たず、多数のクラスターに接続する長期稼働プロセス(マルチクラスター管理ツール等)でメモリが際限なく増加し続けた。また証明書ローテーション用の goroutine も transport が破棄されても生き続けリークしていた。回避策として config.Proxy をセットしてキャッシュを迂回する方法はあったが非直感的で実用的ではなかった。

    ClientsAllowTLSCacheGC が無効の場合は従来の挙動にフォールバック。KUBE_FEATURE_ClientsAllowTLSCacheGC=false 環境変数でも無効化できる。

Other (Cleanup or Flake)

  • etcd クライアントライブラリを v3.6.6 に更新。(#135331)
  • etcd クライアントライブラリを v3.6.7 に更新。(#136407)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?