はじめに
この記事では 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
- 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 からも参照できます
- 次のバージョンで古い API バージョンでの利用は廃止になるので、まだ古い API バージョンを利用している場合は速やかに移行しましょう
メトリクスの変更
- kube-proxy に、最後にプロキシールールを反映した時刻を示すメトリクス
kube_proxy_sync_proxy_rules_last_timestamp_seconds
が追加されました (#74027, @squeed)
注目すべき機能変更
- Service LoadBalancer のための Finalizer プロテクション (ServiceLoadBalancerFinalizer) が Alpha 機能として追加されました。これは関連付けられたロードバランサーのリソースを削除するまで、Service リソースが完全に削除されるのを防止します。この機能はデフォルトで無効化されています (#78262, @MrHohn)
-
これまで
type=LoadBalancer
の Service リソースを削除した時に、外部のロードバランサーが削除されずに取り残されてしまうケースがありました。この機能を使うことで、外部のロードバランサーが確実に削除されるようになります
-
これまで
API の変更
- kube-proxy でより厳格な ARP の設定を有効化するためのフラグ
--ipvs-strict-arp
が、既存の振る舞いを維持するためにデフォルト無効になりました。このフラグは v1.13.0 でデフォルト有効になりましたが、一部の CNI プラグインに影響を及ぼすことが分かったため、デフォルト無効に変更になります (#75295, @lbernail)-
このフラグを有効にすると、kube-proxy は
net/ipv4/conf/all/arp_ignore
に1
を、net/ipv4/conf/all/arp_announce
に2
をそれぞれ設定します
-
このフラグを有効にすると、kube-proxy は
その他の機能変更
- 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 に移行しましょう。