はじめに
このページではKubernetes v1.28におけるSIG-Authに関連する取り組みについて、ChangelogのChanges By Kindの項目から紹介しています。ここに記載されていないものは別のまとめで記載されていると思いますので、 Kubernetes 1.28: 変更点まとめ も合わせて参照してみてください。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
Changes by Kind
Deprecation
-
KMS v1
は非推奨になり、今後はセキュリティ更新のみを受け取ります。かわりにKMS v2
を使ってください。将来のリリースでは、--feature-gates=KMSv1=true
をセットして非推奨のKMSv1の機能を使います。(#119007)
API Change
-
アルファ版の機能である
CRDValidationRatcheting
を追加しました。PATCHまたはUPDATEのValidation RatchetingはほとんどのOpenAPIスキーマのバリデーションでリソースの変更されていない部分から投げられたエラーを破棄します。(#118990) -
KMS v2のデータ暗号化鍵の生成方法を変更しました。
KMSv2KDF
feature gateを有効にすると(デフォルトはoff)、KMS v2は秘密のseedといくつかのランダムなデータを組み合わせて単一のデータ暗号化鍵を生成する鍵導出関数を使用します。これにより AES-GCMの12バイトのnonceの衝突を回避し、カウンタベースのnonceの必要性を排除します。(#118828)-
https://hackmd.io/@enj/SyiXCABZn
- どうやってnonce衝突の問題の回避するかの話。
- v1.27ではAES-GCMで使う12バイトのnonceを一意にするためにランダムな値ではなく、8バイトのアトミックカウンタを介して設定された値+4バイトのランダムな値を使っていました。
- v1.28ではHKDFを使って算出した12バイトの値をnonceに使うようになり、より一般的な制限のない実装になったようです。
-
https://hackmd.io/@enj/SyiXCABZn
-
PersistentVolumesはボリュームが最後にフェーズを遷移した時のタイムスタンプを保持する新しいフィールド
LastPhaseTransitionTime
を持ちます (#116469) -
ValidtaingAdmissionPolicy
はbetaに昇格し、デフォルトではオフにしています。(#119409) -
pvc.Status
からresizeStatus
numが取り除かれ、AllocatedResourceStatus
に置き換えられました。(#116335) -
Feature gateの
WindowsHostProcessContainers
は削除されました。(#117570) -
ローカルのapiserverがバージョンスキューのためにサービスを提供できない場合や、リクエストされたAPIがローカルAPIサーバで無効になっている場合、ピアのkube-apiserverへのリクエストのプロキシする機能をサポートしました。(#117740)
-
SelfSubjectReview
APIがauthentication.k8s.io/v1
に昇格し、kubectl auth whoami
コマンドがGAになりました。(#117713) -
ResourceClaimTemplateから生成されるResourceClaimの名前が生成されるようになった。ベースとなる名前は
<pod>-<claim name>
のままですが、ランダムな接尾辞を付けることで名前の衝突を避けることができます。(#117351) -
kube-controller-manager
:LegacyServiceAccountTokenCleanUp
feature gateがalpha版で利用可能になりました(デフォルトはoff)。有効にすると、legacy-service-account-token-cleaner
controller loopは--legacy-service-account-token-clean-up-period
(デフォルトは1年)で指定した期間に使われていない & ServiceAccountオブジェクトの.secrets
リストから参照されている & Podから参照されていない、サービスアカウントトークンのSecretを削除します。(#115554)-
これまでの流れ
-
LegacyServiceAccountTokenNoAutoGeneration
でSecretベースのSA Tokenの自動生成停止 (v1.26でGA) -
LegacyServiceAccountTokenTracking
でSecretベースのSA Tokenの使用をトラッキング (v1.28でGA) -
LegacyServiceAccountTokenCleanUp
で指定された期間使用されていないSecretベースのSA Tokenを削除
-
-
これまでの流れ
Feature
-
LegacyServiceAccountTokenTracking
feature gateがGAになりました。自動生成されたSecretベースのサービスアカウントトークンを使用すると警告が出され、関連するSecretには最終使用時刻のタイムスタンプがラベルされます。(labelのキーはkubernetes.io/legacy-token-last-used
)(#117591) - ログにおけるKeyIDのハッシュ化。このリリースではログにおける
KeyID
の値をハッシュ化する機能を追加します。KeyID
値はセンシティブな情報でログに生のテキストで出力すべきではありません。KeyID
値をハッシュ化することで、データの機密性を守りながら必要な情報を記録することができます。(#118988) - Kube-controller-manager: dynamic resource controllerはスケジューラがポッドを無視するようにポッドが作られたときに介入し、遅延リソースのクレーム割り当てをトリガーしたり、ポッドのクレームを予約したりします。(#118209)
- Kubelet: ノードのアクセスをノードで必要なオブジェクトに限定することで、動的なリソース割り当てのセキュリティを強化しました。(#116254)
- KuberentesはGo
1.20.5
でビルドされます。 (#118507) - KubernetesはGo
1.20.6
でビルドされます。(#119324) -
pod-security-admission
をcontextual loggingを使うように移行しました。(#114471) - certificate controller(
kube-controller-manager
内の)をcontextual loggingを使うように移行しました。(#113994) - Encryption Configuration Controllerに新しいメトリクスを追加しました。このリリースでは、暗号化設定の自動リロードを監視するのに役立つ新しいメトリクスが追加されました。新しいメトリクスには以下が含まれます。これらのメトリクスはEncryption Configuration Controllerのヘルスモニターと暗号化設定の自動リロード中に発生する可能性のあるトラブルシューティングに使用できます。(#119008)
apiserver_encryption_config_controller_automatic_reload_failures_total
: 暗号化設定の自動リロードに失敗した回数の合計。
apiserver_encryption_config_controller_automatic_reload_success_total
: 暗号化設定の自動リロードに成功した回数の合計。
apiserver_encryption_config_controller_automatic_reload_last_timestamp_seconds
: 暗号化設定の自動リロードが最期に成功または失敗したときのタイムスタンプ。- 自動リロードの成功・失敗に関するメトリクスが追加されたことでより安心して利用できるようになったように思います。
- Webhook authorizersに送られるSubjectAccessReview requestの
spec.resourceAttributes.version
が空の場合にデフォルトで*
をセットします。(#116937) -
v1.12
でGA(無条件で有効)になったAdvancedAuditing
feature gateが削除されました。(#118763) - Podが終了するか実行されなくなると、そのPodの
ResourceClaim
は他のPodに再利用されるか削除されます。(#118817) -
klog
のテキスト出力でstructs, maps、slicesのエンコーディングにJSONを使用するように鳴りました。(#117687) - kubeadm: 現在のシステム時刻に対して5分過去にオフセットされた開始時刻を持つCA証明書を生成し、クロックの非同期を回避します。(#118922)
Documentation
N/A
Failing Test
N/A
Bug or Regression
-
OpenAPI
コンテンツを提供する際のレースコンディションを修正しました。(#117705) - APIサーバが認証webhookにImpersonated UIDを送信しない問題を修正しました。(#116681)
- タイミングトレースを記録する際にレースコンディションがありました。実際には影響は少ないと思われます。(#117139)
- OpenAPI V2にクライアントがアクセスしない場合、
kube-apiserver
のCPUとメモリの消費量を削減しました。また、多数のCRDをインストールした場合のapiserverのパフォーマンスを改善しました。 (#118212)
Other (Cleanup or Flake)
-
genericclioptions.IOStreams
を非推奨にしてgenericiooptions.IOStreams
を使用します。(#117102) - OpenAPI protoのデシリアライゼーションはgnosticライブラリの代わりに
gnostic-models
を使うべきです。(#118384) - 特にCPUリソースの消費を少なくするために
OpenAPI v2
specを50%以上縮小しました。(#118204) -
kube-apiserver
は認可webhookへのリクエストを結果ごとに分割して監視できる2つの新しいメトリクスauthorization_attempts_total
とauthorization_duration_seconds
を追加しました。(#117211)