2
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?

More than 1 year has passed since last update.

Kubernetes 1.28: SIG-Auth の変更内容

Last updated at Posted at 2023-08-31

はじめに

このページではKubernetes v1.28におけるSIG-Authに関連する取り組みについて、ChangelogのChanges By Kindの項目から紹介しています。ここに記載されていないものは別のまとめで記載されていると思いますので、 Kubernetes 1.28: 変更点まとめ も合わせて参照してみてください。

:pencil: がついた文章は、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)

    • :pencil: https://hackmd.io/@enj/SyiXCABZn
      • どうやってnonce衝突の問題の回避するかの話。
      • v1.27ではAES-GCMで使う12バイトのnonceを一意にするためにランダムな値ではなく、8バイトのアトミックカウンタを介して設定された値+4バイトのランダムな値を使っていました。
      • v1.28ではHKDFを使って算出した12バイトの値をnonceに使うようになり、より一般的な制限のない実装になったようです。
  • 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)

    • :pencil: これまでの流れ
      • 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-admissioncontextual 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: 暗号化設定の自動リロードが最期に成功または失敗したときのタイムスタンプ。
    • :pencil: 自動リロードの成功・失敗に関するメトリクスが追加されたことでより安心して利用できるようになったように思います。
  • 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_totalauthorization_duration_seconds を追加しました。(#117211)
2
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
2
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?