LoginSignup
1
0

More than 1 year has passed since last update.

Kubernetes 1.26: SIG-Auth の変更内容

Last updated at Posted at 2023-01-12

はじめに

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

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

Changes by Kind

Deprecation

API Change

  • ResourceClaim API(DynamicResourceAllocation feature gate のもので resource.k8s.io/v1alpha1 API group)が追加されました。新しいAPIはPodが特別な種類のリソースを要求できるようになり、Nodeやクラスタその他実装したモデルで利用できるようになり、既存のDevice Pluginよりも柔軟になりました。 (#111023, @pohly)

  • httpGetを利用するコンテナのライフサイクルハンドラ preStoppostStartは特定のschemeheaderフィールドを尊重します。これによりカスタムヘッダの設定やHTTPSへのschemeの変更ができ、コンテナの startup/readiness/liveness probe機能と整合性がとれます。以前のリリースとの互換性のため、scheme: HTTPSで設定されたライフサイクルハンドラでHTTPを使っていることを示すエラーが発生するとHTTPでリクエストするようにフォールバックします。これが起こった場合、LifecycleHTTPFallback イベントがPodのnamespaceに記録され、kubeletのkubelet_lifecycle_handler_http_fallbacks_total メトリックが増加するようになりました。クラスタ管理者はkubeletで--feature-gates=ConsistentHTTPGetHandlers=falseを設定することで機能のオプトアウトが可能です。(#86139, @jasimmons)

  • PodDisruptionBudgetはalphaのspec.unhealthyPodEvictionPolicyを追加しました。kube-api-serverPDBUnhealthyPodEvictionPolicy feature-gateが有効なときにこのフィールドをAlwaysAllowに設定すると、PodDisruptionBudgetが有効かどうかにかかわらずready conditionを持たないpodをevictさせることができるようになります。(#113375, @atiratree)

  • APIオブジェクトで指定されるmetav1.LabelSelectorsは利用時にエラーとなる不正なlabel値を含んでいないことを保証するために検証されます。(#113699, @liggitt)

  • 自信のsubject attributesを取得するためのauth API(selfsubjectrevies API)を追加しました。対おうするkubectlコマンドは - kubectl auth whoami です。(#111333, @nabokihms)

:pencil2: KEP-3325: Auth API to get self user attributes

  • Aggregated discoveryはalphaになり、AggregatedDiscoveryEndpoint feature flagで切り替えできます。(#113171, @Jefftree)

  • "Retriable and non-retriable pod failures for jobs" (PodDisruptionConditions) 機能がbetaになりました。(#113360, @mimowo)

  • admission policiesを検証するv1alpha1 APIを導入し、CEL expression(KEP 3488: CEL for Admission Control)による拡張admission controlを有効にします。使用するには、ValidatingAdmissionPolicy feature gate と--runtime-configadmissionregistration.k8s.io/v1alpha1を有効にしてください。(#113314, @cici37)

:pencil2: @uesyn さんが詳しい記事を書いてくれています。 https://qiita.com/uesyn/items/de3343d657bc4d0b0d8f

  • KMS: configのauto reloadが有効な場合にkms configの名前の重複を検証します。APIサーバの --encryption-provider-config-automatic-reload フラグによりencryption configのauto reloadを有効にしている場合、encryption config内の全てのKMSプロバイダ名(v1 & v2)がユニークである必要があります。(#113697, @aramase)

:pencil2: v1.26では設定ファイルの自動リロードが実装されました.
https://github.com/kubernetes/kubernetes/pull/112050

  • DynamicKubeletConfig feature gateがAPIサーバから削除されました。Dynamic kubelet reconfigurationは古いノードがこの機能に依存していたとしても利用できなくなります。これは、Kubernetesのversion skewのpolicyに則ったものです。(#112643, @SergeyKanzhelev)

Feature

  • Pod Security admission: pod-securityのwarn levelのデフォルトがenforce levelの値になりました。(#113491, @tallclair)

:pencil2: enforce levelが設定されており、warn levelが設定されていない場合にenforce levelの値がwarn levelの値になります。enforce-version, warn-versionも同じような挙動と思われます。
https://kubernetes.io/docs/concepts/security/pod-security-admission/#pod-security-admission-labels-for-namespaces

  • DelegateFSGroupToCSIDriver 機能がGAになりました。(#113225, @bertinatto)

  • 新しい DisableCompression フィールド (default=false)がkubeconifgのcluster info配下に追加されました。trueにセットすると、kubeconfigを使用しているクライアントは、apiserverへのすべてのリクエストに対してレスポンス圧縮をオプトアウトします。これはクライアントとサーバのネットワーク帯域に余裕がある(>30MB/s)場合や、サーバがCPU制約がある場合にlist callのレイテンシを大幅に改善することができます。(#112309, @shyamjvs)

  • API Server Tracingに様々な新しいspanやspan evnetsが追加されました。 (#113172, @dashpole)

  • API Server tracingのopentelemetryのためのroot span nameをKubernetesAPIからHTTP GETに変更されました。(#112545, @dims)

  • Golangのruntimeに関連した新しいメトリクスをKuberentesコンポーネントに追加しました。(#111910, @tosi3k)

    • go_gc_cycles_automatic_gc_cycles_total
    • go_gc_cycles_forced_gc_cycles_total
    • go_gc_cycles_total_gc_cycles_total
    • go_gc_heap_allocs_by_size_bytes
    • go_gc_heap_allocs_bytes_total
    • go_gc_heap_allocs_objects_total
    • go_gc_heap_frees_by_size_bytes
    • go_gc_heap_frees_bytes_total
    • go_gc_heap_frees_objects_total
    • go_gc_heap_goal_bytes
    • go_gc_heap_objects_objects
    • go_gc_heap_tiny_allocs_objects_total
    • go_gc_pauses_seconds
    • go_memory_classes_heap_free_bytes
    • go_memory_classes_heap_objects_bytes
    • go_memory_classes_heap_released_bytes
    • go_memory_classes_heap_stacks_bytes
    • go_memory_classes_heap_unused_bytes
    • go_memory_classes_metadata_mcache_free_bytes
    • go_memory_classes_metadata_mcache_inuse_bytes
    • go_memory_classes_metadata_mspan_free_bytes
    • go_memory_classes_metadata_mspan_inuse_bytes
    • go_memory_classes_metadata_other_bytes
    • go_memory_classes_os_stacks_bytes
    • go_memory_classes_other_bytes
    • go_memory_classes_profiling_buckets_bytes
    • go_memory_classes_total_bytes
    • go_sched_goroutines_goroutines
    • go_sched_latencies_seconds
  • apiserverのmetrics/slisにヘルスチェックのSLIメトリクスを公開しました。(#112741, @logicalhan)

  • LegacyServiceAccountTokenNoAutoGeneration feature gateがGAに昇格しました。(#112838, @zshihang)

:pencil2: v1.24からbetaでデフォルト有効になっていたSecretベースのService Account Tokenの作成機能がGAになりました。

  • alphaのLegacyServiceAccountTokenTrackingを有効にすると、SecretベースのService Account Tokenに最後に使った日付を含むkubernetes.io/legacy-token-last-usedが適用されるようになります。(#108858, @zshihang)

:pencil2: serviceaccount_legacy_tokens_totalと用途が似ている気がするが、metricはSecretベースのTokenを受け取った際にカウントされるもの。今回のものは使う側で最後に使った時刻が記録されるもの。の違いがある気がします。

次のバージョンのv1.27でBeta予定。
またv1.27ではLegacyServiceAccountTokenCleanUpがalphaで提供される予定。
see: KEP-2799: Reduction of Secret-based Service Account Tokens

  • v1.24でGAとなり無条件で有効であるCSRDuration feature gateはv1.26で削除されます。(#112386, @Shubham82)

  • kubectl config viewはdatapolicy tagでマークされたシークレットフィールドを保護するようになりました。(#109189, @mpuckett159)

Documentation

Bug or Regression

  • golang.org/x/netv0.1.1-0.20221027164007-c63010009c80に上げました。(#112693, @aimuz)

  • DelegatingAuthenticationOptionsを使っている呼び出し側が呼び出し元がDisableAnonymousを使ってAnonymous認証を無効化できるようになりました(#112181, @xueqzhan)

  • exec authを使っているときにkubectlで大量のオブジェクトを扱うと、適切でない接続管理により引き起こされるエフェメラルポート枯渇の不具合を修正しました。(#112017, @enj)

  • PodDisruptionConditions feature gateが有効な場合に、NoExecuteでtaintされたノードPodが実行し続けられるようにコードを修正しました。(#112518, @mimowo)

  • PodDisruptionConditions feature gateが有効な場合、2min後にstale disruption conditionの状態を変更するために使われるdisruption controllerを修正しました。(#113580, @mimowo)

:pencil2: 権限不足でpodのstatusを更新できなかった問題を修正していました(patch操作の許可)

  • kube-apiserverで--encryption-provider-configファイルでカスタムリソースを指定でき、etcdで暗号化できるようになりました。(#113015, @ritazh)

:pencil2: EncryptionConfigurationを使ったオブジェクト暗号化でカスタムリリースを対象に指定しても暗号化できなかった問題があったようです。

If custom resources are added to EncryptionConfiguration and the cluster version is 1.26 or newer, any newly created custom resources mentioned in the EncryptionConfiguration will be encrypted. Any custom resources that existed in etcd prior to that version and configuration will be unencrypted until they are next written to storage. This is the same behavior as built-in resources. See the Ensure all secrets are encrypted section.
https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration

  • CVE-2022-32149に対する修正でgolang.org/x/textv0.3.8に更新しました。 (#112989, @ameukam)

Other (Cleanup or Flake)

  • 新しいAPIサーバのflag--encryption-provider-config-automatic-reloadが追加され、サーバ再起動の必要なく自動的にリロードされるようになりました。リロードが有効な場合すべてのKMS pluginsは/healthz/kms-providersで単一のhealthzチェックにマージされるようになりました。(#113529, @enj)

:pencil2: 例えばローカルでシークレットを管理している場合もローテーション時の再起動が不要になりオペレーション負荷が軽減されるのではないかと思います。シークレットのローテーションする場合、新しいシークレットを末尾に追加(再起動)、新しいシークレットを先頭に変更(再起動)、再暗号化、古いシークレットの削除(再起動)のようなフローで設定変更のたびに再起動が必要でした。

  • test/e2e/frameworkをリファクタリングしたことでcore frameworkが小さくなりました。リソース監視、ログサイズ監視、メトリクス収集、デバッグ情報出力などのオプショナルな起動は特定のe2eテストスイートでインポートする必要があります。従来core frameworkにあった機能を再有効化するためのInitパッケージ提供されています。このPRによってコンパイルできなくなったコードがある場合、コミットメッセージのスクリプトを使ってコードを更新することができます。(#112043, @pohly)

  • In-TreeのOpenStack cloud provider(とCinder volume provider)は削除されました。cloud-provider-openstackのcloud providerとcsi driverを使ってください。(#67782, @dims)

所感

KMS v2に関する仕様の整理や作業がもう少し進んでいると思いましたが、今バージョンでは設定の自動リロード機能の追加ぐらい(?)でした。
see: https://github.com/orgs/kubernetes/projects/94/views/1

その他にはSecretベースのService Account Tokenの退役についての作業も進んできています。
v1.26現在でSecretベースのToken自動生成はデフォルトで止まっていますが、今バージョンから最終利用時間が記録されるようになりました。今後は記録された最終利用時間から十分に時間が経過したもの(かつPodから参照されていないもの)を削除するような機能がリリースされる予定となっています。

1
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
1
0