はじめに
このページではKubernetes v1.21におけるSIG-Authに関連する取り組みについて、ChangelogのChanges By Kindの内容から紹介しています。ここに記載されていないものは別のまとめで記載されていると思いますので、 Kubernetes 1.21: 変更点まとめ(後日公開) も合わせて参照してみてください。
今回はBoundServiceAccountVolumeのbeta昇格が個人的なトピックです。詳しく知りたい方は以下の記事を参照してみてください。
PodSecurityPolicyも気になるところですが、もうしばらく様子を見たいと思っています。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
Changes by Kind
Deprecation
-
PodSecurityPolicy APIは1.21で非推奨となり、1.25からは提供されなくなります。(#97171, @deads2k)
-
export クエリパラメータが完全に削除されました。(APIリソースによる一貫性のないサポート、v1.14で非推奨)。 このクエリパラメータを設定したリクエストは、400ステータスレスポンスを受け取るようになりました。(#98312, @deads2k)
kubectlではv1.19で--export
フラグ削除済み。REST APIのクエリパラメータとしてはまだ残っていたみたいです。
-
audit.k8s.io/v1beta1
とaudit.k8s.io/v1alpha1
のaudit policyとaudit eventsが非推奨になり、v1.13から利用可能なaudit.k8s.io/v1
を採択します。--audit-policy-file
でalphaやbetaのポリシー設定を指定している、--audit-log-version / --audit-webhook-version
でalphaやbetaのaudit eventを明示的にリクエストしているkube-apiserverは、v1.24より前にaudit.k8s.io/v1
を使用し、audit.k8s.io/v1
のeventを受け付けるように更新する必要があります(MUST)。 (#98858, @carlory) [SIG Auth]
--audit-policy-file
のPolicyリソースや--audit-log-version
、--audit-webhook-version
でalphaやbetaを指定している場合にはv1.24までにaudit.k8s.io/v1
を使うように更新しましょう。
API Change
これまでCSI driver/providerが(Podの)ServiceAccount Tokenを取得する方法としては、filesystemから読み込む方法、またはdriver/provider毎にTokenRequestを使ってtokenを取得する必要がありました(VolumeContextにPod情報やServiceAccount Nameは含まれていた)。
filesystemから読み込む方法はpermissionの問題やhostPath(/var/lib/kubelt/pods?)が必要な点、automountServiceAccountToken=falseが設定されると使えないなどの問題がありました(この方法を採用していたdriverが存在していたのかは不明)。
driver/providerがTokenRequestを使ってtokenを発行する方法は、driver/providerに権限を与える必要があることや、それぞれで同じ処理の実装が必要という問題がありました。
問題を解決するために、CSIServiceAccountTokenでは、kubeletがTokenRequestを使って発行したtokenがdriverへのNodePublishVolume()リクエストのVolumeContextで渡されます。
https://github.com/kubernetes/kubernetes/blob/v1.21.0/pkg/volume/csi/csi_mounter.go#L231
-
FieldManagerは、オブジェクトが永続化される前にリセットされるフィールドを所有しなくなりました (e.g. "status wiping") (#99661, @kevindelgado) [SIG API Machinery, Auth and Testing]
-
Generic ephemeral volumesがベータになりました。 (#99643, @pohly) [SIG API Machinery, Apps, Auth, CLI, Node, Storage and Testing]
-
PodDisruptionBudget APIオブジェクトがstatusにconditionsを含めることができるようになりました。(#98127, @mortent) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation]
-
GenericEphemeralVolume feature gateが有効な場合、PodSecurityPolicyは許可されたvolume typeとして"Generic"のみを保存します。(#98918, @pohly) [SIG Auth and Security]
-
bazelによるKubernetesのビルドのサポートを削除しました。(#99561, @BenTheElder) [SIG API Machinery, Apps, Architecture, Auth, Autoscaling, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Scalability, Scheduling, Storage, Testing and Windows]
-
Storageのキャパシティトラッキング(CSIStorageCapacity feature)がbetaに昇格しデフォルトで有効になりました。
storage.k8s.io/v1alpha1/VolumeAttachment
とstorage.k8s.io/v1alpha1/CSIStorageCapacity
オブジェクトは非推奨です。(#99641, @pohly) [SIG API Machinery, Apps, Auth, Scheduling, Storage and Testing] -
BoundServiceAccountVolume featureがbetaに昇格し、デフォルトで有効になりました。
- これにより、
/var/run/secrets/kubernetes.io/serviceaccount/token
でコンテナに提供されるtokenが有効期限付き、自動更新、Podが削除されると無効になるように変更されました。クライアントは、有効なトークンを引き続き使用できるように、定期的に(1分に1回を推奨)diskからtokenをリロードする必要があります。k8s.io/client-go
のv11.0.0+
およびv0.15.0+
はtokenを自動的にリロードします。デフォルトでは、挿入されたtokenは有効期間が延長されるため、新しく更新されたtokenが提供された後も有効なままです。serviceaccount_stale_tokens_total
metricを使って、延長された有効期間に依存し、更新されたtokenがコンテナに提供された後も(古い)tokenを使用し続けるワークロードを監視できます。そのmetiricにて、既存のワークロードが延長された有効期間に依存していないことを示している場合、--service-account-extend-token-expiration=false
でkube-apiserverを起動することにより、挿入されたtokenの有効期間を1時間に短縮できます。(#95667, @zshihang) [SIG API Machinery, Auth, Cluster Lifecycle and Testing]
- これにより、
BoundServiceAccountTokenVolumeがデフォルトで有効になりましたが、現在は有効期間を1年間に延長する措置が入っています。その場合、token自体は本来の有効期間をもとにローテーションされますが、古い方のtokenも(有効期間が延長されているため)しばらくはそのまま(有効期限を持たないレガシーなtokenと同じように)使い続けることが可能です。serviceaccount_stale_tokens_total
では、そのような本来の有効期間(1時間)を超えてtokenを使っているようなワークロードの存在を監視できます。
- https://qiita.com/hiyosi/items/35c22507b2a85892c707
Bound Service Account Tokenへの切り替わりにあたっての確認事項- https://qiita.com/hiyosi/private/e24b65c11d9be7de9a97
-
EndpointSlice ControllersがGAになりました。EndpointSliceControllerはdeprecatedTopologyフィールドを生成せず、zoneとnodeNameフィールドを通じてのみトポロジー情報を提供します。(#99870, @swetharepakula)
-
PodDisruptionBudget APIがschema変更無しで
policy/v1
に昇格しました。唯一の機能的な変更点は、空のselector({}
)がpolicy/v1
PodDisruptionBudgetに書き込まれた際、namespaceの全podを選択します。policy/v1beta1
APIの動作に変更はありません。(#99290, @mortent) [SIG API Machinery, Apps, Auth, Autoscaling, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Scheduling and Testing] -
Topology Aware Hintsがalphaで公開され、TopologyAwareHints feature gateで有効にできます。(#99522, @robscott) [SIG API Machinery, Apps, Auth, Instrumentation, Network and Testing]
Feature
-
client-goのmetricに
rest_client_exec_plugin_call_total
が追加され、client-goのcredential pluginのコール数の合計をトラッキングできるようになりました。 (#98892, @ankeesler) [SIG API Machinery, Auth, Cluster Lifecycle and Instrumentation] -
HSTSヘッダを適切にセットするために、kube-apiserverに
--strict-transport-security-directives
を渡す機能を追加します。このフィールドを設定する前にブラウザへの影響を理解してください。(#96502, @249043822) [SIG Auth]
HTTPSで提供されているkube-apiserverの応答に、HSTSヘッダがセットされていないというエラーが一部のセキュリティスキャナで報告されてようであり、それを回避するための設定とのこと。詳しくないですが、Webブラウザと通信しないような場合でも設定する効果はあるのでしょうか。
-
KubernetesがGolang 1.16でビルドされるようになりました。(#98572, @justaugustus) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Node, Release and Testing]
-
RunAsGroup featureがこのリリースでGAに昇格しました。 (#94641, f@krmayankk) [SIG Auth and Node]
-
ServiceAccountIssuerDiscovery featureがGAに昇格し、無条件で有効になりました。ServiceAccountIssuerDiscovery feature-gateは 1.22で削除されます。(#98553, @mtaufen) [SIG API Machinery, Auth and Testing]
終了したJobやPod,CustomResourceのTTLを設定することでクリーンアップを簡単にできるメカニズム。
KEP: https://github.com/kubernetes/enhancements/tree/master/keps/sig-apps/592-ttl-after-finish
Documentation
- N/A
Failing Test
- N/A
Bug or Regression
-
Client-go exec credential pluginsは、stdin上でinteractive terminalが検出された場合にのみstdinを渡すようになりました。これにより、以前はstdinがinteractive terminalであるかどうかをチェックしていたバグが修正されました。 (#99654, @ankeesler)
-
CSIMigrationがonになっている場合にAzure file migration e2e testの失敗を修正しました。(#97877, @andyzhangx)[SIG Auth, Cloud Provider and Storage]
-
alwaysPullImages admission controllerで新しいイメージがないupdate podを無視します。(#96668, @pacoxu) [SIG Apps, Auth and Node]
-
kubeletのログに含まれる
Failed to list *v1.Secret
またはFailed to list *v1.ConfigMap
という偽のメッセージを修正しました。(#99538, @liggitt) [SIG Auth and Node] -
kubectlでexec authプラグインを使用していて、同じexec authコンフィグから多数のclient instancesをbuildすることに対する警告が出なくなりました。 (#97857, @liggitt) [SIG API Machinery and Auth]
Other (Cleanup or Flake)
-
k8s.io/kubernetes/pkg/kubelet/apis
にあったkubeletのannotationとlabelのAPIがk8s.io/kubelet/pkg/apis/
の下に移動しました。(#98931, @michaelbeaumont) -
Kube-apiserver: OIDC authenticatorが、tokenの検証に必要なメタデータの取得を試みる際に、10秒間待つことがなくなりました。(#97693, @enj) [SIG API Machinery and Auth]
-
v1.17からGAであるCSINodeInfo feature gateが無条件に有効になり、
--feature-gates
引数で指定できなくなりました。(#96561, @ialidzhikov) [SIG Apps, Auth, Scheduling, Storage and Testing] -
デフォルトのdelegating authorization optionsで、healthz, readyz, livezへ未認証でアクセスが可能になりました。authz delegtorに接続する system:masters ユーザはauthzのチェックを行いません。(#98325, @deads2k) [SIG API Machinery, Auth, Cloud Provider and Scheduling]
Uncategorized
- N/A