はじめに
このページではKubernetes v1.34におけるSIG-Authに関連する取り組みについて、ChangelogのChanges By Kindの項目から紹介しています。ここに記載されていないものは別のまとめで記載されていると思いますので、ぜひそれらも参照してみてください。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
機能の更新・追加など
Alphaで追加されたフィーチャーゲート
ResourceHealthStatusPodCertificateRequest
Betaに昇格・追加されたフィーチャーゲート
-
StructuredAuthenticationConfigurationEgressSelector(default true) -
KubeletServiceAccountTokenForCredentialProviders(default true) -
ExternalServiceAccountTokenSigner -
TokenRequestServiceAccountUIDValidation(default true)
GAになったフィーチャーゲート
-
StructuredAuthenticationConfiguration -
AuthorizeWithSelectors -
AuthorizeNodeWithSelectors Dynamic Resource AllocationMultiCIDRServiceAllocatorDisableAllocatorDualWrite
Changes by Kind
Deprecation
- N/A
API Change
-
DeviceRequestAllocationResult構造体のAPIv1beta2
AdminAccessタイプにomitemptyとoptタグを追加しました。(#132338) - JWT authenticatorsにおいて、
AuthenticationConfiguration.jwt配列のissuer.egressSelectorTypeフィールドを介してcontrolplaneまたはclusteregress selectorを指定できるようになりました。未設定の場合、従来のegress selectorを使用しない動作が維持されます。この機能にはStructuredAuthenticationConfigurationEgressSelectorbeta フィーチャーゲート(デフォルトで有効)が必要です (#132768)-
メモ -
issuer.urlとissuer.discoveryURLへ接続するための設定をissuer.egressSelectorTypeフィールドで指定できるようになりました - type=cluster: Proxy(Konnectivity)経由でのクラスターのワークロード向けの通信
- type=controlplane: API Serverから直接通信
- 参考: https://kubernetes.io/docs/tasks/extend-kubernetes/setup-konnectivity/#configure-the-konnectivity-service
-
- KubeletがDynamic Resource Allocation (DRA)を介して割り当てられたデバイスの健全性を監視し、
pod.status.containerStatuses.allocatedResourcesStatusフィールドにレポートする機能
を追加しました。これにはDRAプラグインが新しいv1alpha1NodeHealthgRPCサービスを実装する必要があります。この機能はResourceHealthStatusフィーチャーゲートで制御されます (#130606) - Kubeletのイメージプル認証情報トラッキングにサービスアカウントベースの検証サポートを追加しました。外部認証情報プロバイダーを介してサービスアカウント認証情報を使用してイメージ がプルされた場合、同じサービスアカウント(UID、名前、名前空間)を使用する後続のPodは、そのサービスアカウントの有効期間中、再認証なしでキャッシュされたイメージにアクセスできま
す。(#132771)-
メモ - 認証情報のキャッシュと検証の効率化
- ServiceAccountCoordinates(UID、Namespace、Name)を通じて、外部プロバイダーがサービスアカウントのコンテキストを認識できるようになった
- クレデンシャルの追跡の強化
-
- Dynamic Resource Allocation(DRA)のコア機能が一般提供(GA)に昇格しました。この新しく安定した機能は、DRAの「structured parameters」フレーバーを使用します。(#132706)
- kube-apiserverで
PodCertificateRequestとPodCertificateのprojected volumeのサポートを有効化しました(PodCertificateRequestフィーチャーゲートの背後)。(#128010)-
メモ - KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/4317-pod-certificates/README.md
-
PodCertificateRequestはcertificates.k8s.io/v1alpha1スキーマにおける新しい API タイプでCertificateSigningRequestを簡素化し、ポッド証明書発行のユースケースに特化している -
CertificateSigningRequestと違い承認のステップが不要 - ポッド間mTLSに利用できるがポッド間mTLSの標準化を図るものではない
- SPIFFE準拠についてはスコープ外だが将来的な可能性は残されている
- v1.34 時点ではsignerが未実装なので、 projected volume設定しても証明書が発行されずにPodの作成待ちになる → Signerになって理解するPod Certificate
- KEPだと
kube-apiserver>=1.32、kubelet>=1.32、kube-controller-manager>=1.32の表記のままなので注意(?)
volumes: - name: pod-certs projected: defaultMode: 420 sources: - podCertificate: signerName: "kubernetes.io/kube-apiserver-client-pod" keyType: "ECDSAP256" credentialBundlePath: "credential.pem" - KEPだと
-
- DRA機能によってバックされた拡張リソースにより、クラスター管理者は
DeviceClassにextendedResourceNameを指定でき、アプリケーション管理者はPodのリクエストで拡張リソースを引き続き使用してDeviceClassに一致するDRAデバイスをリクエストできるようになりました。NodeResourcesFitプラグインのスコアリングはDRAによってバックされた拡張リソースでは機能しませ
んでした。(#130653) -
PodCertificateRequestのプレリリースライフサイクルを修正しました。(#133350) - CustomResourceDefinitionスキーマで
k8s-short-nameとk8s-long-nameのOpenAPIフォーマットサポートを導入しました。(#132504) - kube-apiserver:
--authorization-configファイルで認可Webhookの決定のキャッシュを無効化するサポートを追加しました。新しいフィールドcacheAuthorizedRequestsとcacheUnauthorizedRequestsをfalseに設定することで、認可済みまたは未認可のリクエストのキャッシュを防ぐことができます。詳細はhttps://kubernetes.io/docs/reference/access-authn-authz/authorization/#using-configuration-file-for-authorizationを参照してください。(#129237) - kube-apiserver:
StructuredAuthenticationConfigurationフィーチャーゲートをGA(一般提供)に昇格しました。(#131916) - kube-apiserver:
--authentication-configファイルで受け入れられるAuthenticationConfigurationタイプがapiserver.config.k8s.io/v1に昇格しました。(#131752) - kube-log-runner:
-log-file-sizeパラメータを追加し、指定サイズに達した時点でログ出力を新しいファイルにローテートする機能を追加しました。-log-file-ageにより古い出力ファイルの自動削除を有効化し、-flush-intervalにより定期的なフラッシュをサポートしました。(#127667) - API
VolumeAttributesClassとVolumeAttributesClassListをstorage.k8s.io/v1に昇格しました。(#131549) -
AuthorizeWithSelectorsとAuthorizeNodeWithSelectorsフィーチャーゲートを安定版に昇格し、常に有効化されるようになりました。(#132656) -
k8s.io/cri-apiから非推奨のgogoプロトコル定義を削除し、google.golang.org/protobufに置き換えました。(#128653) - Boolean-pointer-helper関数を
k8s.io/utils/ptr実装に置き換えました。(#132794) - apiserverで非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました(1/2)。(#132751) - 無効なフィールドのバリデーションエラーメッセージを簡素化し、冗長なフィールド名を削除しました。(#132513)
-
KubeletServiceAccountTokenForCredentialProviders機能がベータになり、デフォルトで有効化されました。(#133017) - CertificateSigningRequestの
.status.conditionsフィールドのconditionTypeの "oneof" approved/deniedチェックを宣言的バリデーションに移行しました。DeclarativeValidationフィーチャーゲートが有効な場合、既存のバリデーションとの不一致はメトリクスで報告されます。DeclarativeValidationTakeoverフィーチャーゲートが有効な場合、宣言的バリデーションが移行されたフィールドのエラーの主要なソースになります。(#133013)-
メモ - CSRはapprovedまたはdenyのどちらか一方の状態のみを持つべきという制約を、コードベースではなく宣言的な定義で実装。保守性と一貫性の向上
-
- validation-genコードジェネレーターがバリデーションの段階的強化(ラチェット機構)をサポートするバリデーションコードを生成するようになりました。(#132236)
-
v1クレデンシャルプロバイダー設定にtokenAttributes.cacheTypeフィールドを追加しました。このフィールドは必須で、サービスアカウントを使用してレジストリクレデンシャルを取得するプロバイダーを設定する際にServiceAccountまたはTokenのいずれかに設定する必要があります。(#132617)-
メモ - token単位でキャッシュするかserviceAccount単位でキャッシュするのか
-
token: 認証プロバイダーがサービスアカウントトークンを、トークンと同じ有効期限を持つレジストリ用認証情報に変換する場合や、レジストリがKubernetesのサービスアカウントトークンを直接サポートしている場合に特に有用 -
ServiceAccount: サービスアカウントごとに認証情報をキャッシュ
-
- 参考: https://kubernetes.io/blog/2025/09/03/kubernetes-v1-34-sa-tokens-image-pulls-beta/
-
- ゼロ値の
metadata.creationTimestampは省略されるようになり、JSON、YAML、CBOR出力で明示的なnullをシリアライズしなくなりました。(#130989) -
MultiCIDRServiceAllocatorがロックされデフォルトで有効になり、DisableAllocatorDualWriteもデフォルトで有効になりました。(#131318)
Features
- Structured Authentication Configでエスケープされた名前を持つCEL式のサポートを追加しました。特殊文字を含む名前にアクセスする際は
[...]の使用を推奨。CELのオプショナル演算子?は、hasが適用できない場合に使用可能 — 例:claims[?"kubernetes.io"]やuser.extra[?"domain.io/foo"]。(#131574) - kubectlの新しい出力フォーマット
kyamlのサポートを追加しました。KYAMLはYAMLの厳密なサブセットで、任意のYAMLプロセッサで処理可能です。KYAMLのフォーマットはJSONとYAMLの中間的
な形式で、デフォルトのYAMLスタイルよりも明示的なため、エラーが発生しにくいです。(#132942) - DRAAdminAccessがデフォルトで有効になり、他のユーザーが使用中のデバイスに対して管理タスク(ヘルス監視やステータス確認など)用にアクセス権を付与するため、特権モードで
ResourceClaimsとResourceClaimTemplatesを作成できるようになりました。(#133085) - Authentication Configuration ファイルの正常ロード後に
apiserver_authentication_config_controller_last_config_infoメトリクスを追加 - Authorization Configuration ファイルの正常ロード後に
apiserver_authorization_config_controller_last_config_infoメトリクスを追加 - Encryption Configuration ファイルの正常ロード後に
apiserver_encryption_config_controller_last_config_infoメトリクスを追加しました。(#132299) - kube-apiserver:
ExternalServiceAccountTokenSigner機能をベータに昇格し、サービスアカウントトークンの外部署名と公開検証キーの取得を有効化しました。これはベータ版のExternalServiceAccountTokenSignerフィーチャーゲートを有効にし、--service-account-signing-endpointフラグを指定することで実現されます。フラグ値は、ファイルシステム上のUnixドメインソケットのパス、または抽象名前空間内のUnixドメインソケットを示す@プレフィックス付きの値のいずれかです。(#131300) - Kubeletがクレデンシャルプロバイダー設定のハッシュ値を
kubelet_credential_provider_config_infoメトリクスを介して報告するようになりました。ハッシュ値はhashラベルに公開されます。(#133016) - Kubelet:
--image-credential-provider-configフラグを拡張し、単一ファイルに加えてディレクトリパスも受け入れるようになりました。ディレクトリが指定された場合、そのディレクトリ
内のすべての.json、.yaml、.ymlファイルが辞書順にロードされマージされます。(#131658)-
メモ - 組み込みの設定の他に独自のレジストリの設定を使いたいような場合に、単一ファイルだと追記が大変、みたいなモチベーション
-
-
CertificateSigningRequestのバリデーションを宣言的バリデーションを使用するように移行しました。DeclarativeValidationフィーチャーゲートが有効な場合、既存のバリデーションとの不一致はメトリクスで報告されます。DeclarativeValidationTakeoverが有効な場合、宣言的バリデーションが移行されたフィールドのエラーの主要なソースになります。(#132361)-
メモ - certificates API(v1/v1alpha1/v1beta1)に対してvalidation-genを有効化
- 参考:https://kubernetes.io/docs/reference/using-api/declarative-validation/
-
- ボリューム拡張失敗からの回復機能をGA(一般提供)に移行しました。(#132662)
-
CertificateSigningRequestの/statusおよび/approvalサブリソースのバリデーションを宣言的バリデーションに移行しました。DeclarativeValidationフィーチャーゲートが有効な場合、既存のバリデーションとの不一致はメトリクスで報告されます。DeclarativeValidationTakeoverフィーチャーゲートが有効な場合、宣言的バリデーションが移行されたフィールドのエラーの主要なソースになります。(#133068) - 組み込みの
system:monitoringロールを更新し、kubeletメトリクスエンドポイントへのアクセス権限を追加しました。(#132178) -
resourceclaim_controller_resource_claimsgauge metric with labelsadmin_access(true or false),allocated(true or false) to track the current number ofResourceClaims. (#132800, @ritazh) [SIG Apps, Auth, Instrumentation and Node] [sig/node,sig/auth,sig/apps,sig/instrumentation] -
admin_access(true または false)とallocated(true または false)ラベル付きのresourceclaim_controller_resource_claimsゲージメトリクスを追加し、現在のResourceClaims数を追跡します。(#132800)
Failing Test
- Kube-apiserver:
--service-account-signing-endpointフラグが抽象ソケット名のフォーマットのみを検証するようになりました。(#131509)
Bug or Regression
- 同じ名前でサービスアカウントが再作成された場合にkubeletトークンキャッシュが古いトークンを返す問題を修正しました。キャッシュはUID対応になりました。さらに、新しい
TokenRequestServiceAccountUIDValidationフィーチャーゲート(ベータ、デフォルト有効)により、設定時にTokenRequestのUIDがサービスアカウントのUIDと一致することを保証します。(#132803)-
メモ - 従来のキャッシュは名前空間とサービスアカウント名のみをキーとしていたため、新たに作成されたサービスアカウントに対して有効期限切れのトークンが返される原因となっていたとのこと
-
- Kube-apiserver: 外部サービスアカウントトークン署名が有効な場合のOIDCディスカバリードキュメントの公開を修正しました。(#131493)
- Kubelet: スタティックPodが任意のResourceClaimを参照することを許可していた抜け穴を閉じました。これらのPodはサニティチェックにより実行に失敗していましたが、そのような参照は明示的に 禁止されるようになりました。(#131844)
-
baselineとrestrictedのPod Security Admissionレベルで、probeとlifecycleハンドラーのhostフィールドの設定をブロックするようになりました。(#125271)-
メモ - issue: https://github.com/kubernetes/enhancements/issues/4940
- probeやlifecycle handlerの.hostフィールドをつかってkubeletからの任意のホストにリクエストを送信できることを悪用される可能性を排除
-
Other (Cleanup or Flake)
-
kubectl attachに警告を追加し、コマンドと出力がそのPodのlogサブリソースを介して利用可能であることをユーザーに通知・リマインドするようになりました。(#127183) - cel-go 依存関係をv0.25.0にバンプしました。変更セットはhttps://github.com/google/cel-go/compare/v0.23.2...v0.25.0で利用可能です。(#131444)
- Kube-apiserver: 非推奨の
apiserver_encryption_config_controller_automatic_reload_success_totalとapiserver_encryption_config_controller_automatic_reload_failure_totalメトリクスを削除し、apiserver_encryption_config_controller_automatic_reloads_totalを支持するようになりました。(#132238) -
apiserver_authentication_config_controller_automatic_reloads_totalとapiserver_authentication_config_controller_automatic_reload_last_timestamp_secondsメトリクスをBETAに昇格しました。(#131798, #131768) -
k8s.io/externaljwtから非推奨のgogoプロトコル定義を削除し、google.golang.org/protobufに置き換えました。(#132772) -
k8s.io/kms/apisから非推奨のgogoプロトコル定義を削除し、google.golang.org/protobufに置き換えました。(#132833) - ./test/e2e用に非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました。(#132764) - pkg/apis用に非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました(2/2)。(#132779) - pod-security-admissionテスト用に非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました。(#132741) - apiserver用に非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました(2/2)。(#132752) - csr用に非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました。(#132699) - pkg/securityとplugin/pkg用に非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました。(#132777) - pod-security-admission admissiontests用に非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました。(#132742) - pod-security-admission policy用に非推奨パッケージ
k8s.io/utils/pointerをk8s.io/utils/ptrに置き換えました。(#132743) - タイマーポインターヘルパー関数を
k8s.io/utils/ptr実装に置き換えました。(#133030) - etcdクライアントライブラリをv3.6.4に更新しました。(#133226)