はじめに
このページではKubernetes v1.24におけるSIG-Authに関連する取り組みについて、ChangelogのChanges By Kindの内容から紹介しています。ここに記載されていないものは別のまとめで記載されていると思いますので、 Kubernetes 1.24: 変更点まとめ も合わせて参照してみてください。
v1.24からはLegacyServiceAccountTokenNoAutoGeneration
がデフォルトで有効になり、SecretベースのService Account Tokenが作成されなくなります。
詳細はアップグレード時の注意事項を参照してください。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
Changes by Kind
Deprecation
-
client.authentication.k8s.io/v1alpha1
ExecCredential は削除されました。v1alpha1 APIに依存するclient-go credential pluginを使用している場合、v1 APIへの移行方法についてはプラグインの配布元に問い合わせてください。(#108616, @margocrawf)v1.22でGAに昇格し
client.authentication.k8s.io/v1
が提供されています。
KEP: https://github.com/kubernetes/enhancements/tree/master/keps/sig-auth/541-external-credential-providers -
in-treeのAzure Pluginはdeprecatedになりました。Azure kubelogin pluginがkubectl/client-goのcredential pluginの機能を使ったout-of-treeの代替として提供されます。このdeprecationに関する警告をログに表示します。(#107904, @sabbey37)
↑と同じKEPの流れ
-
metadata.clusterName fieldはdeprecatedになりました。このfieldは常に書き込み不可で空白で紛らわしい存在であったため、次のリリースで削除します。慎重を期して、削除前にこのリリースでは不意に利用しているclientを発見するためにgo構造体の名前を変更しています。(#108717, @lavalamp)
API Change
-
CSIStorageCapacity.storage.k8s.io: このAPIはv1になりv1beta1バージョンはdeprecatedになり、v1.27で削除されます。CSI driverがstorage capacity trackingをサポートしている場合、v1 API をサポートする external-provisioner とデプロイされる必要があります。([#108445[(https://github.com/kubernetes/kubernetes/pull/108445), @pohly)
-
v1beta1のPodDisruptionBudgetがselector fieldに対するstrategic merge patch type APIリクエスト処理の不具合を修正。1.21以前は、これらのリクエストはmatchLabelsコンテンツをマージ、matchExpressionsコンテンツをリプレースしていた。1.21では、selectorフィールドに関するpatchリクエストはselector全体を置き換えル用になりました。これは、server side applyとv1のPodDisruptionBudgetの動作と一致していますが、v1beta1では変更されるべきではありませんでした。(#108138, @liggitt)
-
kubectlのhelpコマンドの可読性を改善しました。(#104736, @lauchokyip)
-
ClusterCIDRConfigにv1alpha1 networking APIを導入しました。 (#108290, @sarveshr7)
-
新しい
sync_proxy_rules_no_local_endpoints_total
proxy metricを導入しました。このmetricはinternal endpointを持たないserviceの数を表します。traffic_policy
labelにはinternalまたはexternalが含まれます。(#108930, @MaxRenaud) -
kube-apiserver:
--audit-log-version
と--audit-webhook-version
はデフォルト値のaudit.k8s.io/v1
のみをサポートします。1.13からdeprecatedになっていたv1alpha1とv1beta1 audit log versionは削除されました。(#108092, @carlory) -
kube-apiserver:
metadata.selflink
fieldはkube-apiserverによって追加されなくなります。1.16でdeprecatedになり1.20以降はデフォルトで追加されていません。 (#107527, @wojtek-t) -
https://git.k8s.io/kubernetes/api/openapi-spec でキャプチャされている静的なopenapiファイルからenum宣言を取り除きました。このファイルはAPI clientを生成するために使われており、生成されたclientでenumを使用するとそれらのfieldに将来追加される値との前方互換性が壊れる可能性があります。詳細は https://issue.k8s.io/109177。([#109178](https://github.com/kubernetes/kubernetes/pull/109178), @liggitt)
-
ClusterCIDRConfigのv1alpha1 networking APIが削除されました。(#109436, @JamesLaverack)
-
evictions_number
metricsはevictions_total
にリネームし安定版となりました。元のevictions_number
のメトリクス名は1.23でdeprecatedとなり、削除されます。(#106366, @cyclinder) -
CertificateSigningRequestの
spec.expirationSeconds
API fieldがGAになりました。CSRDuration
future gateは無条件で有効となり1.26で削除されます。 (#108782, @cfryanr) -
kubeletから
DynamicKubeletConfig
featureが削除されました。(#106932, @SergeyKanzhelev)v1.22でdeprecated & default disableになっていました
-
contextual loggingのインフラが完備されました (feature gateの実装、JSONバックエンドの用意) (#108995, @pohly)
Feature
-
x-kubernetes-valiation ルールのCELの正規表現パターンは定数文字列として与えられている場合にCRDのcreate/update時にコンパイルされます。正規表現のコンパイルエラーはCRDのvalidation errorとしてレポートされます。(#108617, @jpbetz)
-
テキスト形式で、これまで複数行の出力を防ぐために引用符を使っていたログメッセージ(例えば、text="some "quotation", anline break")が、エスケープシーケンスなしでより読みやすい複数行で出力されるようになりました。(#107103, @pohly)
-
HPAが
external.metrics.k8s.io
APIグループを消費することを許可するポリシーを導入します。(#104244, @dgrisonnet) -
kube-apiserver: statusやscaleのようなsubresourceが表形式の出力をサポートするようになりました。(#103516, @ykakarap)
-
kube-apiserver: リストをマージするとき、Server Side Apply は既存の永続化されたオブジェクトではなく、送信されたリクエストの順序を優先するようになりました。(f#107565, @jiahuif)
-
Kubernetesはgo1.18rc1でビルドされるようになりました。 (#107105, @justaugustus)
-
golang.org/x/net
がv0.0.0-20211209124913-491a49abca63
に更新されました。(#106949, @cpanato) -
kubectl create token
でservice account tokenをリクエストできるようになり、service account tokenを要求する権限がeditとadminのRBACロールに追加されました。(#107880, @liggitt)
Bug or Regression
-
gRPC modeでegress selectorを使った際のkube-apiserverのgoroutineのリークを修正するために
sigs.k8s.io/apiserver-network-proxy/konnectivity-client@v0.0.30
に更新。(#108437, @andrewsykim) -
exec pluginの認証情報がkubeconfigに設定された証明書情報を上書きしてしまう不具合を修正しました。(#107410, @margocrawf)
-
basic-authとsshのsecretのvalidationエラーメッセージの不具合を修正しました。(#106179, @vivek-koppuru)
-
kube-apiserver: Server Side Apply mergeの順序は http://issue.k8s.io/104641 が解決されるまで v1.22 の動作と一致するように戻されます。(#106660, @liggitt)
-
冗長度の高いdebugメッセージであるにもかかわらず、JSON出力で "v":0と記録されていたログメッセージを修正しました。 (#106978, @pohly)
-
NodeRestriction admission: RecoverVolumeExpansionFailure featureが有効な場合に、nodeが PersistentVolumeClaim のstatusフィールド resizeStatus と allocatedResources を更新することができるようになりました。(#107686, @gnufied)
-
--service-account-extend-token-expiration
が true で、かつ要求されたtoken audienceが空か--api-audiences
のすべての値と正確に一致するときのみ、token lifetimeを延長します。--service-account-extend-token-expiration
はBound Service Account Tokenへのマイグレーションにあたり、一時的に長期間のBound Service Account Tokenが発行されるようにするフラグです。
これが有効な状態において、別途ProjectedVolumeを使ってPodに渡したSA Tokenの有効期限がspecで指定したexpirationSecondsの値ではなく1yが設定されてしまう問題があったようです
audienceをチェックしてkube-apiserver向けに限定されたtokenの有効期限のみを1yに上書きするように修正されたようですが、ユーザが明示的に指定した場合はそのままその値を使ったほうがわかりやすい気がしましたが難しいのかな。 -
AppArmor profileがローカルノードにロードされている場合の検証を削除しました。これは、コンテナランタイムによって処理されるべきです。(#97966, @saschagrunert)
Other (Cleanup or Flake)
-
k8s.io/apimachinery/util/clock
typeはdeprecatedになりました。k8s.io/utils/clock
を代わりに使ってください。(#106850, @MadhavJivrajani) -
[k8s.io/utils/clock]: IntervalClockはSimpleIntervalClockによりdeprecatedになりました。(#108059, @RaghavRoy145)
所感
v1.24では特に目新しい機能の追加などは無さそうでしたが、いくつか新しいKEPが作られており、特にKMS v2については鍵のローテーションの課題(手動オペレーションが必要)についても解消を目指しているようで詳しく読んでみたいと思いました。
その他、次のv1.25ではPodSecurityがGAになる予定です。