はじめに
このページではKubernetes v1.25におけるSIG-Authに関連する取り組みについて、ChangelogのChanges By Kindの内容から紹介しています。ここに記載されていないものは別のまとめで記載されていると思いますので、 Kubernetes 1.25: 変更点まとめの記事も合わせて参照してみてください。
今回はPod SecurityのGAやv1.24の記事で紹介したKMS v2が早くもalpha機能として追加されたことが注目ポイントです。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
Changes By Kind
Deprecation
- DeprecatedになっていたAPIサーバの
--service-account-api-audiences
フラグが削除されました。--api-audiences
を代わりに使ってください。 (#108624)
KubernetesのSA Token認証ではこのフラグで指定された値がTokenのaud
claimに少なくとも1つ含まれていることを検証します。
デフォルトは--service-account-issuer
のURLを含んだ単一のリストです。明示的に指定している場合はflagを移行する必要があります。
-
v1.19から非推奨となったalphaのseccompアノテーション
seccomp.security.alpha.kubernetes.io/pod
とcontainer.seccomp.security.alpha.kubernetes.io
のサポートの一部が削除されました。Kubeletはアノテーションをサポートしなくなり、Static Podでのアノテーションの使用はサポートされなくなました。また、seccompフィールドを持つPodが作成された際にseccompアノテーションが自動入力されなくなりました。アノテーションからのseccompフィールドの自動入力は、1.27 で削除される予定です。Podは、対応するPodまたはコンテナーのsecurityContext.seccompProfile
フィールドを代わりに使用する必要があります。(#109819) -
gcpとazure auth pluginはclient-goとkubectlから削除されました。https://github.com/Azure/kubelogin と https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke を確認してください。(#110013)
-
1.21から非推奨となっていたbetaのPodSecurityPolicy admission pluginが削除されました。https://kubernetes.io/docs/tasks/configure-pod-container/migrate-from-psp/ の指示に従い組み込みのPodSecurity admission plugin(または別のサードパーティのwebhook)に移行してからv1.25にアップグレードしてください。(#109798)
API Change
- KMS v2alpha1のサポートが追加されました (#111126)
KEP: https://github.com/kubernetes/enhancements/tree/master/keps/sig-auth/3299-kms-v2-improvements
KEPでは複数の問題に対する改善が提案されています。
- Performance
- Key Hierarchyの修正。v2ではDEKはPluginが持つLocal KEKで暗号され、Local KEKはKMSのRemote KEKで暗号化されます。
- これによりAPI Server再起動後などキャッシュが無い状態において大量のリクエストが発行される問題が改善されます
- Rotation
- 下記のStatus APIから最新のKEKのKey IDを返却することでAPI Serverがローテーションに気づけるようになります
- v1.20からalphaになっている
StorageVersion API
の機能を使う感じ?- 実装については次バージョンのv1.26が予定されています。
- Rotation部分の詳細は→のPRを参照してください https://github.com/kubernetes/enhancements/pull/3486
- HealthCheck, Stauts
- 新しく追加されたStatus APIではLatest Key IDの検知の他にHealth状態も応答します。
- Observebility
- 暗号化・複合化のリクエストにUIDフィールドが追加されました
-
v1.25で、PodSecurity restricted levelは、Podに
.spec.os.name="windows"
を設定するPodにLinux固有のsecurityContextフィールドをセットする必要がなくなりました。1.25+のクラスタにv1.23以前のout-of-skewのノードが存在し、かつLinux固有のsecurityContextフィールドを引き続き必須としたい場合、Namespaceにラベル(e.g.pod-security.kubernetes.io/enforce-version: v1.24
)を付与してv1.25以前の restricted バージョンが選択されるように設定してください。(#105919) -
PersistentVolumeの
spec.claimRef
の所有権のセマンティクスをatomicからgranularに変更しました。(#110495) -
複数のClusterCIDRをサポートするNodeIPAMの導入(#2593)をalpha featureとして導入しました。 (#109090)
- feature gate
MultiCIDRRangeAllocator=true
を設定するとMultiCIDRRangeAllocatorコントローラを使用できるかどうかが決まり、下記のkube-controller-managerフラグはアクティブなコントローラを選択します。 - kube-controller-managerで
--cidr-allocator-type=MultiCIDRRangeAllocator
フラグを設定してMultiCIDRRangeAllocatorを有効化します。
- feature gate
-
設定されたpod failure policy rulesに従ってpod障害を処理するためのサポートを導入しました。(#111113)
-
DisruptionTarget
pod condition typeが導入されます.reason
フィールドはpod停止の理由を示します: (#110959)- PreemptionByKubeScheduler: kube-schedulerによるPodのpreempt
- DeletionByTaintManager: NoExecute taintに起因するtaint managerによるPodの削除
- EvictionByEvictionAPI: Eviction APIによるPodのevict
- DeletionByPodGC: PodGCによる取り残されたPodの削除
-
PodSecurity admission pluginはGAになりデフォルト有効になりました。admission設定のバージョンが
security.admission.config.k8s.io/v1
に昇格しました。(#110459) -
metadata.clusterName
フィールドは完全に削除されました。これはユーザに対して目に見える影響はないはずです。(#109602)
Feature
-
KMS v2alpha1 APIが追加されました。(#110201)
-
Feature gate
CSIMigration
GAになりenabledに固定されました。feature gateはv1.27で削除されます。(#110410) -
ServerSideFieldValidation
はbetaになりました。スキーマのバリデーションはサーバーサイドで行われ、デフォルトでは無効なフィールドや未知のフィールドがあると警告を受け取ります。(#110178) -
PodSecurityContext
とPodSecurityPolicy
はsysctlのセパレータとしてスラッシュをサポートします。(#106834) -
gcpとazure auth pluginはサポート範囲のkubectlのマイナーバージョンで https://issue.k8s.io/111911 が解決するまでclient-goとkubectlに対してリストアされました。(#111918)
#110013 で削除されたけどこのPRで元に戻された
Documentation
- N/A
Failing Test
- N/A
Bug or Regression
-
GCEの最新のファイアウォール機能であるpinhole firewallを追加し、ingress firewall-rulesにdestination-rangesを導入しました。ILBまたはNetLB経由のトラフィックのみを許可しバックエンドのIPへのアクセスを制限します。この変更は、既存のILBまたはNetLBの挙動を変更するものではありません。 (#109510)
-
AuthenticatedGroupAdderとキャッシュされたtoken authenticatorの間の認証時のdata競合の問題を修正(#109969)
-
--audit-log-path
で指定されたファイルの親ディレクトリが存在しない場合、Kuberentesはそのディレクトリを作成します。(#110813) -
APIのバリデーションでkey enciphermentのusageをオプショナルにしました。(#111061)
CSR APIでKey Enciphermentが必須なパラメータとして扱われていましたがkubeletが利用する鍵の種類によって(RSAor非RSA)で必須パラメータが区別されるようになります。v1.25ではこの区別はオプショナル扱いであり非RSA鍵の利用でEnciphermentを含んでいてもエラーになりませんが、v1.26からはエラーとして扱われるようです。
参考: https://github.com/golang/go/issues/36499
-
Namespaceのeditorとadminが
leases.coordination.k8s.io
を作成できるようになりました。leaderelectionでは、configmapの代わりにleasesを利用してください。(#111472) -
https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv4.5.7 で説明されているように、kubectl kustomize の機能をアップグレードしました。(#111606)
Other (Cleanup or Flake)
- kube-controller-managersの非推奨であった
--experimental-cluster-signing-duration
フラグが削除されました。v1.19から利用可能になった--cluster-signing-duration
フラグを使用するように適合させました。(#108476)