Kubernetes 1.20: SIG-Network の変更内容

[Kubernetes 1.20](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md) の SIG-Network の変更内容をまとめました。

## What's New (新情報)
### IPv4/IPv6 run
IPv4/IPv6 のデュアルスタックは、Service のデュアルスタックをサポートするため、利用者とコミュニティのフィードバックを元に再実装されました。クラスタでデュアルスタックが有効な場合、IPv4, IPv6 または両方の Service を作成することができます。既存の Service でもこの設定は変更可能です。詳細は更新された [IPv4/IPv6 デュアルスタックのドキュメント](https://docs.k8s.io/concepts/services-networking/dual-stack/) をご覧ください。

### Pod のホスト名を FQDN とする機能がベータに
1.19 でフィーチャーゲート `SetHostnameAsFQDN` で導入された機能がデフォルトで有効になりました。詳しくは、[Service と Pod に対しての DNS のドキュメント](https://docs.k8s.io/concepts/services-networking/dns-pod-service/#pod-sethostnameasfqdn-field)をご覧ください。

:memo: [ドキュメントの Note](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-sethostnameasfqdn-field)によると、FQDN が 64 文字を超える場合は、Linux では Pod の起動に失敗するようなのでご注意ください。


## Urgent Upgrade Notes (アップグレード前の注意点)
- デュアルスタックの Service が alpha で追加されました。これは alpha API への破壊的な変更になります。デュアルスタックの API では Service の単一の `ipFamily` から `ipFamilyPolicy` (`SingleStack`, `PreferDualStack`, `RequireDualStack`)、`ipFamilies` (割り当てるファミリのリスト), `clusterIPs` の 3 フィールドに書くようになりました。デフォルティングによって処理されるため、殆どの利用者は何もする必要はありません。利用者がデュアルスタックを要求しない限り、Service はシングルスタックになります。この機能は `IPv6DualStack` のフィーチャーゲートによって設定できます。 ([#91824](https://github.com/kubernetes/kubernetes/pull/91824), [@khenidak](https://github.com/khenidak)) [SIG API Machinery, Apps, CLI, Network, Node, Scheduling and Testing]


## API Changes (API の変更)
- EndpointSlice API に `serving` と `terminating` という状態が追加されました
    - `serving` は terminating 状態に関わらず、エンドポイントの readiness をトラックします。`ready` は terminating ではないときのみに true になるという点で、`ready` とは区別されます。
    - `terminating` は Endpoint が terminating ときに true になります。Pod に関しては、deletion timestamp が入った状態の endpoint 全てになります。([#92968](https://github.com/kubernetes/kubernetes/pull/92968), [@andrewsykim](https://github.com/andrewsykim)) [SIG Apps and Network]
- downward API で hugepages をサポートするようになりました ([#86102](https://github.com/kubernetes/kubernetes/pull/86102), [@derekwaynecarr](https://github.com/derekwaynecarr)) [SIG API Machinery, Apps, CLI, Network, Node, Scheduling and Testing]
- Endpoint と Service 向けの AppProtocol が GA になりました。`ServiceAppProtocol` フィーチャーゲートは 1.21 で非推奨 (deprecated) になります。([#96327](https://github.com/kubernetes/kubernetes/pull/96327), [@robscott](https://github.com/robscott)) [SIG Apps and Network]
- type LoadBalancer を指定した Service のノードポートの自動的な割当を、`Service.spec.allocateLoadBalancerNodePorts=false` という設定で無効にできるようになりました。デフォルトでは現在の挙動と同じく、type LoadBalancer が指定された Service ではノードポートを割り当てます ([#92744](https://github.com/kubernetes/kubernetes/pull/92744), [@uablrek](https://github.com/uablrek)) [SIG Apps and Network]
- Service の `type` を変更した際に、不要になるフィールドが自動的にクリアされるようになりました。例えば、type=LoadBalancer から type=Cluster に変更した場合は、ノードポートの割当が自動的にクリアされます。([#95196](https://github.com/kubernetes/kubernetes/pull/95196), [@thockin](https://github.com/thockin)) [SIG API Machinery, Apps, Network and Testing]
- EndpointSlice に `EndpointSliceNodeName` フィーチャーゲートで管理される、NodeName という新しいフィールドが追加されました
  - EndpointSlice の topology フィールドは次のリリースで非推奨となります
  - Kubernetes 1.17 から非推奨だった EndpointSlice の "IP" アドレスタイプは正式に削除されました
  - `discovery.k8s.io/v1alpha1` API は非推奨となり 1.21 で削除されます ([#96440](https://github.com/kubernetes/kubernetes/pull/96440), [@robscott](https://github.com/robscott)) [SIG API Machinery, Apps and Network]
- Kube-controller-manager: ボリュームプラグインはループバックやローカルアドレスへの通信を制限できるようになりました。`--volume-host-allow-local-loopback=false` または、特定の範囲を指定した `--volume-host-cidr-denylist` (例 `--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]
    - :memo: [CVE-2020-8555](https://github.com/kubernetes/kubernetes/issues/91542) という脆弱性への対応のようです
- DNS-1123 エラーメッセージで、RFC 1123 には正確には準拠していないと明示するようになりました ([#94182](https://github.com/kubernetes/kubernetes/pull/94182), [@mattfenwick](https://github.com/mattfenwick)) [SIG API Machinery, Apps, Auth, Network and Node]
    - :memo: RFC 1123 ではホスト名が小文字であることを強制していませんが、Kubernetes では小文字であることを強制するため、「lowercase RFC 1123 subdomain」という表記に変えたようです
- リマインダ: ラベル `failure-domain.beta.kubernetes.io/zone` と `failure-domain.beta.kubernetes.io/region` は非推奨になっているため、それぞれ `topology.kubernetes.io/zone` と `topology.kubernetes.io/region` を使用してください。`failure-domain.beta...` のラベルを利用している場合は、同等の `topology...` ラベルに切り替えてください ([#96033](https://github.com/kubernetes/kubernetes/pull/96033), [@thockin](https://github.com/thockin)) [SIG API Machinery, Apps, CLI, Cloud Provider, Network, Node, Scheduling, Storage and Testing]
- Server Side Apply のラベルセレクタは直感的なマージができないため、アトミックに扱われるようになりました。セレクタ全体が一つのライタによって管理され、同時に更新されるようになります ([#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]
- Service は `clusterIPs` フィールドを持つようになりました。`clusterIPs[0]` は `clusterIP` と同じ内容となり、作成・更新の操作で同期するようになります ([#95894](https://github.com/kubernetes/kubernetes/pull/95894), [@thockin](https://github.com/thockin)) [SIG Network]
- フィーチャーゲート `CSIServiceAccountToken` が追加され、`CSIDriverSpec` に 2 つのフィールドが追加されました ([#93130](https://github.com/kubernetes/kubernetes/pull/93130), [@zshihang](https://github.com/zshihang)) [SIG API Machinery, Apps, Auth, CLI, Network, Node, Storage and Testing]


## Features (機能追加)
- kubectl に `create ingress` コマンドが追加されました ([#78153](https://github.com/kubernetes/kubernetes/pull/78153), [@amimof](https://github.com/amimof)) [SIG CLI and Network]
    - :memo: `kubectl create ingress NAME --rule=host/path=service:port` のような形で Ingress が命令的に作れるようになりました
- node-local-cache アドオンに headless service が追加されました ([#88412](https://github.com/kubernetes/kubernetes/pull/88412), [@stafot](https://github.com/stafot)) [SIG Cloud Provider and Network]
    - :memo: prometheus のモニタリング目的のようです
- デュアルスタックのベアメタルクラスタでは、`kubelet --node-ip` を使ってデュアルスタックの IP を渡せるようになりました。例: `kubelet --node-ip 10.1.0.5,fd01::0005`。非ベアメタルのクラスタはまだサポートされていません。ノードがデュアルスタックのアドレスを持つデュアルスタッククラスタでは、hostNetwork の Pod はデュアルスタックの Pod IP を持つようになりました。 ([#95239](https://github.com/kubernetes/kubernetes/pull/95239), [@danwinship](https://github.com/danwinship)) [SIG Network and Node]
    - :memo: 「ベアメタル」は `--cloud-provider` を指定しない場合を指しているようです
- API オブジェクト (Pod, Service, NetworkPolicy) の SCTP サポートが GA となりました。カーネルレベルで SCTP の有効化には影響しない点には留意してください。また、いくつかのクラウドプラットフォーム、ネットワークプラグインでは SCTP トラフィックをサポートしていません ([#95566](https://github.com/kubernetes/kubernetes/pull/95566), [@danwinship](https://github.com/danwinship)) [SIG Apps and Network]