クラウドネイティブスパイダープール: ネットワークリージョン全体の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 割り当て要件を適切に実装できます。


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

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

推薦する

Apple がゲームプレイを継続的にアップデートしていく中で、ASO はどのような機会と課題に直面するのでしょうか?

現在、App Store のアプリ数は 180 万に達しており、数万のアプリの中から目立つことはもは...

Docker コンテナをバックグラウンドで実行する方法 (デタッチ モード)

[51CTO.com クイック翻訳] Docker では、イメージ開発者は、フォアグラウンドで実行さ...

extravm: 月額 3.5 ドル、KVM シリーズ、シンガポールの無制限の高セキュリティ VPS、OVH データ センター

OVHのシンガポールデータセンターでVPSを購入したいという方もいらっしゃいますが、残念ながら公式サ...

Baidu のハイパーリンク不正行為の詳細な分析: 推奨の意味を持たないリンク

今日、Taobaoを閲覧して、パイプライン遠心ポンプのウェブサイト用の外部リンク配信サービスプロバイ...

Baidu 7.21を合理的に扱い、サイト内の問題を分析する

7月21日、4つのウェブサイトのホームページのスナップショットの1つが消えていることに気付きました。...

ウェブマスターがBaidu K-stationを心配する理由の分析

K-station事件を経験した後、ほとんどのウェブマスターはBaiduの自然なランキングに疑問を抱...

ウェブサイト運営にあたっての準備はどのようなものがありますか?

ますます多くのウェブマスターの友人が、現在、ウェブサイト、特に一部の企業ウェブサイトや個人の草の根ウ...

馬化騰の美しい「悲しみ」はどうやって2億人のWeChatユーザーにお金を使うようにさせるのか?

ほとんどのインターネット企業にとって、激しい市場競争に勝ち抜きたい場合、「トラフィック」は企業の成否...

最も安全な電子メールサービスはどれですか?

電子メールは、最も基本的なネットワーク通信サービスの 1 つです。その重要性は疑う余地がありません。...

gfrack: 春節プロモーション、ロサンゼルス VPS 年間支払い 99 元 (1G 帯域幅)、香港 VPS 年間支払い 199 元 (20M 帯域幅)

gfrack は春節の大きなプロモーションを開始しました。米国ロサンゼルスの QN データセンターの...

クラウド コンピューティングの大手企業が機密コンピューティングを計画しているのはなぜでしょうか?

ご存知のとおり、データ セキュリティの 3 つの柱は、保存中のデータ、転送中のデータ、使用中のデータ...

百度へ

このタイトルを思いついたとき、私はまだウェブサイトの宣伝に取り組んでいました。しかし、時代は変わり、...

Docker の負荷分散とサービス検出の詳細な説明

[[277172]] Docker は 2013 年初頭に誕生したオープン ソース プロジェクトです...

NEC中国グループの人事システムがSaaSクラウドサービスの導入をリード

NEC(中国)は、中国国内の従業員の人事情報をより適切に管理し、従業員の総合的な資質を向上させるとと...