LoginSignup
4
2

More than 1 year has passed since last update.

Kubernetes 1.24: SIG-Network の変更内容

Last updated at Posted at 2022-05-17

Kubernetes 1.24 の SIG-Network の変更内容をまとめました。個人的には、Service の静的 IP 用レンジを分割する ServiceIPStaticSubrange というアルファの機能が興味深かったです。この機能は以下の個別記事にまとめました。

過去の SIG-Network の変更内容

以下は、Kubernetes v1.24 の Changelog を和訳したものです。:pencil: の部分は筆者の補足になります。

Major Themes (主なテーマ)

Service の IP 割り当ての衝突を避ける

Kubernetes 1.24 では、Service の静的 IP アドレスの割り当てのためのレンジを優先予約 (soft-reserve) する、オプトインの新機能が導入されました。この機能を手動で有効にすると、クラスタは Service の IP アドレスのプールから自動割り当てを優先するようになり、衝突のリスクを減らせます。

Service の ClusterIP は次のように割り当てできます。

  • 動的: 設定した Service IP のレンジ内で、クラスタが自動的に空いている IP を選択します
  • 静的: 設定した Service IP のレンジ内で、利用者が任意の IP を選択します

Service の ClusterIP は一意であるため、割り当て済みの ClusterIP を持った Service を作成するとエラーが返ります。

:pencil: この機能については、個別記事 Kubernetes: Service の静的 IP 用レンジを分割する (ServiceIPStaticSubrange) にまとめました。v1.24 ではアルファ機能である点にご注意ください。

:pencil: Kubernetes 1.23 と 1.24 の API 差分

Kubernetes API (/api/, /apis/) から取得した情報を使って、Kubernetes 1.23 と 1.24 の API の差分を確認しました。差分は以下になります。今回は CSIStorageCapacity の v1 追加と、その v1beta1 の deprecated のみが差分でした。

  • API の追加:
    • storage.k8s.io/v1/csistoragecapacities
  • API の削除: なし
  • Deprecation の指定:
    • storage.k8s.io/v1beta1/csistoragecapacities

参考までに、今までの各 Kubernetes の API バージョン対応表を以下の記事にまとめています。(Kubernetes 1.24 時点での情報に更新しました)

Deprecation (非推奨)

  • Service.Spec.LoadBalancerIP が非推奨になりました。このフィールドは仕様が不十分で、実装により意味が異なっていました。Kubernetes v1.24 時点では、利用可能な場合は実装固有のアノテーションを使うことが推奨されます。このフィールドは将来の API バージョンで削除される可能性があります。(#107235, @uablrek)
  • 1.11 から非推奨だった tolerate-unready-endpoints アノテーションを削除しました。代わりに Service.spec.publishNotReadyAddresses を使ってください。(#108020, @tossmilestone)

API Change (API の変更)

  • winkernel モードで動作する kube-proxy に 2 つの新オプションが追加されました。
    • --forward-healthcheck-vip: もし true に設定された場合、宛先が Service VIP のヘルスチェックのトラフィックは、kube-proxy のヘルスチェックサービスに転送されます。
    • --root-hnsendpoint-name: ネットワークネームスペースの root のための hns エンドポイント名を指定します。
    • このオプションは、Google の GCLB のようなパススルー型のロードバランサで、バックエンドサービスの正しいヘルスチェックを可能にします。この変更なしでは、ヘルスチェックのパケットはドロップされ、このようなロードバランサから Windows ノードはヘルシーでない (unhealthy) と扱われます。
    • :pencil: hns は Hierarchical Namespace の略です。
  • Network Policy オブジェクトに新しい Status サブリソースが追加されました。 (#107963, @rikatz)
  • InterfaceNamePrefixBridgeInterface が、--detect-local-mode オプションの引数としてサポートされました。また、新しくオプショナルな --pod-interface-name-prefix--pod-bridge-interface フラグが、kube-proxy に導入されました. (#95400, @tssurya)
  • ClusterCIDRConfig のための、v1alph1 networking API が導入されました。(#108290, @sarveshr7)
  • プロキシーのメトリクス "sync_proxy_rules_no_local_endpoints_total" が新たに導入されました。このメトリクスは内部のエンドポイントを持たない Service の数を表します。"traffic_policy" ラベルには、 "internal" または "external" が含まれます。(#108930, @MaxRenaud)
  • kube-apiserver: metadata.selfLink フィールドは kube-apiserver によって設定されなくなりましたこれは 1.16 で廃止予定となり、1.20 以上ではデフォルトで設定されていませんでした。(#107527, @wojtek-t)
  • OpenAPI V3 がデフォルトで有効になりました。(#109031, @Jefftree)
  • ClusterCIDRConfig のための、v1alph1 networking API が削除されました。
  • メトリクス evictions_numberevictions_total とリネームし、stable としました。オリジナルの evictions_number メトリクス名は廃止予定となっており、1.23 で削除されていました。(#106366, @cyclinder)
  • ServiceLBNodePortControl 機能が GA となりました。このフィーチャーゲートは 1.26 で削除される予定です。(#107027, @uablrek)

Feature (機能追加)

  • ProxyTerminatingEndpoints をすべてのトラフィックポリシー(external, internal, cluster, local) に適用しました。(#108691, @andrewsykim)
  • MixedProtocolLBService をアルファからベータにしました。(#109213, @bridgetkromhout)
  • Service の .spec.loadBalancerClass フィールドが GA (generally available) になりました。(#107979, @XudongLiuHarold)
  • kubelet が KUBE-IPTABLES-HINT という名前の iptables チェインを mangle テーブルに作成するようになりました。ホストのネットワーク名前空間上で iptables のルールの変更が必要なコンテナ化されたコンポーネントは、このチェインの存在を使って、システムが iptables-legacy と iptables-nft のどちらを使っているかより正しく判断できるようになりました。(#109059, @danwinship)
    • :pencil: KUBE-IPTABLES-HINT がに存在する場合、iptables-legacy を使っていることを表します。
  • TopologyAwareHints フィチャーゲートがデフォルトで有効になりました。これは、Service に service.kubernetes.io/topology-aware-hints を設定することで、利用者が Topology Aware Hints をオプトインできるものです。このアノテーションが設定されていない Service には影響ありません。(#108747, @robscott)
    • :pencil: TopologyAwareHints は、トポロジー(リージョンとゾーン)を考慮したルーティングを可能にする機能です。マルチゾーン環境での、ネットワークパフォーマンス向上が期待できます。デフォルトで有効になりましたが、v1.24.0 時点ではベータであることに注意してください。

Bug or Regression (バグまたはリグレッション)

  • 非効率だった EndpointSlices コントローラーのメトリクスキャッシュのロックが修正されました。特定のシナリオ、特に Service を大量に持つようなクラスタでは、ネットワークプログラミングのレイテンシーが大幅に短縮される可能性があります。(#107091, @robscott)

    • :pencil: Service が数千あると、resync period の度に CPU が高負荷になるようです。この修正は Kubernetes v1.23.2 にも cherry-pick されています
  • Apiserver が、proxy サブリソースのリクエストの処理で 0.0.0.0/:: への接続試行を拒否するようになりました。 (#107402, @anguslees) [SIG Network]

  • 古い Service がクラウドプロバイダに送信されことがあるバグが修正されました (#107631, @lzhecheng)

  • 部分的な EndpointSlice の更新により、更新されていないエンドポイントからノード名の情報が消えてしまうバグを修正しました。(#108198, @liggitt)

  • 1.19 から変更なしに永続されていた Service オブジェクトに対する変更が、誤った spec.clusterIPs: Required value エラーで拒否されてしまうという、1.23 でのリグレッションを修正しました。(#107847, @thockin)

  • --nodeport-addresses が空のとき、kube-proxy で重複したポートが開いてしまうバグを修正しました (#107413, @tnqn)

  • iptables モードの kube-proxy は、-v=5 ではなく -v=9 のときだけ、iptables の入力のすべてをログに記録するようになりました。(#108224, @danwinship)

  • kube-proxy はノード上で Service のノードポートを保持しなくなりました。利用者は引き続き kube-proxy が使うノードポートの範囲でリスナーを動かさないことが推奨されます。(#108496, @khenidak)

  • Pod ResourceVersion の変更に伴う、不要な EndpointsEndpointSlice の更新が防止されました。(#108078, @tnqn)

  • Windows kernel-mode の kube-proxy メトリクスが公開されるようになりました。(#106581, @knabben)

  • dockershim が公開している CRI API のバージョンを v1alpha2 に戻しました。(#106803, @saschagrunert)

    • :pencil: Kubernetes v1.24 で dockershim が削除されるため、変更しないように戻したようです
  • 廃止予定だったフラグ --really-crash-for-testing が削除されました。(#101719, @SergeyKanzhelev)

その他 (Cleanup or Flake)

  • 先頭にゼロを持つ IP の Service を使ったとき、クラスタが CVE-2021-29923 に対して脆弱でないことを検証する e2e テストを追加しました。このテストは必要条件であり十分条件ではなく、API からの IP アドレスを使う全てのコンポーネントが、これらを十進数または破棄する必要があることに注意してください。 (#107552, @aojea)
  • Endpoints と EndpointSlice コントローラは targetRef の resourceVersion を Endpoints と EndpointSlice に追加しなくなりました。 (#108450, @tnqn)
  • pkg/proxy/apis/config/types.go の 206 行目の implemented のスペルを修正しました。(#106453, @davidleitw)
  • nodePortAddresses の設定パラメータで IPv4 のループバックを選択していないとき、kube-proxy が sysctl の net.ipv4.conf.all.route_localnet=1 を設定しないようになりました。(#107684, @aojea)
  • iptables のダンプを見る利用者は、ルールの構造と名前付けに変更があることに気づくでしょう。(#109060, @thockin)
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2