クラウドネイティブスパイダープール: ネットワークリージョン全体のIP割り当てに基づく

クラウドネイティブスパイダープール: ネットワークリージョン全体のIP割り当てに基づく

アンダーレイ ネットワークは、低遅延、信頼性、セキュリティなどの特性を備えた基盤となる基本ネットワークです。これらの機能は、遅延の影響を受けやすいアプリケーションのビジネス ニーズを満たし、高品質のユーザー エクスペリエンスを提供し、ネットワーク リソースを効果的に管理および保護できます。これらは通常、遅延に敏感なファイアウォール セキュリティ管理に使用されます。

  • 遅延に敏感なアプリケーション: 特定の業界やアプリケーション (金融取引、リアルタイムのビデオ伝送など) は、ネットワークの遅延に非常に敏感です。この場合、アンダーレイ ネットワークは物理層とリンク層の接続を直接制御してデータ転送時間を短縮することで、レイテンシを短縮できます。この低遅延機能により、アンダーレイ ネットワークはこれらのアプリケーションのニーズを満たす理想的な選択肢となります。
  • ファイアウォール セキュリティ制御: クラスターでは、通常、ファイアウォールは North-South 通信、つまりクラスターの内部ネットワークと外部ネットワーク間の通信を管理するために使用されます。セキュリティ制御を実現するには、ファイアウォールで通信トラフィックを検査およびフィルタリングし、出力通信を制限する必要があります。この場合、アンダーレイ ネットワークの IPAM を通じて固定の出力 IP アドレスを適用することで、クラスターと外部ネットワーク間の通信をより適切に管理および制御し、ネットワーク セキュリティを向上させることができます。

データセンターにおけるプライベート クラウドの人気が高まるにつれ、データセンター ネットワーク アーキテクチャの重要な部分であるアンダーレイ ネットワークが、より効率的なネットワーク伝送とより優れたネットワーク トポロジ管理機能を提供するために、データセンター ネットワーク アーキテクチャで広く使用されるようになりました。

01ネットワーク地域間のIPアドレス割り当て要件

最近、アンダーレイ ネットワークを使用していたときに、クラスターは存在するものの、クラスターのノードが異なるリージョンまたはデータ センターに分散されているというシナリオに遭遇しました。一部のノードはサブネット 10.6.1.0/24 のみを使用でき、一部のノードはサブネット 172.16.2.0/24 のみを使用できます。このコンテキストでは、アプリケーションがサブネット全体にレプリカを展開する場合、IPAM は、異なるノード上の同じアプリケーションの下の異なるポッドにサブネットに一致する IP アドレスを割り当て、正しく実行する必要があります。この目的を達成するために、IP アドレス管理 (IPAM) を通じてネットワーク間 IP 割り当てを実装し、アプリケーションの柔軟な展開とスケーラビリティを実現したいと考えています。

このシナリオのネットワーク トポロジ図は次のとおりです。

上記のシナリオを通じて、アンダーレイ ネットワークでは、同じアプリケーションの異なるコピー間でのクロスドメイン ネットワーク IP アドレス割り当てを実装することが、実稼働シナリオで解決する必要がある一般的な要件です。オープンソース コミュニティの Kubernetes IPAM プラグイン プロジェクトである Spiderpool は、ネットワーク領域全体にわたって IP 割り当てを柔軟かつインテリジェントに実装できる新しいソリューションを提供します。見てみましょう。

02新しいソリューション:スパイダープール

Spiderpool (https://github.com/spidernet-io/spiderpool) は、Kubernetes IPAM プラグイン プロジェクトであり、主にアンダーレイ ネットワークの IP アドレス管理のニーズに合わせて設計されており、サードパーティの IPAM プラグインと互換性のある任意の CNI プロジェクトで使用できます。クロスネットワークエリアに基づく IP 割り当ては、Spiderpool の重要な機能サポートです。また、固定アプリケーション IP アドレス、IP アドレスの自動伸縮、複数のネットワーク カード、デュアル スタック サポートなどの機能も含まれています。詳細については、Spiderpool 関数の紹介 (https://github.com/spidernet-io/spiderpool/blob/main/README-zh_CN.md) を参照してください。

03環境

Spiderpool がネットワーク リージョン全体に IP アドレスを割り当てる機能を実証するために、ネットワーク リージョン全体にクラスターを準備し、使用可能なサブネット ラベルを使用してノードにラベルを付けました。使用されるクラスター情報は次のとおりです。

 ~# kubectl get nodes -owide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP controller-node-1 Ready control-plane 1h v1.25.3 10.6.168.71 <none> worker-node-1 Ready <none> 1h v1.25.3 10.7.168.73 <none> ~# kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS controller-node-1 Ready control-plane,master 1h v1.25.3 node-subnet=subnet-6, ... worker-node-1 Ready <none> 1h v1.25.3 node-subnet=subnet-7, ...

以下は私のクラスターのネットワーク トポロジ図です。

04インストール

Spiderpool の公式ドキュメント (https://github.com/spidernet-io/spiderpool/blob/main/docs/usage/get-started-macvlan-zh_CN.md) によると、Multus、Macvlan、Veth、Spiderpool 環境のセットが構築されました。以下は、独自の環境に基づいて作成された SpiderSubnet インスタンスです。

 ~# kubectl get spidersubnet NAME VERSION SUBNET ALLOCATED-IP-COUNT TOTAL-IP-COUNT subnet-6 4 10.6.0.0/16 0 10 subnet-7 4 10.7.0.0/16 0 10

次の例では、Multus ネットワーク アタッチメント定義構成 macvlan-conf を作成します。ここで、

  • master: この例では、インターフェース ens192 がマスター パラメータとして使用されます。ネットワーク ゾーン全体の異なるノードのインターフェース名は一貫している必要があることに注意してください。このパラメータは、クラスタ ノード上のインターフェイス名と一致する必要があります。
 cat <<EOF | kubectl apply -f - apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: macvlan-conf namespace: kube-system spec: config: |- { "cniVersion": "0.3.1", "name": "macvlan-conf", "plugins": [ { "type": "macvlan", "master": "ens192", "mode": "bridge", "ipam": { "type": "spiderpool" } },{ "type": "veth", "service_cidr": ["10.233.0.0/18"] } ] } EOF

05IPプールの作成

Spiderpool の CRD: SpiderIPPool は nodeAffinity フィールドを提供します。ノード上で Pod が起動され、SpiderIPPool から IP を割り当てようとすると、Pod が配置されているノードが nodeAffinity 設定を満たしていれば、SpiderIPPool から IP を正常に割り当てることができます。そうしないと、SpiderIPPool から IP を割り当てることができません。

上記に従って、次の YAML を使用して 2 つの SpiderIPPools を作成します。これは、異なるノード上の Pod に IP アドレスを提供します。

 ~# cat <<EOF | kubectl apply -f - apiVersion: spiderpool.spidernet.io/v2beta1 kind: SpiderIPPool metadata: name: test-ippool-6 spec: subnet: 10.6.0.0/16 ips: - 10.6.168.60-10.6.168.69 gateway: 10.6.0.1 nodeAffinity: matchExpressions: - {key: node-subnet, operator: In, values: [subnet-6]} --- apiVersion: spiderpool.spidernet.io/v2beta1 kind: SpiderIPPool metadata: name: test-ippool-7 spec: subnet: 10.7.0.0/16 ips: - 10.7.168.60-10.7.168.69 gateway: 10.7.0.1 nodeAffinity: matchExpressions: - {key: node-subnet, operator: In, values: [subnet-7]} EOF

06アプリケーションを作成する

次の YAML の例では、daemonSet アプリケーションが作成されます。

  • ipam.spidernet.io/ippool: Spiderpool の IP プールを指定するために使用されます。複数の IP プールを代替プールとして設定できます。 Spiderpool は、「IP プール配列」内の要素の順序に従って IP アドレスを割り当てようとします。ノードがネットワーク領域をまたぐシナリオで IP アドレスを割り当てる場合、アプリケーション レプリカがスケジュールされているノードが最初の IP プールの _**IPPool.spec.nodeAffinity**_ アノテーションを満たしている場合、Pod はそのプールから IP 割り当てを取得します。要件を満たしていない場合、Spiderpool は代替プールから IP プールを選択し、すべての代替プールのスクリーニングに失敗するまで、Pod に IP アドレスを割り当て続けます。 [代替プール](https://github.com/spidernet-io/spiderpool/blob/main/docs/usage/ippool-multi.md)の使用方法について詳しく知ることができます。
  • v1.multus-cni.io/default-network: アプリケーションのデフォルトのネットワーク カードを作成する Multus の NetworkAttachmentDefinition 構成を指定するために使用されます。
 ~# cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: test-app spec: selector: matchLabels: app: test-app template: metadata: annotations: ipam.spidernet.io/ippool: |- { "ipv4": ["test-ippool-6", "test-ippool-7"] } v1.multus-cni.io/default-network: kube-system/macvlan-conf labels: app: test-app spec: containers: - name: test-app image: nginx imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 protocol: TCP EOF

作成が完了すると、Pod の IP が Pod が配置されているノードのサブネットに属し、対応する IP プールがアプリケーションの異なるコピーに IP アドレスを割り当てていることがわかります。

 ~# kubectl get po -l app=test-app -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-app-j9ftl 1/1 Running 0 45s 10.6.168.65 controller-node-1 <none> <none> test-app-nkq5h 1/1 Running 0 45s 10.7.168.61 worker-node-1 <none> <none> ~# kubectl get spiderippool NAME VERSION SUBNET ALLOCATED-IP-COUNT TOTAL-IP-COUNT DEFAULT DISABLE test-ippool-6 4 10.6.0.0/16 1 10 false false test-ippool-7 4 10.7.0.0/16 1 10 false false

ネットワーク ゾーンをまたいだポッド間の通信:

 ~# kubectl exec -ti test-app-j9ftl -- ping 10.7.168.61 -c 2 PING 10.7.168.61 (10.7.168.61) 56(84) bytes of data. 64 bytes from 10.7.168.61: icmp_seq=1 ttl=63 time=1.06 ms 64 bytes from 10.7.168.61: icmp_seq=2 ttl=63 time=0.515 ms --- 10.7.168.61 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 0.515/0.789/1.063/0.274 ms

07 結論

テスト後: 異なるネットワーク領域にあるポッドは、ポッド IP、clusterIP、nodePort などを介して通信できます。Spiderpool は、クロスネットワーク領域に基づいて IP 割り当て要件を適切に実装できます。


<<:  製造業におけるエッジコンピューティング: 業務の合理化と効率性の向上

>>:  量子コンピューティングの可能性を解き放つ:ゲームを変える技術

推薦する

初期開発から存続までのローカルポータル運営

ウェブサイトの運営は極めて重要な部分であり、ローカル ウェブサイトはオンラインとオフラインの運営を組...

「セグメンテーション」を使用して、製品トラフィックに影響を与える潜在的な要因を見つけます

多くの友人から、データを使ってマーケティング分析をする方法について何か書いてほしいと頼まれました。皆...

企業ウェブサイトのSEOにおけるコアキーワードの選び方

企業にとって、自社のウェブサイトを構築するのは過去の話です。現在、ほとんどの企業は自社のウェブサイト...

UCloudはLingyun Awardを受賞し、「2017年ベストクラウドサービス」に選ばれました

12月27日、中国の企業IT分野で権威のある賞である凌雲賞が2017年の受賞リストを正式に発表した。...

ウェブサイトのランキングを向上させるための一般的な外部リンクプラットフォームの運用戦略の分析

ご存知のとおり、ウェブサイトの運用と最適化の目的は非常に明確です。ウェブサイトの重量を改善し、ウェブ...

専門家がサーバーレスクラウドのコストを分析する方法

サーバーレス クラウドの興味深い点は、大手クラウド コンピューティング ベンダーが提供するサービスで...

プレスリリースはインターネットのティーザースタイルを利用したイベントマーケティングを活用し、Yuan Fangを有名にした。

マイクロブログが普及している時代では、オンラインジョークは宇宙へのロケットよりも速く広がる可能性があ...

今年、インターネット上で安価で優れたアメリカの VPS を推奨し、新規参入者が地雷原をクリアできるように支援します。

この記事は、安価な VPS、安価なアメリカの VPS について知りたい、そして優れたアメリカの VP...

本番環境と開発環境、Kubernetes に関する 4 つのよくある誤解

[編集者注] コンテナと Kubernetes の IT 管理チームが実稼働環境にローカルの変更を展...

SEOプロモーションのための最も人気のあるタイトルの解釈

SEOに携わっている友人は、ウェブサイトを宣伝する方法がたくさんあることを知っています。一般的なSE...

DigitalOceanがホスティングプロバイダー第7位に躍進

DigitalOceanは現在、世界で7番目に大きなホスティング会社です。6月も終わりに近づき、Ne...

個人ウェブマスターの成功体験: 市場を効果的にセグメント化する方法

ウェブマスター、より正確に言えば草の根ウェブマスターとして、彼の背後には優秀なチームも、強力な財政支...

静的ページと動的ページ、検索エンジンはどちらを優先するのでしょうか?

ウェブサイトの最適化に関して言えば、静的ページと動的ページのどちらが優れているかは、多くの最適化担当...

SEO 入門: リンク交換における偽の PR 値を識別する方法

ウェブサイトを構築する際、特に SEO 検索エンジン最適化を行う場合は、リンクの交換は避けられません...