LoginSignup
2
0

Kubernetes 1.27: SIG-Auth の変更内容

Last updated at Posted at 2023-05-10

はじめに

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

v1.27ではKMS v2がベータになり、alphaでは提供されていなかった鍵の自動ローテーションの仕組みも追加されています。alpah→betaで内部での鍵管理の仕組みが変わったりしましたがよりシンプルになっています。

:pencil: がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。

Changes by Kind

Deprecation

  • SecurityContextDeny admission pluginは非推奨になり将来のバージョンで削除されます (#115879)

API Change

  • API: resource.k8s.io/v1alpha1.PodSchedulingresource.k8s.io/v1alpha2.PodSchedulingContext にリネームされました (#116556)

  • ValidationRulemessageExpressionフィールドが追加されました (#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)

  • APIサーバのデータ保管時の暗号化設定でリソースのリストにワイルドカードが使用できます。例として全てのリソースを暗号化したり、現在と将来の全てのカスタムリソースを暗号化するなど。(#115149)

    • :pencil2: 暗号化の設定でのワイルドカード指定
    • '*.*''*.<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)

    • :pencil2: 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を含める
    • :pencil2: pluginの対応状況
      • GoogleCloudPlatform/k8s-cloudkms-plugin
        • Issueがあるがまだ進んでないように見える
      • Azure/kubernetes-kms
        • PRが出ていて作業中
      • aws-encryption-provider
        • Issue/PR見当たらず
  • コントロールプレーンのコンポーネントで/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]

  • EncryptionConfigurationcacheSizeはKMSv2 providerではサポートされません (#113121)

    • :pencil2: 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_totaltransformer_prefixラベルとstatusを含むように更新されました。(#115394)
  • LegacyServiceAccountTokenTracking feature gateがベータになりました。自動生成されたSecretベースのServiceAccountトークンを使用すると、デフォルトで警告が表示されるようになり、関連するSecretには最後に使用されたタイムスタンプが表示されます(ラベルのkeyはkubernetes.io/legacy-token-last-used)。(#114523)
  • 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

  • OwnerReferencesPermissionEnforcementadmission 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)
    • :pencil2: これまではRSAまたは非RSAに限らずkubelt自体またはkubeletのクライアント証明書に設定するkey usageは1種類のみでしたが、暗号化方式により適切な値が設定されるようになります。
      e.g. ["key encipherment", "digital signature", "client auth"] or ["digital signature", "client auth"]
  • Shared informterは同期されているかどうかを正しく伝搬するようになりました。個々のinformerハンドラは同期されているかどうかをチェックできるようになりました(HasSynced)。初期のリスト内のitemについて、コントローラが自身の作業が完了したかどうかを追跡するためのライブラリサポートが追加されました(AsyncTracker)。(#113985)
  • KubernetesのAPIサーバは、kubelet認証用のクライアント証明書ファイルがローテーションされている場合に、既存のTLS接続を正しく検出して閉じるようになりました。(#115315)
  • ProgressReporterでTotal test specが利用可能になりました。(#114417)
  • CVE-2022-41723の修正のため golang.org/x/netv0.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.PollUntilContextCancelwait.PollUntilContextTimeoutwait.ExponentialBackoffWithContext を使うことができます。(以下関数の詳細は省略)(#107826)
  • go-josev2.6.0に更新しました (#115893)
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