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

推薦する

推奨: webfaction - 価格は変更なし/メモリ 1 倍アップグレード無料

仮想ホストを VPS として使用したいですか?出来ますか?必見です! webfaction は、Ho...

「She Economy」インサイトレポート

今日は3月8日、偉大な女性たちの祭典です。そこで私は「彼女の経済」についての洞察を皆さんとシェアした...

今後3~5年で、クラウドコンピューティングはエンタープライズビッグデータビジネスの発展の原動力となるだろう。

昨今、経営者は「ビッグデータ」や「クラウドサービス」といった言葉を毎日のように目にするようになりまし...

権威の高い外部リンクと一般的な外部リンクを取得する方法

外部リンクはSEOにとって非常に重要なタスクです。外部リンクは権威の高い外部リンクと一般的な外部リン...

ドメイン名の履歴はSEOに影響を与える要因です

月給5,000~50,000のこれらのプロジェクトはあなたの将来ですドメイン名の履歴は、ウェブサイト...

ブランドマーケティング: 「What’s Peppa Pig?」がなぜ人気なのか?

「ペッパピッグタトゥー、社会人への拍手」が時代遅れの古いジョークになると、このイギリスの赤い豚は、映...

私のジョークサイトのSEOについて

義務教育を数年受けた後、私はついに試験について心配しなくなりました。これは私が大学に行ってから一番感...

#ストレージ サーバー# host.ag-Bulgaria/E5-2430 v2/16g メモリ/4x2T ハード ディスク

ブルガリアで年に設立されたhost.agを紹介します。サーバーレンタル事業(オランダとブルガリアのデ...

Pinterest マーケティングの 7 つのヒント: ユニークなピンボードを作成する

北京時間6月7日、写真共有ソーシャルネットワーキングサイト「Pinterest」は昨年突然人気となり...

ehvps-$4.9/KVM/1g メモリ/50g ハードディスク/10T トラフィック/フリーモント

ehvps は海外に登録され、海外の人が運営している VPS 事業者です (中国人が関与している、ま...

中国航天科技集団:「中国製造2025」の実現に向けてINDICSを構築

集中中国航天科技集団は、6つの研究機関、14の株式会社企業、23の傘下組織、600社を超える各レベル...

ウェブサイトのランキングに影響を与える可能性のある4つの要素

間違いその1: リンクを購入する。他のウェブサイトからリンクしてもらうためにお金を払うよう説得しよう...

外部リンクを投稿してエネルギーを節約する方法

外部リンクの構築は、決して十分に議論することができないトピックです。「コンテンツこそ王様」という言葉...

Ele.me の軽量分散時系列データベースの設計と調査!

著者について: Huang Jie は2015 年に Ele.me に入社し、現在はフレームワーク ...

デジタル自動車小売業がオムニチャネル体験を最適化

自動車小売業界では、デジタルモール、AI+小売、自動車スーパーマーケット、オムニチャネルマーケティン...