はじめに
このページではKubernetes v1.27におけるSIG-Authに関連する取り組みについて、ChangelogのChanges By Kindの項目から紹介しています。ここに記載されていないものは別のまとめで記載されていると思いますので、 Kubernetes 1.27: 変更点まとめ も合わせて参照してみてください。
v1.27ではKMS v2がベータになり、alphaでは提供されていなかった鍵の自動ローテーションの仕組みも追加されています。alpah→betaで内部での鍵管理の仕組みが変わったりしましたがよりシンプルになっています。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
Changes by Kind
Deprecation
-
SecurityContextDeny
admission pluginは非推奨になり将来のバージョンで削除されます (#115879)
API Change
-
API:
resource.k8s.io/v1alpha1.PodScheduling
はresource.k8s.io/v1alpha2.PodSchedulingContext
にリネームされました (#116556) -
ValidationRule
にmessageExpression
フィールドが追加されました (#115969) -
ClusterIP allocatorが追加されました。新しいallocatorは以前のIPv4向けのService CIDR block size limitaionを削除し、IPv6 sizeを/64に制限します (#115075)
-
alpha APIの追加: ClusterTrustBundle(
certificates.k8s.io/v1alpha1
)。ClusterTrustBundleはクラスタ内のワークロードにX.509のトラストアンカーを配布するために利用できます。(#113218)-
CSR APIで署名したX.509 証明書のトラストバンドルを配布
RootCAConfigMapで配布するものはkube-apiserverのサーバ証明書のためのものやBound Service Account Tokenを検証するためのトラストバンドルが含まれます - 将来的にはProjected Volumeを使ってPodにマウントできるようです
- KEP: https://github.com/kubernetes/enhancements/tree/master/keps/sig-auth/3257-trust-anchor-sets
-
CSR APIで署名したX.509 証明書のトラストバンドルを配布
-
APIサーバのデータ保管時の暗号化設定でリソースのリストにワイルドカードが使用できます。例として全てのリソースを暗号化したり、現在と将来の全てのカスタムリソースを暗号化するなど。(#115149)
- 暗号化の設定でのワイルドカード指定
-
'*.*'
や'*.<group>'
のような形でリソースを指定できる -
'*.'
はcoreグループの全リソース
-
SelfSubjectReview
がベータに昇格しました (#116274) -
kms v2 pluginのkey IDがstableの間、APIサーバはデータ暗号化の鍵を再利用するようになりました。データ暗号化の鍵はサーバ起動時にランダムに生成されますが、nonceの衝突を防ぐためにアトミックカウンタが使用されます。(#116115)
-
PodDisruptionBudgetの
spec.unhealthyPodEvictionPolicy
フィールドはbetaになりデフォルトで有効になりました。この機能が有効なサーバでは、このフィールドをAlwaysAllowに設定することで、PodDisruptionBudgetでカバーされているunhealthyなpodsのevictを常に許可できます。(#115363) -
KMSv2がベータになりました (#115123)
-
v1からの主な変更点
- Performance改善
- DEKを使い回す
- (alphaで導入されたLocal KEKを導入するKey hierarchyデザインは中止)
- Status API
- ステータスだけでなくリモートKMS KEKの公開名であるKey IDもレスポンスに含める
- APIサーバはKey IDの変更を検知することで鍵ローテーションを行う
- Key Rotation
- APIサーバはKey IDの変更を検知したらDEKを再生成してstorage migration
- APIサーバの再起動は不要
- EncryptionConfigurationのホットリロード
- APIサーバの再起動なしに設定を反映
- Observability
- Encrypt/Decryptリクエストにリクエスト毎に一意なUIDを含める
- Performance改善
-
v1からの主な変更点
-
コントロールプレーンのコンポーネントで
/metrics/slis
が利用できるようになり、ヘルスチェックメトリクスをスクレイピングできるようになりました。(#114997) -
StatefulSetAutoDeletePVC
feature gateがベータに昇格しました (#116501) -
ValidatingAdmissionPolicy
がvalidation expressionのtypeチェックの結果を含むstatusフィールドを提供するようになりました。このtypeチェックは情報提供でありポリシーの動作は変更されません。 -
ValidatingAdmissionPolicy が、検証式の型チェックの結果を含むステータスフィールドを提供するようになりました。この型チェックは完全に情報提供であり、ポリシーの動作は変更されません。(#115668)
-
cacheSize field in EncryptionConfiguration is not supported for KMSv2 provider (#113121, @aramase) [sig/api-machinery,sig/auth,sig/testing]
-
EncryptionConfiguration
のcacheSize
はKMSv2 providerではサポートされません (#113121)- DEKが1つになりそれを起動している間キャッシュするようになったのでsizeパラメータは廃止になった
Feature
- kubectl explainに古いopenapiv2の実装を利用するための
--output plaintext-openapiv2
引数を追加しました。(#115480) - 不正なkeyIDをStatus RPCが返した回数を計測するための
apiserver_envelope_encryption_invalid_key_id_from_status_total
を追加しました。(#115846) - KMSv2のgRPC呼び出しのレイテンシを計測するメトリック
apiserver_envelope_encryption_kms_operations_latency_seconds
を追加しました。(#115649) -
apiserver_storage_transformation_operations_total
がtransformer_prefix
ラベルとstatusを含むように更新されました。(#115394) -
LegacyServiceAccountTokenTracking
feature gateがベータになりました。自動生成されたSecretベースのServiceAccountトークンを使用すると、デフォルトで警告が表示されるようになり、関連するSecretには最後に使用されたタイムスタンプが表示されます(ラベルのkeyはkubernetes.io/legacy-token-last-used
)。(#114523)- 警告はKEP-1693: Warning mechanism for use of deprecated APIs の仕組みで表示される
- KubeletはPodが
net.ipv4.ip_local_reserved_ports sysctl
を使用することをデフォルトで許可しますが最小のカーネルバージョンは3.16です。Pod Security admissionはv1.27以上のバージョンでbaselineおよびrestrictedのポリシーでこの sysctl を許可します。(#115374) - mainのkube-controller-managerのバイナリでcontextual logginを使うように移行しました (#116529)
- service-account controller(kube-controller-manager内)をcontextual loggingを使うように移行しました (#114918)
- klogのパフォーマンス改善 (#115277)
- kubectlコマンドの
whoami
がGAに昇格しました (#116510) - mount-utils mounterが、同時フォーマット操作の数を制限するオプションを提供するようになりました (#115379)
- cAdvisorをv0.47.0に更新しました (#114883)
Bug or Regression
-
OwnerReferencesPermissionEnforcement
admission pluginが有効な場合のStatefulSetAutoDeletePVC
featureを修正しました (#114116) - CRD Validation Rules (beta)とValidatingAdmissionPolicy (alpha)ですべてのadmission requestが
runtime error: index out of range [3] with length 3 evaluating rule: <rule name> under certain circumstances
エラーという結果になることがある不具合を修正しました (#114857) -
multipleOf
を0したCRDのバリデーションがpanicになる問題を修正しました (#114869) - 強制削除されたPodはコンテナランタイムがエラーを返すとkubeletが再起動するまで終了が失敗することがあります。ランタイム障害のテストを強化しスタティックPod(特に固定UIDを利用するもの)が確実に再起動されるようにより厳格なreconcilationを行います。これらの変更の副作用としてスタティックPodは以前より小さい遅延で再起動し、Podの設定はより早く有効になります。kubeletが追跡しているPodの数を計測する新しいメトリック
kubelet_known_pods
が追加されました。オペレーターはこのメトリックを使用して、完了しない可能性のあるOrphan状態のPodを追跡できます。(#113145) -
key encipherment
usageのAPIバリデーションを緩和し、kubeletは要求されたusageを適切に利用します。(#111660)-
これまではRSAまたは非RSAに限らずkubelt自体またはkubeletのクライアント証明書に設定するkey usageは1種類のみでしたが、暗号化方式により適切な値が設定されるようになります。
e.g.["key encipherment", "digital signature", "client auth"]
or["digital signature", "client auth"]
-
これまではRSAまたは非RSAに限らずkubelt自体またはkubeletのクライアント証明書に設定するkey usageは1種類のみでしたが、暗号化方式により適切な値が設定されるようになります。
- Shared informterは同期されているかどうかを正しく伝搬するようになりました。個々のinformerハンドラは同期されているかどうかをチェックできるようになりました(
HasSynced
)。初期のリスト内のitemについて、コントローラが自身の作業が完了したかどうかを追跡するためのライブラリサポートが追加されました(AsyncTracker
)。(#113985) - KubernetesのAPIサーバは、kubelet認証用のクライアント証明書ファイルがローテーションされている場合に、既存のTLS接続を正しく検出して閉じるようになりました。(#115315)
- ProgressReporterでTotal test specが利用可能になりました。(#114417)
- CVE-2022-41723の修正のため
golang.org/x/net
をv0.7.0
に更新しました (#115786) - KMS v2プラグインからの暗号化応答は、暗号化が実行されるまで待つのではなくDEK生成時の早い段階で検証されるようになりました。(#116877)
Other (Cleanup or Flake)
- ClusterRole
system:kubelet-api-admin
から不要なルールのnodes/spec
を削除しました。(#113267) - (#107826, @smarterclayton) [SIG API Machinery, Auth, Cloud Provider, Storage and Testing] [sig/storage,sig/api-machinery,sig/auth,sig/testing,sig/cloud-provider]
-
wait.Poll*
とwait.ExponentialBackoff*
関数は非推奨になり将来のリリースで削除されます。かわりにwait.PollUntilContextCancel
、wait.PollUntilContextTimeout
やwait.ExponentialBackoffWithContext
を使うことができます。(以下関数の詳細は省略)(#107826) -
go-jose
をv2.6.0
に更新しました (#115893)