Edited at

Kubernetes 1.15: SIG Network の変更内容


はじめに

この記事では Kubernetes 1.15 における SIG Network の活動に基づく変更点を紹介します。変更点は以下のドキュメントから収集しています。


主要な変更点

Network に関する大きな変更はありません。


アップグレード前の注意事項


  • deprecated 扱いとなっていた kube-proxy の --conntrack-max フラグが削除されました。このフラグを使用していたユーザーは代わりに --conntrack-min--conntrack-max-per-core を使用してください (#78399, @rikatz)

  • deprecated 扱いとなっていた kube-proxy の --cleanup-iptables フラグが削除されました (#78344, @aramase)


既知の問題

Network に関する既知の問題はありません。


廃止予定


  • kube-proxy


    • deprecated 扱いとなっていた --cleanup-iptables が削除されました (#78344, @aramase)



  • API


    • v1.19 から Ingress リソースは extensions/v1beta1 では提供されません。v1.14 から提供されている networking.k8s.io/v1beta1 API に移行してください。既存の Ingress リソースは networking.k8s.io/v1beta1 API からも参照できます

    • v1.16 から NetworkPolicy リソースは extensions/v1beta1 では提供されません。v1.8 から提供されている networking.k8s.io/v1 API に移行してください。既存の NetworkPolicy リソースは networking.k8s.io/v1beta1 API からも参照できます



      • :pencil: 次のバージョンで古い API バージョンでの利用は廃止になるので、まだ古い API バージョンを利用している場合は速やかに移行しましょう






メトリクスの変更


  • kube-proxy に、最後にプロキシールールを反映した時刻を示すメトリクス kube_proxy_sync_proxy_rules_last_timestamp_seconds が追加されました (#74027, @squeed)


注目すべき機能変更


  • Service LoadBalancer のための Finalizer プロテクション (ServiceLoadBalancerFinalizer) が Alpha 機能として追加されました。これは関連付けられたロードバランサーのリソースを削除するまで、Service リソースが完全に削除されるのを防止します。この機能はデフォルトで無効化されています (#78262, @MrHohn)



    • :pencil: これまで type=LoadBalancer の Service リソースを削除した時に、外部のロードバランサーが削除されずに取り残されてしまうケースがありました。この機能を使うことで、外部のロードバランサーが確実に削除されるようになります




API の変更


  • kube-proxy でより厳格な ARP の設定を有効化するためのフラグ --ipvs-strict-arp が、既存の振る舞いを維持するためにデフォルト無効になりました。このフラグは v1.13.0 でデフォルト有効になりましたが、一部の CNI プラグインに影響を及ぼすことが分かったため、デフォルト無効に変更になります (#75295, @lbernail)



    • :pencil: このフラグを有効にすると、kube-proxy は net/ipv4/conf/all/arp_ignore1 を、net/ipv4/conf/all/arp_announce2 をそれぞれ設定します




その他の機能変更


  • Ingress オブジェクトは networking.k8s.io/v1beta1 バージョンとして etcd に保存されるようになりました (#77139, @cmluciano)

  • IPVS を使用している時に kube-proxy を透過的に再起動できるようになりました (#75283, @lbernail)

  • conntrack により INVALID と判定されたパケットは破棄するようになりました。これにより、Service IP への長時間の TCP 接続において不正な再送信が発生した時に "Connection reset by peer" エラーとして接続が終了してしまう問題を修正します (#74840, @anfernee)

  • kube-proxy が他のモードでの実行時に生成したネットワークルールを自動的に削除しないようになりました。kube-proxy のモードを変更 (例: iptables モードから IPVS モードに変更) する場合は kube-proxy --cleanup を実行するか、kube-proxy を再度起動する前に Worker ノードを再起動 (推奨) してください。kube-proxy を異なるモードに変更していない場合は、この変更による対応は不要です。(#76109, @vllry)

  • kube-proxy の HealthzBindAddress と MetricsBindAddress が IPv6 アドレスの指定をサポートしました (#76320, @JieJhih)

  • kube-proxy の userspace プロキシーが iptables プロキシーの minSyncInterval パラメーターの値に従うようになりました (#71735, @dcbw)

  • kube-proxy の iptables モードにおいて、ローカルからロードバランサーの IP アドレスへのトラフィックが Service チェインを通るようになりました (#77523, @andrewsykim)

  • kube-proxy の IPVS モードにおいて、(特に DNS / syslog による) 多数の DNS 接続の問題を解決するため UDP トラフィックの Graceful Termination を無効化しました (#77802, @lbernail)

  • 異なるハッシュタイプを使用している ipset ルールが存在する場合に kube-proxy がエラーを返す問題を修正しました (#77371, @andrewsykim)

  • iptables 1.8 において iptables ルールの削除失敗時に不適切なエラーメッセージが出力される問題を修正しました (#77303, @danwinship)

  • IPVS の Graceful Termination に関するログのログレベルを 2 に引き上げました (#78395, @andrewsykim)

  • kube-rpoxy で CleanupAndExit が true の時に正しく終了するようにしました (#76732, @JieJhih)

  • type=ExternalName に設定された Service において externalName の値の最後のドットを許容するようにしました (#78385, @thz)


所感

kube-proxy の細かな修正が多く含まれたリリースでした。NetworkPolicy リソースは次のバージョンで extensions/v1beta1 では提供されなくなるため、NetworkPolicy を利用している場合は API バージョンを確認して、速やかに networking.k8s.io/v1 に移行しましょう。