はじめに
このページではKubernetes v1.19におけるSIG-Authに関連する取り組みをまとめています。
ここに記載されていないものは別のまとめで記載されていると思いますので、 Kubernetes 1.19: 変更点まとめ(後日公開) も合わせて参照してみてください。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
k8s 1.19 変更点調査
Changes by Kind
Deprecation
-
authentication.k8s.io/v1beta1
とauthorization.k8s.io/v1beta1
が1.19でdeprecatedになりv1
をラベルを優先します。非推奨のラベルは1.22で削除されます。 (#90458, @deads2k) [SIG API Machinery and Auth]
API Change
-
CertificateSigningRequest API conditions フィールドが更新されました。(#90191, @liggitt) [SIG API Machinery, Apps, Auth, CLI and Node]
-
status
フィールドが追加されました。このフィールドはデフォルトTrue
で、Approved
、Denied
およびFailed
の条件に対してのみTrue
をセットできます。 -
lastTransitionTime
フィールドが追加されました。 - signersが恒久的な失敗を示すことができるようにcondition type として
Failed
が追加されました。このconditionはcertificationsigningrequests/status
サブリソースを介して追加できます。 -
Approved
とDenied
は相互排他になりました。- 📝 あるリソースの複数のconditionsレコードでtypeとしてApprovedとDeniedの両方利用されている場合にはvalidationエラーになるようです。
- CSRから
Approved
、Denied
、およびFailed
のconditionを削除することはできなくなりました。
📝
APIVersion v1 に向けて、v1beta1として必要な機能の追加のようです。
KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/20190607-certificates-api.md -
-
kube-controller-managerによって管理されるsignersは異なる証明書と秘密鍵を持つことができるようになりました。
--cluster-signing-[signer-name]-{cert,key}-file
に関するヘルプを参照してください。--cluster-signing-{cert,key}-file
はデフォルトのままです。(#90822, @deads2k) [SIG API Machinery, Apps and Auth]📝
--cluster-signing-{cert,key}-file を指定して共通のものを使うか、--cluster-singing-[singer-name]-{cert,key}-file を指定して、それぞれ異なるものを使うか選べるようになったようです。
singersについては https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers -
SeccompのサポートがGAになりました。新しく
seccompProfile
フィールドがpodとcontainerのsecurityContextオブジェクトに追加されました。seccomp.security.alpha.kubernetes.io/pod
とcontainer.seccomp.security.alpha.kubernetes.io/…
アノテーションは非推奨になり、v.122で削除されます。(#91381, @pjbgf) [SIG Apps, Auth, Node, Release, Scheduling and Testing] -
非推奨になったアノテーションを新しいAPIフィールドに同期させるために、seccomp profileのpod version skew strategyを追加しました。(#91408, @saschagrunert) [SIG Apps, Auth, CLI and Node]
📝
新しいAPIフィールドとアノテーションに同じ値が設定されるようにコピーしたりする仕組みのようです。
KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/20190717-seccomp-ga.md#version-skew-strategy -
alpha版であった
DynamicAuditing
のfeature gateとauditregistration.k8s.io/v1alpha1
APIは削除され、サポートされなくなりました。(#91502, @deads2k) [SIG API Machinery, Auth and Testing]📝
既存のaudit webhookを使って同じユースケースに対応することができると考えていて、コアの以外の部分で対応するようなことを推奨するようです。
参考 KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/0014-dynamic-audit-configuration.md -
カスタムEndpointsはEndpointSliceMirroring controllerによってEndpointSlicesにミラーされるようになりました。 (#91637, @robscott) [SIG API Machinery, Apps, Auth, Cloud Provider, Instrumentation, Network and Testing]
📝
EndpointからEndpointSliceの変更するKEPの一環として、アプリケーションが場合によってカスタムEndpointを作成しているような場合、EndpointとEndpointSliceの両方をケアする必要がないようにミラーリングするcontrollerが用意されたようです
-
CertificateSigningRequest APIがcertificates.k8s.io/v1に昇格し、以下の変更が入りました。 (#91685, @liggitt) [SIG API Machinery, Architecture, Auth, CLI and Testing]
-
spec.signerName
が必須になり、certificates.k8s.io/v1
API経由でのkubernetes.io/legacy-unknown
へのリクエストは許可されなくなりました。 -
spec.usages
が必須になりました。重複した値は含まず、定義されたusagesの値のみを含まなければいけません。 -
status.conditions
は重複したtypeを含むことはできません -
status.conditions[*].status
が必須になりました。 -
status.certificate
はPEM-encodedでなければならず、CERTIFICATE blockのみを含みます。
📝
usage: https://github.com/kubernetes/kubernetes/blob/v1.19.0/pkg/apis/certificates/validation/validation.go#L148-L172
https://github.com/kubernetes/kubernetes/blob/v1.19.0/pkg/apis/certificates/types.go#L158-L184 -
-
Scheduler: オプショナルでunbound volumesを持つpodをスケジューリングする前に利用可能なストレージの容量をチェックします。(新しいalphaの
CSIStorageCapacity
feature gateの機能で、CSI driverのみで動作しCSI driver deploymentのサポートに依存します) (#92387, @pohly) [SIG API Machinery, Apps, Auth, Scheduling, Storage and Testing] -
Go 1.14.4がKubernetesをビルドするために必要な最低バージョンになりました。(#92438, @liggitt) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Storage and Testing]
-
新しいalphaの機能のGeneric ephemeral volumesは、
GenericEphemeralVolume
feature gate で提供されるEmptyDir
の代わりになるより柔軟な機能です。EmptyDir
と同様に、VolumeはKubernetesによってpod毎に自動的に作成・削除されます。しかし、通常のプロビジョニングプロセス(PersistentVolumeClaim
)が使われるため、ストレージはサードパーティのストレージベンダーから提供することができ、通常のVolume機能も機能します。Volumeは空にする必要はなく、例えばスナップショットからのリストアもサポートされています。(#92784, @pohly) [SIG API Machinery, Apps, Auth, CLI, Instrumentation, Node, Scheduling, Storage and Testing]📝
SIG-Storageのまとめのほうでで詳しく紹介されると思います
-
Kubernetes は golang 1.15.0-rc.1 でビルドされるようになりました。
- X.509 証明書のSubject Alternative Namesが無い場合にCommonNameをホスト名として扱うという非推奨でレガシーな動作がデフォルトで無効になりました。GODEBUG環境変数でx509ignoreCN=0を追加することで一時的に再有効化することができます。(#93264, @justaugustus) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Scalability, Storage and Testing]
📝
GODEBUG=x509ignoreCN=0はGo 1.16で削除される予定だとして、SANに値をセットしていない環境はGo 1.16(6ヶ月後)までに証明書更新できるのかな…?
Feature
-
kube-apiserver: NodeRestriction admission pluginは、kubeletが新しいNodeを作成する際に
--node-lables
でセットすることができるNodeラベルを1.16以上で容認されているパラメータに制限するようになりました。(#90307, @liggitt) [SIG Auth and Node]📝
これまでは、Update時はエラーになっていてCreate時はログに警告が出るようになっていましたが、Create時もエラーになるようになったようです。
kubeletが自身で設定するラベルを許可されたラベル/プリフィックスに制限する、以下のKEPの最後の作業のようです。
KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md -
クライアント証明書をローテートするように設定されたkubeletは、
certificate_manager_server_ttl_seconds
ゲージメトリックを公開するようになりました。(#91148, @liggitt) [SIG Auth and Node] -
kube-controller-manager:
--experimental-cluster-singing-duration
フラグは非推奨になり、v1.22で削除されます。このフラグは--cluster-singing-duration
に置き換えられました。(#91154, @liggitt) [SIG Auth and Cloud Provider] -
certificatesigningrequests/approval
subresourceは patch リクエストをサポートしました。 (#91558, @liggitt) [SIG Auth and Testing] -
RotateKubeletClientCertificate feature gateはGAに昇格しました。RotateKubeletClientCertificate パラメータは1.20で削除されます。(#91780, @liggitt) [SIG Auth and Node]
Bug or Regression
-
kubectlのAzure認証モジュールがrefresh tokenが失効した後に認証を要求するようになりました。 (#86481, @tdihp) [SIG API Machinery and Auth]
-
PodにバインドされたService Account TokenがPodのdeletion grace periodの間利用できるようになりました。(#89583, @liggitt) [SIG Auth]
📝
変更前はDeletionTimestampがセットされている場合にToken(JWT)の検証をエラーにしていたものを、DeletionTimestampがGrace Periodを経過してる場合にエラーとするようになったようです。これによってPodはgrace period中もAPIリクエストを行うことができるようになりました。
-
Nameに
.
が含まれるService Accountのクレデンシャルのマウントの問題を修正。(#89696, @nabokihms) [SIG Auth]📝
SAのNameに’.’が含まれている場合、PodがSAトークンのマウントに失敗する問題があったようです。
-
kubectl azure authentication: 1.18.0 でkubeconfig ファイルの apiserver-id 設定に "spn:" prefixが予期せず追加されていた問題を修正。(#89706, @weinong) [SIG API Machinery and Auth]
📝
AzureADを使った認証において、トークンのaudienceを表すresourceパラメータについて、認証APIのバージョンによって”spn:” prefixが付いている場合と付いていない場合があり、挙動の違いを吸収するためのフラグが追加されましたが、その際に混入した不具合のようです。
-
OwnerReferencesPermissionEnforcement validation admission pluginが有効がクラスタでEndpointSlice controllerがエラー無しで実行されるように修正。(#89741, @marun) [SIG Auth and Network]
📝
endpointslice-controllerに
service/finalizers
リソースに対するupdate
の権限が追加されたようです -
RBAC roleとbindingオブジェクトのガベージコレクションを防ぐリグレッションを修正 (#90534, @apelisse) [SIG Auth]
📝
(Cluster)RoleやRoleBindingのオブジェクトの更新に伴う権限昇格のチェックの中で、オブジェクトのGCに関連するフィールドの更新についてはチェックがskipされていましたが、ManagedFieldsは対象になっておらずエラーになる場合があったようです。
-
v1 CSR APIを提供するサーバに対して
kubectl certificate approve/deny
を使用している問題を解決します。 (#91691, @liggitt) [SIG Auth and CLI]📝
古いバージョン(1.16-1.18)のkubectlでは、v1beta1のAPIを使うようにする修正のようです。
-
bearer token(kubectl --token=…)とexecプラグインが同じコンテキストで設定されている場合の曖昧な挙動を修正しました。bearer tokenが優先されるようになりました。 (#91745, @anderseknert) [SIG API Machinery, Auth and Testing]
-
Kubeletに証明書のブートストラップ時にsignalを認識させる。(#92786, @answer1991) [SIG API Machinery, Auth and Node]