Kubernetes クラスターで Iptables を Ipvs に置き換える方法

Kubernetes クラスターで Iptables を Ipvs に置き換える方法

k8s の kube-proxy はネットワーク プロキシであり、Kubernetes クラスター内のサービスに対して負荷分散とサービス検出機能を提供する役割を担っていることは誰もが知っています。 kube-proxy はさまざまなモードで実行されますが、iptables モードと ipvs モードは 2 つの一般的なモードです。

iptables と ipvs はどちらも Linux カーネルのネットワーク プロキシ テクノロジであり、負荷分散とサービス検出を実装するために使用できます。ただし、2 つのモードにはいくつかの違いがあります。

さまざまな実装方法

Iptables は iptables ルールに基づいて実装されます。各ノードは、負荷分散とサービス検出を実現するために、iptables に一連のルールを追加します。一方、ipvs はカーネルレベルの負荷分散テクノロジに基づいており、より効率的なネットワーク プロキシ処理を実現できます。

異なるパフォーマンス

高負荷状態では、ipvs モードの kube-proxy はカーネル レベルでネットワーク負荷分散を処理し、より効率的であるため、パフォーマンスが向上します。ただし、シナリオによっては、Iptables モードの方がパフォーマンスが向上することもあります。

さまざまな機能

Iptables モードの Kube-proxy Kubernetes バージョン 1.16 より前では、ポート転送は iptables を使用して実装されていましたが、TCP ベースの負荷分散とサービス検出しか実装できず、レイヤー 4 の負荷分散をサポートできませんでした。 Kubernetes バージョン 1.16 では、レイヤー 4 の負荷分散をサポートするために新しい iptables-nat モードが追加されました。対照的に、ipvs モードは TCP、UDP、SCTP、および 4 層の負荷分散をサポートし、オンライン ハッシュ、IP ハッシュ、ラウンド ロビン、最小接続などの複数の負荷分散アルゴリズムをサポートします。

iptables の欠点の 1 つは、カーネル レベルで動作することです。 iptables ルールが複雑すぎると、システムのパフォーマンスに影響する可能性があります。さらに、iptables ルールはカーネルに集中しているため、変更することが困難です。

Kubernetes システムでは、kubeadm 管理ツールは、kube-proxy を処理するためにデフォルトで ipvs モードを選択します。同時に、Kubernetes は自動プルアップ、ロールバック、フェイルオーバーなどのさまざまな例外処理メカニズムも提供し、システムの信頼性、高可用性、フォールト トレランスを確保します。これにより、iptables 処理中に発生する可能性のある問題を回避し、障害処理とフォールト トレランスにおけるシステム全体のパフォーマンスが向上します。

操作はすべてのノードで実行されます

カーネルサポートを有効にする

cat >> /etc/sysctl.conf << EOF net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF

sysctl -p

ipvsサポートを有効にする

yum -y インストール ipvsadm ipset

一時的な効果

modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4

永続

cat > /etc/sysconfig/modules/ipvs.modules <<EOF modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF

kube-proxyを設定し、マスター上で操作する

インストールにはkubeadminを使用するので、操作は以下のようになります

[root@master] # kubectl edit cm kube-proxy -n kube-system configmap/kube-proxy edited

次のように変更します

kind: MasterConfiguration apiVersion: kubeadm.k8s.io/v1alpha1 ... ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "" syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 127.0.0.1:10249 mode: "ipvs" #修改

マスターでkube-proxyを再起動します

kubectl get ポッド -n kube-system | grep kube-proxy | awk '{print $1}' | xargs kubectl delete pod -n kube-system

ipvsが有効になっているかどうかを確認する

kubectl logs kube-proxy-cvzb4 -n kube-system I0409 03:37:29.194391 1 server_others.go:170] Using ipvs Proxier. W0409 03:37:29.194779 1 proxier.go:401] IPVS scheduler not specified, use rr by default I0409 03:37:29.194981 1 server.go:534] Version: v1.15.3 I0409 03:37:29.214255 1 conntrack.go:52] Setting nf_conntrack_max to 524288 I0409 03:37:29.216744 1 config.go:96] Starting endpoints config controller I0409 03:37:29.216812 1 controller_utils.go:1029] Waiting for caches to sync for endpoints config controller I0409 03:37:29.217445 1 config.go:187] Starting service config controller I0409 03:37:29.218320 1 controller_utils.go:1029] Waiting for caches to sync for service config controller I0409 03:37:29.318218 1 controller_utils.go:1036] Caches are synced for endpoints config controller I0409 03:37:29.318564 1 controller_utils.go:1036] Caches are synced for service config controller

確認する

ポッドに入ると、servicename を ping できるようになります。 iptables を使用する場合、ping を実行すると次のエラーが表示されます。上記の操作を実行すると、すべて正常になります。

 root@xxxxxx-cb4c9cb8c-hpzdl:/opt# ping xxxxxx PING xxxxxx.xxxxx.svc.cluster.local (172.16.140.78) 56(84) bytes of data. From 172.16.8.1 (172.16.8.1) icmp_seq=1 Time to live exceeded From 172.16.8.1 (172.16.8.1) icmp_seq=2 Time to live exceeded

間違い

写真

解決策 (kube-proxy のバージョンを下げる)

 kubectl -n kube-system set image daemonset/kube-proxy *=registry.aliyuncs.com/k8sxio/kube-proxy:v1.17.6

<<:  クラウドコンピューティングデータセンターの持続可能な開発の利点

>>:  Kubernetes 1.28 スケジューラ OOM の根本原因を探る

推薦する

世界のモバイル市場予測

最近、App Annie は「2020 年の世界モバイル市場予測」レポートを発表しました。このレポー...

ウェブサイトのタイトルを入力し、検索エンジンのキーワードを使用して最適化する方法

月収10万元の起業の夢を実現するミニプログラム起業支援プランタイトル タグの定義については、HTML...

情報ストリーム広告チャネルの引用と掲載に関する 7 つの実践ガイド (2016 年更新)

この記事の内容:情報フロー広告とは?情報フロー広告入門表示フォームチャネル引用申請プロセス舞台裏の運...

基本的な最適化の強化: ウェブサイトの内部リンク構築をより洗練させる方法

検索エンジンのランキングの決定的な列に入るにはどうすればよいでしょうか? 多くの人は、外部リンクとコ...

#BlackFriday# Hawkhost: cpanel 仮想ホスティング $21.53/2 年、香港/ロサンゼルス/ダラス/ニューヨーク/トロント

Hawkhost は、特別なブラックフライデー プロモーションを開始しました。cpanel パネルを...

2024年のクラウドコンピューティングの主な利点と課題

クラウド コンピューティングは、大量のデータをオンラインで保存し、いつでもどのデバイスでも使用できる...

Digitalocean 割引コード集中更新投稿 (随時更新)

多くの友人がデジタルオーシャンの割引コードを探しています。デジタルオーシャンは設立以来、常に非常に良...

企業のウェブサイトをどのように運営すべきかについて話しましょう。

まず、Zeng Guanghong が ASP プログラミングに初めて触れたのは 2007 年です。...

raksmartのシンガポールクラウドサーバーはどうですか? BGPラインの評価をご覧ください

raksmart はシンガポールでクラウド サーバー サービスを提供しています。これには、Inter...

#12.12# cloudcone、ロサンゼルスの高トラフィック VPS、年間 14 ドル、KVM/1G メモリ/1 コア/20g SSD/5T トラフィック/1Gbps 帯域幅

CloudconeはDouble 12の特別プロモーションを開始しました。3つの安価なVPSは5Tト...

百度検索結果の2ページ目上部に表示される関連検索の分析

表面的には、3b戦争は安定している。360総合検索は市場の8%をしっかりと占め、一方で百度は80%か...

企業ウェブサイト運営者の知識背景とSEOの関係

Baidu が継続的に最適化しているサイトは主に企業サイトです。近年のインターネットの普及に伴い、企...

SEO業界における姿勢の重要性についての簡単な議論

みなさんこんにちは。私はHongtu Internetです。今日、仕事に行く途中、地下鉄の入り口を通...