Kubernetes 1.33 の SIG-Network の変更内容をまとめました。
過去の SIG-Network の変更内容
- Kubernetes 1.32: SIG-Network の変更内容
- Kubernetes 1.31: SIG-Network の変更内容
- Kubernetes 1.29: SIG-Network の変更内容
- Kubernetes 1.28: 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.33 の Changelog の中からSIG-Networkに関連した内容を和訳したものです。 の部分は筆者の補足になります。
Urgent Upgrade Notes
(No, really, you MUST read this before you upgrade)
- nftables プロキシモードにおける環境変数
KUBE_PROXY_NFTABLES_SKIP_KERNEL_VERSION_CHECK
の動作を修正しました。このカーネルバージョンチェックは、この変数が明示的に非空の値に設定されている場合にのみスキップされるようになりました。チェックをスキップするには、環境変数KUBE_PROXY_NFTABLES_SKIP_KERNEL_VERSION_CHECK
を設定してください。(#130401, @ryota-sakamoto)-
もともとこのチェックが動作せず、ホストで利用されているnftのバージョンのチェックが実質機能していませんでした
-
ホストのnftのバージョンが<= 0.9.8だと、クラッシュする問題を回避するためのチェックのようです
-
Changes by Kind
Deprecation
- EndpointSliceの
hints
フィールドがGA(一般提供)に昇格しました。ベータ版のアノテーションservice.kubernetes.io/topology-mode
は非推奨とされ、GAには昇格しません。後方互換性のために引き続き動作しますが、ユーザーはトポロジー対応のルーティング構成のためにService APIのspec.trafficDistribution
フィールドを使用することが推奨されます。(#130742, @gauravkghildiyal) [SIG Network] - v1 Endpoints APIは正式に非推奨となりました(ただし、引き続き完全にサポートされます)。このAPIは削除されませんが、すべてのユーザーは代わりにEndpointSlice APIを使用する必要があります。(#130098, @danwinship) [SIG API Machinery and Network]
-
Endpointsには1000以上のターゲットを追跡できない制約があったりするので、早めにEndpointSlicesを利用するように変更することをおすすめします
-
API Change
- フィーチャーゲート
DRAPartitionableDevices
が追加されました。このゲートを有効にすると、動的リソース割り当てが分割可能なデバイスの割り当てをサポートします。(#130764, @cici37) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Scheduling, Storage and Testing]-
GPUやSR-IOVなどで一つのデバイスを複数のワークロードで共有するための機能追加です。
-
- APIサーバーがlistリクエストに応答する方法を改善しました。レスポンス形式がProtobufにネゴシエートされる場合、Protobufでのリストレスポンスは1要素ずつマーシャリングされ、大規模なコレクションを提供するために必要なメモリが大幅に削減されます。ストリーミングリストレスポンスは、
StreamingCollectionEncodingToProtobuf
フィーチャーゲートを使用して無効化できます。(#129407, @serathius) [SIG API Machinery, Apps, Architecture, Auth, CLI, Cloud Provider, Network, Node, Release, Scheduling, Storage and Testing] - フィーチャーゲート
MultiCIDRServiceAllocator
が安定版に昇格し、DisableAllocatorDualWrite
フィーチャーゲートがベータ版(デフォルトでは無効)に昇格しました。
アクションが必要です: Kubernetesクラスタ管理者およびクラスタのService CIDRを管理するディストリビューションに対して。
Kubernetesでは、APIオブジェクトServiceCIDR
を介してクラスタのService CIDRを定義できるようになりました。
Kubernetesのディストリビューションまたは管理者は、新しいService CIDRがクラスタ内の他のネットワークと重複しないように制御したり、特定のIP範囲にのみ属するようにしたい場合があります。また、管理者はクラスタごとに1つのService CIDRのみを持つ既存の動作を維持したい場合もあります。この目的を達成するためにValidatingAdmissionPolicy
を使用できます。(#128971, @aojea) [SIG Apps, Architecture, Auth, CLI, Etcd, Network, Release and Testing] - Serviceの
trafficDistribution
フィールド(PreferClose
オプションを含む)がGA(一般提供)に昇格しました。このフィールドが設定されていないServiceは、既存の動作を継続します。詳細については、以下のドキュメントを参照してください。
https://kubernetes.io/docs/concepts/services-networking/service/#traffic-distribution
(#130673, @gauravkghildiyal) [SIG Apps, Network and Testing] - ReplicationControllerの
replicas
およびminReadySeconds
フィールドの最小値バリデーションが宣言型バリデーションに移行されました。これらのフィールドの必須性も宣言型でバリデーションされます。
DeclarativeValidation
フィーチャーゲートが有効化されている場合、既存のバリデーションとの不一致がメトリクスを通じて報告されます。
DeclarativeValidationTakeover
フィーチャーゲートが有効化されている場合、移行されたフィールドに対するエラーの主なソースとして宣言型バリデーションが使用されます。
(#130725, @jpbetz) [SIG API Machinery, Apps, Architecture, CLI, Cluster Lifecycle, Instrumentation, Network, Node and Storage] -
PreferSameTrafficDistribution
フィーチャーゲートが有効化されている場合、新しいtrafficDistribution
値であるPreferSameNode
が利用可能になります。この値は、クライアントと同じノード上のエンドポイントに常にService接続をルーティングしようとします。さらに、PreferSameZone
がPreferClose
のエイリアスとして導入されました。
(#130844, @danwinship) [SIG API Machinery, Apps, Network and Windows]-
嬉しい機能追加ですね!node-local-dns-cacheなどノード上に動作しているアプリケーションに動作しているPodへ通信を向けたいが、そのPodの更新や不調時には別のノードのPodへ通信を向けてほしい時に嬉しいですね。
-
SameNodeが利用できないときはPreferSameZone、それも満たせない場合はクラスタ全体で通信が分散されるようです
-
-
StrictIPCIDRValidation
フィーチャーゲートが有効化されている場合、KubernetesはIPアドレスやネットワークアドレス範囲(「CIDRブロック」)として受け入れられる値に対して若干厳格になります。 特に、IPv4アドレス内のオクテットは先頭に0
を持つことが許されず、IPv4マップされたIPv6値(例:::ffff:192.168.0.1
)は禁止されます。これらの値は、異なるコンポーネントが同じ文字列を異なるIPアドレスとして解釈する場合にセキュリティ問題を引き起こす可能性があります(例: CVE-2021-29923)。この厳格化は、組み込みのAPI種類のフィールドにのみ適用され、カスタムリソース種類、Kubernetes構成ファイル内の値、またはコマンドライン引数には適用されません。(フィーチャーゲートが無効化されている場合、そのような無効なIPまたはCIDR値を持つオブジェクトを作成すると、将来的に拒否されることをAPIサーバーが警告します。)
(#122550, #128786, @danwinship)[SIG API Machinery, Apps, Network, Node, Scheduling and Testing]-
パーサーによって解釈が異なるようなIPアドレスの表記に対するvalidationを追加する変更です
-
010.002.003.004
のようなアドレスは例えばlibcベースのアプリケーションでは0から始まるオクテットが8進数として解釈されるらしく、パーサーによって解釈が異なり、::ffff:192.168.0.1
IPv6の中にIPv4アドレスが含まれるアドレスもパーサーによって解釈が異なる問題があります
-
Feature
- kube-proxyに
/flagz
エンドポイントを追加しました(#128985、@yongruilin)[SIG Instrumentation and Network]-
ComponentFlagz feature gateが有効化されることで動作します。
-
- kube-proxyに
/status
エンドポイントを追加しました (#128989, @Henrywu573) [SIG Instrumentation and Network]-
こちらおそらくchangelogの誤りで
/statusz
エンドポイントの追加です -
/flagz
と同様にComponentFlagz feature gateが有効化されることで動作します。
-
- DRAResourceClaimDeviceStatusがデフォルトで有効化され、DRAドライバーが各割り当て済みデバイスのステータスデータを報告できるようになりました。(#130814, @LionelJouin) [SIG Network and Node]
- Endpointsコントローラーによって作成されたEndpointsリソースには、これを示すラベルが含まれるようになりました。
手動でEndpointsを作成するユーザーもこのラベルを追加できますが、代わりにEndpointSlices
を使用することを検討してください。
(#130564, @danwinship) [SIG Apps and Network]-
Endpointsの非推奨化の対応の一つでしょうか? Endpointコントローラによって管理されているEndpointを識別・トラッキングできるようにするための変更です
-
- kube-proxyの
healthz
およびlivez
HTTPエンドポイントのスキーマが拡張され、対応するIPファミリーに関する情報が組み込まれるようになりました。
(#129271, @aroradaman) [SIG Network and Windows] -
client-go/rest
において、コンテキストに基づくロギングの完全なサポートを実装しました。BackoffManager
の代わりにBackoffManagerWithContext
が使用されるようになり、呼び出し元がスリープを中断できるようになりました。
(#127709, @pohly) [SIG API Machinery, Architecture, Auth, Cloud Provider, Instrumentation, Network and Node] -
RelaxedDNSSearchValidation
がベータ版に昇格しました。これにより、Podの検索ドメインとして単一のドット(".")やアンダースコア("_")を含むことが許可されるようになりました。
(#130128, @adrianmoisey) [SIG Apps and Network] - 認証されたリクエストに対して、kube-apiserverのトレースコンテキストを尊重するようになりました。
(#127053, @dashpole) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Instrumentation, Network, Node and Testing] - kube-proxyのnftablesモードがGA(一般提供)に昇格しました。(iptablesモードは引き続きデフォルトとして残ります。)
nftablesモードを選択するには、--proxy-mode nftables
を指定するか、設定ファイルでmode: nftables
を使用してください。詳細については、kube-proxyのドキュメントを参照してください。
(#129653, @danwinship) [SIG Network] - IPアドレスやCIDR値をAPIオブジェクトに書き込むさまざまなコントローラーが、これらの値を常に正規化された形式で書き込むようになりました。
(#130101, @danwinship) [SIG Apps, Network and Node]-
#122550 と関連する変更のようです
-
-
kubeproxy_conntrack_reconciler_deleted_entries_total
メトリクスを使用して、リコンサイラーによってクリアされたconntrackフローの累積合計を追跡できるようになりました。(#130204, @aroradaman) -
kubeproxy_conntrack_reconciler_sync_duration_seconds
メトリクスを使用して、conntrackリコンサイレーションのレイテンシーを追跡できるようになりました。(#130200, @aroradaman)
Documentation
- なし
Bug or Regression
- kube-proxyの
EndpointSliceCache
メモリで発生していたリークを修正しました。(#128929, @orange30) - Kubernetesスタイルのサイドカーコンテナ(つまり、
Always
再起動ポリシーを持つinitコンテナ)とServiceに関する問題を修正しました。この修正以前は、サイドカーによって公開された名前付きポートにServiceを使用してアクセスすることができませんでした。(#128850, @toVersus) [SIG Network and Testing] - ホストが高負荷の状態にあるときに発生する、まれで断続的なネットワーク問題を修正しました。(#130256, @adrianmoisey)
- Kubernetes 1.32で発生したリグレッションを修正しました。この問題では、UDPサービスでExternalまたはLoadBalancer IPを使用するServiceを利用している場合、kube-proxyがServiceの宛先ポートでフィルタリングを行わず、Serviceに関連付けられたすべてのUDPエントリを削除しようとして大量のCPUを消費していました。(#130484, @aojea) [SIG Network]
- WebSocketsのHTTPSプロキシサポートを追加しました(#129872, @seans3) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Instrumentation, Network and Node]
- kube-proxy: UDPワークロードが大量に存在するクラスタで発生する可能性があったメモリリークを修正しました。(#130032, @aroradaman)
-
#130484と関連する修正で、この修正と合わせて対応が完了となっています
-
よくありがちなエラーを配列として保存していたことで、規模によってはメモリの使用量が増加してしまっていたようです
-
- Serviceを使用してポート10250を外部公開する際の制限を削除しました。(#129174, @RyanAoh) [SIG Apps and Network]
-
知らなかったのですが、type: LoadBalancerの公開ポートとして、kubeletのAPIのポートを制限していたようで、その制限がなくなったようです
-
- Alpha版の
DRAResourceClaimDeviceStatus
機能を使用している場合、NetworkDeviceData
内のIPアドレス値のバリデーションがより厳格になりました。(#129219, @danwinship) [SIG Network] - kube-apiserver:
--service-cluster-ip-range
フラグをkube-apiserverに渡す際に、シングルスタックからデュアルスタックへ変更した場合、デフォルトのServiceCIDR APIオブジェクトの更新やデュアルスタックのService APIオブジェクトの作成で発生していた問題を修正しました。(#131263, @aojea) [SIG API Machinery, Network and Testing]
Other (Cleanup or Flake)
- kube-proxyのメトリクスやエンドポイントのスキーマが拡張され、対応するIPファミリーに関する情報が組み込まれるようになりました。(#129173, @aroradaman) [SIG Network and Windows]
-
TestNodeDeletionReleaseCIDR
におけるリントエラーを修正しました。(#128856, @adrianmoisey) [SIG Apps and Network] - kube-proxyのnftables利用時、ログレベル4以上で失敗したトランザクションやテーブル全体の内容をログ出力するようになりました。パフォーマンスへの影響を避けるため、ログは24時間に1回までに制限されています。(#128886, @npinaeva)
- iptablesバイナリがインストールされていないシステム上でkubeletを実行した場合、複数回エラーをログ出力しなくなりました。(#129826, @danwinship) [SIG Network and Node]
- Job、IPAM、ReplicaSetコントローラーで高頻度かつ価値の低いログエントリのログレベルをそれぞれV(2)、V(4)、V(4)に調整し、ログの冗長性を削減しました。この変更により、必要な場合にこれらのログへアクセスできる状態を維持しつつ、ログノイズが最小限になります。(#130591, @fmuyassarov) [SIG Apps and Network]
- Windows HostNetworkコンテナのアルファサポートを削除しました。(#130250, @marosset) [SIG Network, Node and Windows]
- 一般提供されていたフィーチャーゲート
KubeProxyDrainingTerminatingNodes
を削除しました。(#129692, @alexanderConstantinescu) [SIG Network] - etcdクライアントライブラリを
v3.5.21
に更新しました(#131103, @ahrtr) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Etcd, Instrumentation, Network, Node and Storage]