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 の根本原因を探る

推薦する

疑似独創性とは、独創性を盲目的に盗用することではありません

この記事では、疑似オリジナリティの問題について説明しています。疑似オリジナリティを軽蔑したり、疑似オ...

製品のマーケティングにWeiboを使用するのは信頼できるでしょうか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス製品マーケティングにWe...

レガシーアプリケーションをクラウド向けに最新化するための 10 のヒント

クラウド コンピューティングのスケーラビリティと柔軟性を最大限に活用するために、ほとんどの企業は単純...

5Gとエッジコンピューティング:強力な組み合わせ

企業における5Gとエッジコンピューティングのメリット第 5 世代 (5G) セルラー ネットワークと...

Kafka ソースコード分析とブローカーエンドのグラフィック原理

[[277321]]まず、Kafka がトピックを作成する方法から始めましょう。 kafka-top...

Vipshop は栄光にもかかわらず、どのような困難に直面しているのでしょうか?

最近の電子商取引のニュースに注目しているかどうかは分かりませんが、ジャック・マー氏がCainiao ...

ユーザーシステムがアップグレードされ、Baiduウェブマスタープラットフォームのユーザー管理機能が開始

ウェブマスターネットワーク(www.admin5.com)は8月14日、百度ウェブマスタープラットフ...

キャッシュの背後にある「破壊の種」

[[332833]]キャッシュアバランチ「キャッシュ ミス」という用語については何度も言及しており、...

ステーショングループを運営する上での注意点をまとめました

SEO 業界の競争が激化する中、一部の SEO 担当者は利益を最大化するための近道を探したり、検索エ...

あなたのウェブサイトが検索エンジンからペナルティを受ける5つの理由とその対処法

山の木々は、しっかりとした幹に成長するまでに、必ず多くの吹雪に耐えなければなりません。すべての SE...

SEO担当者がよく遭遇するジレンマについて話す

私が所属するネットワークチームで数日前にイベントが開催されました。1、2年前に設立された社内SEO ...

外部リンクの有効性に関する意見

外部リンクを作成する場合、アンカー テキストが最も優れており、次にハイパーリンク、最後にプレーン テ...

シンガポールサーバー: zenlayer、30% 割引、月額 160 ドルから、最大 10Gbps の帯域幅、リソースは自由にカスタマイズ可能

Zenlayer は、東南アジアの非常に重要なネットワークハブであるシンガポールに独自のデータセンタ...

DT時代の変化についての考察

DT という言葉はデータ テクノロジーを意味します。これは新しい用語ではないと言えますが、私が本当に...