Kubernetes 1.28 の SIG-Network の変更内容をまとめました。1.28 では ServiceNodePortStaticSubrange
というノードポートの動的と静的の割当の優先レンジを分けて、静的ポート指定時の衝突を減らす機能がデフォルトで有効になるなど、安定性向上につながる変更が主になっています。
ServiceNodePortStaticSubrange
については、以下の個別記事にまとめました。
過去の SIG-Network の変更内容
- Kubernetes 1.27: SIG-Network の変更内容
- Kubernetes 1.26: SIG-Network の変更内容
- Kubernetes 1.25: SIG-Network の変更内容
- Kubernetes 1.24: SIG-Network の変更内容
- Kubernetes 1.23: SIG-Network の変更内容
- Kubernetes 1.22: SIG-Network の変更内容
- Kubernetes 1.21: SIG-Network の変更内容
- Kubernetes 1.20: SIG-Network の変更内容
- Kubernetes 1.19: SIG-Network の変更内容
- Kubernetes 1.18: SIG-Network の変更内容
- Kubernetes 1.17: SIG-Network の変更内容
- Kubernetes 1.16: SIG-Network の変更内容
- Kubernetes 1.15: SIG-Network の変更内容
- Kubernetes 1.14: SIG-Network の変更内容
以下は、Kubernetes v1.28 の Changelog を和訳したものです。 の部分は筆者の補足になります。
Kubernetes 1.27 と 1.28 の API 差分
Kubernetes API (/api/
, /apis/
) から取得した情報を使って、Kubernetes 1.27 と 1.28 のデフォルトで有効な API の差分を確認しました。今回の変更は API の追加 1 つだけでした。
- API の追加:
- authentication.k8s.io/v1/selfsubjectreview
-
kubectl auth whoami
がデフォルトで使えるように
-
- authentication.k8s.io/v1/selfsubjectreview
- API の削除: なし
- Deprecation の指定: なし
SelfSubjectReview v1 が追加されデフォルトで有効になったため、アクセスしたユーザの情報を表示する kubectl auth whoami
が使えるようになりました。 (利用には kubectl v1.28.0 以上が必要です)
$ kubectl auth whoami
ATTRIBUTE VALUE
Username kubernetes-admin
Groups [system:masters system:authenticated]
各 Kubernetes の API バージョン対応表も、Kubernetes 1.28 時点での情報に更新しました。
Deprecation (非推奨)
- kube-controller-manager で
--volume-host-cidr-denylist
と--volume-host-allow-local-loopback
のフラグが廃止予定となりました。(#118128, @carlory) [SIG API Machinery, Apps, Network, Node, Storage and Testing]- in-tree のボリュームプラグインの脆弱性対応(CVE-2020-8555) のために入ったフラグですが、現在は未使用のため削除されたようです。
- 取り下げとなった機能
NetworkPolicyStatus
が削除されました。 (#115843, @rikatz)-
これは KEP-2943: Network Policy Status subresource で進められていた、NetworkPolicy に
status
サブリソースを追加する機能でした。しかし alpha のまま取り下げることが決まったようです。 - このフィールドに使われていた protobuf のフィールド番号が将来に渡って欠番になるように Test_NetworkPolicyRemovedFieldProtobufNumberReservation というテストが追加されていました。
-
これは KEP-2943: Network Policy Status subresource で進められていた、NetworkPolicy に
API Change (API の変更)
- loadbalancer status ingress に
IP mode
フィールドが追加されました。(#118895, @RyanAoh) - kube-proxy: 構造化ロギングをサポートするための
--logging-format
フラグが追加されました。(#117800, @cyclinder) -
IPTablesOwnershipCleanup
機能 (KEP-3178) は GA となり、kubelet はKUBE-MARK-DROP
チェイン(ここ数リリースの間使われていないもの)とKUBE-MARK-MASQ
チェイン(現在 kube-proxy のみが作成する)を作成しなくなりました。(#119374, @danwinship)
Feature (機能追加)
- アルファの
CloudDualStackNodeIPs
機能を修正しました。(#118329, @danwinship)-
ノード IP のアノテーションがデュアルスタックのときに
alpha.kubernetes.io/provided-node-ip
アノテーションに 1 つの IP アドレスしか設定されていないという問題の修正です
-
ノード IP のアノテーションがデュアルスタックのときに
- kube-proxy は停止中の EndpointSlice の条件を処理するようになり、ExternalTrafficPolicy=Local の Service でゼロダウンタイムのデプロイメントが可能になりました。author: @andrewsykim (#117718, @aojea) [SIG Network, Testing and Windows]
- 以前からある ProxyTerminatingEndpoints という機能ですが GA となりました
- kube-proxy サービスヘルスはローカルエンドポイントの数を示す HTTP ヘッダ
X-Load-Balancing-Endpoint-Weight
を返すようになりました。同じ情報はレスポンスボディの JSONpayload.LocalEndpoints
でも利用可能です。(#118999, @cezarygerard) -
pkg/controller/endpoint
が contextual ロギングに移行しました。(#116755, @my-git9) - コントローラ関数が contextual ロギングを使用するように移行しました。(#116930, @fatsheep9146) [SIG API Machinery, Apps, Network, Node, Storage and Testing]
- kube-controller-manager の
EndpointSlice
とEndpointSliceMirroring
コントローラが contextual ロギングを使用するように移行しました。(#115295, @Namanl2001) [SIG API Machinery, Apps, Network and Testing] - 新たに
EndpointSlice
reconciler のためのステージングリポジトリが作られました。(#118953, @mskrocki)- kubernetes/endpointslice というリポジトリに分けられ、out-of-tree の EndpointSlice コントローラからロジックを再利用できるようになりました。(KEP-3685: Move EndpointSlice Reconciler into Staging)
-
ServiceNodePortStaticSubrange
フィーチャーゲートがベータに昇格し、デフォルトで有効になります (#117877, @xuzhenglun)- 個別記事にまとめました。基本的に ServiceIPStaticSubrange のノードポート版です。
-
ExpandedDNSConfig
機能が GA となりました。ExpandedDNSConfig
フィーチャーはデフォルト値に固定され、v1.30 で削除されます。もしこのフィーチャーゲートを明示的に設定している場合は今すぐ削除してください。(#116741, @gjkim42) [SIG Apps, Network and Node] - [kube-proxy]: 停止中 (terminating) のノードからの接続のドレイン (connection draining) が実装されました。(#116470, @alexanderConstantinescu)
-
klog
のテキスト出力は、構造体、マップ、スライスに対するエンコーディングに JSON を使うようになりました。(#117687, @pohly) - iptables モードの
kube-proxy
は既存のsync_proxy_rules_duration_seconds
に加えて、sync_full_proxy_rules_duration_seconds
とsync_partial_proxy_rules_duration_seconds
を個別に持つようになります。これにより両方の種類の加重平均だけでなく、各同期ごとの所要時間が提供されるようになります。(#117787, @danwinship)
Bug or Regression (バグまたはリグレッション)
- 問い合わせたエンドポイントのリストの繰り返し処理で、エンドポイントの IP 設定に対する追加検証を追加しました。(#116749, @princepereira)
- WinProxy (Windows) のみの話です。
- Pod のコンテナポートに対する更新・パッチでポートが重複している場合の警告を追加しました。(#113245, @pacoxu)
-
kubectl では
Warning: spec.containers[0].ports[1]: duplicate port definition with spec.containers[0].ports[0]
のような Warning が表示されます
-
kubectl では
- TopologyCache で
AddHints
とSetNodes
が同時に呼ばれたとのデータ競合を修正しました。(#117249, @tnqn) [SIG Apps and Network] - LocalModeNodeCIDR を使った場合の kube-proxy の競合状態を修正しました。kube-proxy の起動中にノードオブジェクトが再作成されたときに Service のトラフィックがドロップすることを避けられるようになりました。 (#118499, @aojea)
-
topology.kubernetes.io/zone
ラベルがノードの作成後に追加された場合に、Topology Aware Hints が動作しない問題を修正しました。(#117245, @tnqn) - http (live-/readiness)-probe でヘッダが小文字だった場合に、意図せずカスタムの Accept ヘッダを上書きしていたバグを修正しました。(#114606, @tuunit)
- タイミングトレースの記録に競合状態がありました。実際の影響はおそらく低かったです。(#117139, @pohly) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node and Storage]
- kube-proxy の
sync_proxy_rules_iptables_total
メトリックは、1.27 以前の挙動に戻りました。これは kube-proxy が責任を持つ iptables のルールの総数を追跡するもので、最後の同期で再同期したルール数だけを数えるのではありません。後者の数字は新たにsync_proxy_rules_iptables_last
メトリックが提供されます。(#119140, @danwinship) [SIG Network] - [KCCM] service controller: クラウドコントローラマネージャを、ノードの同期時に
providerID
を predicate とするように変更しました。この変更によりロードバランサの統合で、ロードバランサとターゲットを設定する際にproviderID
が設定されていることを保証します。(#117388, @alexanderConstantinescu) [SIG Cloud Provider and Network]
Other (Cleanup or Flake) (その他)
- kube-proxy は IP ファミリの設定に矛盾があるとき、起動時に警告を出すようになりました。(例えば IPv4 のノード IP を持っていときに
--cluster-cidr
が IPv6 である場合) (#119003, @danwinship) [SIG Network] - kube-proxy: コンフィグファイルを使わなかったときのログの警告を削除しました。(#118115, @TommyStarK) [SIG Network]
-
kube-controller-manager
内で呼ばれる podgc コントローラとその他のログを contextual ロギング を使うようにしました。kube-controller-manager
の変更 (contextual ロギング移行) は完全に終わりました。(#119250, @pohly) [SIG API Machinery, Apps, Cloud Provider, Instrumentation, Network, Storage and Testing] - GA となったフィーチャーゲート
MixedProtocolLBService
,ServiceInternalTrafficPolicy
,ServiceIPStaticSubrange
,EndpointSliceTerminatingCondition
を削除しました。(#117237, @yulng) -
OpenAPI v2
のスペックを 50% 以上縮小しました。特に CPU のリソース消費が削減されます。(#118204, @sttts)- 参照記法 ($ref) を使って重複したパラメータを省略することで実現しています。
-
OpenAPI v2 のスペックは
kubectl get --raw /openapi/v2 | jq .
で確認できます
- v1.21 で廃止予定となった
NetworkPolicyLegacy
テストスイートは新しいテーブルドリブンの e2e テストに置き換えられ正式に削除されました。(#118915, @astoycos)
今後のトピックの紹介
SIG-Network で扱われているトピックで、個人的に気になったものを紹介します。
- pod LifecycleHandler should support a sleep option #114465
- Service でプロトコルが違うがポート番号が重複したときに apply の挙動がおかしい問題