Kubernetes v1.20: SIG-Authの 変更内容

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

## Changes by Kind

**Deprecation**
N/A

**API Changes**

- `TokenRequest`と`TokenRequestProjection`機能がGAに昇格しました。この機能はSecretオブジェクトでは見えず、Podの生存期間に紐付くServiceAccount Tokenを生成できます。ます。設定や使い方の詳細は [https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection) を参照してください。`TokenRequest`と`TokenRequestProjection`のFeatureGateはv1.21で削除されます。

    - kubeadmのkube-apiserver Podマニフェストにデフォルトで`--service-account-key-file`、`--service-account-signing-key-file`, `--service-account-issuer`が含まれるようになりました。
    - ([#93258](https://github.com/kubernetes/kubernetes/pull/93258), [@zshihang](https://github.com/zshihang)) [SIG API Machinery, Auth, Cluster Lifecycle, Storage and Testing]


    > 📝 TokenRequest APIを使った Podに紐付くServiceAccount トークンを生成する機能がGAになりました。
    > `TokenRequest`を有効にするには`--service-account-key-file`,`--service=account-signing-key-file`, `--service-account-issuer`を設定する必要があります。
    > `TokenRequestProjection`は、そのPodに紐付くServiceAccount トークンをTokenRequest APIを使って発行し、Projected VolumeによってPodに与える機能になります。Service Account トークンには有効期限やTokenのaudienceなどをclaimとして持たせることが可能です。


- Feature Gate `BoundServiceAccountTokenVolume` が有効な場合、クラスタ管理者は`serviceaccount_stale_tokens_total`メトリックを使って、拡張トークンに依存しているワークロードを監視することができます。そのようなワークロードがない場合は、kube-apiserver を `--service-account-extend-token-expiration=false` フラグで起動して拡張トークンをオフにします。([#96273](https://github.com/kubernetes/kubernetes/pull/96273), [@zshihang](https://github.com/zshihang)) [SIG API Machinery and Auth]


    > 📝 `BoundServiceAccountTokenVolume`を有効にした場合に `--service-account-extend-token-expiration`フラグがデフォルトで`true`に設定されるようになりました。
    > `--service-account-extend-token-expiration` フラグは、移行期間などにおいてトークンの有効期限を一時的に延長するためのフラグです。`service-account-max-token-expiration`の値を無視して1年間の期間が設定されるようです。
    > `BoundServiceAccountTokenVolume` を有効することで有効期限を持ったトークンが配布されるようになりますが、トークンをローテーションしていないワークロードやレガシートークンを使っているワークロードが存在しているかどうかを監視できるメトリクスが提供されているようです。
    > 参考: https://qiita.com/hiyosi/items/35c22507b2a85892c707


- kube-apiserverは期限切れのkube-apiserver Leaseオブジェクトを削除するようになりました。
    - この機能は`APIServerIdentity` Feature Gateに属しています。
    - `identity-lease-garbage-collection-check-period-seconds`フラグはkube-apiserverに追加されました。
    - ([#95895](https://github.com/kubernetes/kubernetes/pull/95895), [@roycaihw](https://github.com/roycaihw)) [SIG API Machinery, Apps, Auth and Testing]


    > 📝  https://kubernetes.io/docs/tasks/administer-cluster/highly-available-master/#api-server-identity

​​

- kube-controller-manager: volume pluginは`--volume-host-allow-local-loopback=false` を設定してlocalとloopbackアドレスからのアクセスを制限、または `--volume-host-cidr-denylist` を設定することで特定の CIDR レンジからのアクセスを制限することができます。(例, `--volume-host-cidr-denylist=127.0.0.1/28,feed::/16`) ([#91785](https://github.com/kubernetes/kubernetes/pull/91785), [@mattcary](https://github.com/mattcary)) [SIG API Machinery, Apps, Auth, CLI, Network, Node, Storage and Testing]


- RFC 1123に従っていないことを示すために、DNS-1123 エラーメッセージを修正しました([#94182](https://github.com/kubernetes/kubernetes/pull/94182), [@mattfenwick](https://github.com/mattfenwick)) [SIG API Machinery, Apps, Auth, Network and Node]


- RuntimeClassの機能がGAに昇格しました。node.k8s.io API groupsがv1beta1からv1に昇格しました。([#95718](https://github.com/kubernetes/kubernetes/pull/95718), [@SergeyKanzhelev](https://github.com/SergeyKanzhelev)) [SIG Apps, Auth, Node, Scheduling and Testing]


- Server Side ApplyがLabelSelectorフィールドをアトミックとして扱うようになります。セレクタ全体が単一のライターによって管理され、一緒に更新されることを意味します。これらのフィールドには、直感的な方法でマージできない相互に関連した分離できないフィールドが含まれているためです。([#93901](https://github.com/kubernetes/kubernetes/pull/93901), [@jpbetz](https://github.com/jpbetz)) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Storage and Testing]


- Feature Gate `ServiceAccountIssuerDiscovery` はベータになり、デフォルトで有効になりました ([#91921](https://github.com/kubernetes/kubernetes/pull/91921), [@mtaufen](https://github.com/mtaufen)) [SIG Auth]


    > 📝  参考:  https://qiita.com/hiyosi/items/43ddb0ff9b83070d95a8


- `CSIDriverSpec`に2つのフィールドを追加するFeature Gate `CSIServiceAccountToken` を導入します。([#93130](https://github.com/kubernetes/kubernetes/pull/93130), [@zshihang](https://github.com/zshihang)) [SIG API Machinery, Apps, Auth, CLI, Network, Node, Storage and Testing]


    > 📝 TokenRequest APIを使ったPodに紐付くトークンをVolumeContextとしてCSI driverに渡す機能のようです。


- Feature Gateを設定することで、cronjob controller v2を利用できます。将来のリリースでデフォルトのコントローラになります。([#93370](https://github.com/kubernetes/kubernetes/pull/93370), [@alaypatel07](https://github.com/alaypatel07)) [SIG API Machinery, Apps, Auth and Testing]

**Feature**

- writeリクエストを処理する前にAPIサーバにstorageversionを更新させるFeature Gate `StorageVersionAPI`が追加されます。この機能はstorage migratorがbuilt-inのリソースに対するストレージマイグレーションを管理できます。internal.apiserver.k8s.io/v1alpha1 APIとFeature Gate `APIServerIdentity`の有効化が必要です。([#93873](https://github.com/kubernetes/kubernetes/pull/93873), [@roycaihw](https://github.com/roycaihw)) [SIG API Machinery, Auth and Testing]


- Node Authorizerの負荷を見積もることができる `node_authorizer_actions_duration_seconds` メトリックが追加されました。([#92466](https://github.com/kubernetes/kubernetes/pull/92466), [@mborsz](https://github.com/mborsz)) [SIG API Machinery, Auth and Instrumentation]


- verb、resource、およびsubresourceのラベルを持つ、APIサーバーのself-requestをカウントするためのカウンタメトリック`apiserver_request_self`を追加しました。([#94288](https://github.com/kubernetes/kubernetes/pull/94288), [@LogicalShark](https://github.com/LogicalShark)) [SIG API Machinery, Auth, Instrumentation and Scheduling]


- client-go credential pluginは、現在のクラスタ情報を `KUBERNETES_EXEC_INFO` 環境変数を介して渡すことができるようになりました。([#95489](https://github.com/kubernetes/kubernetes/pull/95489), [@ankeesler](https://github.com/ankeesler)) [SIG API Machinery and Auth]


- kube-apiserver: `--audit-log-compress` でローテートしたauditログファイルを圧縮できるようしました。([#94066](https://github.com/kubernetes/kubernetes/pull/94066), [@lojies](https://github.com/lojies)) [SIG API Machinery and Auth]


- The beta `RootCAConfigMap` feature gate is enabled by default and causes kube-controller-manager to publish a "kube-root-ca.crt" ConfigMap to every namespace. This ConfigMap contains a CA bundle used for verifying connections to the kube-apiserver. ([#96197](https://github.com/kubernetes/kubernetes/pull/96197), [@zshihang](https://github.com/zshihang)) [SIG API Machinery, Apps, Auth and Testing]


- Feature Gate `RootCAConfigMap`がベータになりデフォルトで有効になり、kube-controller-manager は `kube-root-ca.crt` ConfigMap をすべてのネームスペースに公開します。この ConfigMap には、kube-apiserver への接続を検証するための CA バンドルが含まれています。


    > 📝  K8s APIサーバのサーバ証明書を検証するためのCA証明書バンドルがConfigMapとしてすべてのNamespaceに公開されるようになりました。
    > 以下のようにしてPodにマウントすることができます。`BoundServiceAccountVolume`では自動的にマウントされるようです。

```yaml
  volumes:
  - name: kube-api-access-jz2lz
    projected:
​​      defaultMode: 420
      sources:
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
```
**Documentation**

- N/A

**Failing Test**

- N/A

**Bug or Regression**

- `runtime/default`のseccomp profileを許可しないPodSecurityPolicyが存在する場合に、`docker/default`のseccomp annotationを持つPodが1.19で作成されないというリグレッションを修正しました。([#95985](https://github.com/kubernetes/kubernetes/pull/95985), [@saschagrunert](https://github.com/saschagrunert)) [SIG Auth]

**Other (Cleanup or Flake)**

- /metrics、/livez/、/readyz/、および/healthz/ エンドポイントのブートストラップ ClusterRole、ClusterRoleBindingおよびグループを追加します。([#93311](https://github.com/kubernetes/kubernetes/pull/93311), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, Auth, Cloud Provider and Instrumentation]