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


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

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

推薦する

2日間で3つのキーワードをBaiduのホームページに表示させた体験談

却下理由: 記事が読みにくいみなさんこんにちは。私はハルビン仮想および現実ウェブサイト設計です。ここ...

朗報:iwstack が米国ダラスにデータセンターを開設

Prometeus 傘下の VPS クラウドである iwstack が、ついに米国ダラスのデータセン...

高級品ウェブサイトが停止、購買代理店の混乱がグループ購入の失敗を繰り返す可能性

中国の高級品オンラインショッピングの巨大な市場需要は、少しの混乱で簡単に変わることはないだろう。現在...

品質を重視したIoTデバイスがエッジコンピューティングを推進

高品質なコンテンツに対する期待が高まっており、モノのインターネットの成長により、エンドユーザーはエッ...

Weiboチャンネルの運用をすぐに始める方法を教える5つのステップ

インターネット全体のゴシップの中心地として、 Weiboはますます注目を集めています。データによると...

SEO 担当者は外部リンクをどのように見るべきでしょうか?

SEO の継続的な発展に伴い、競争はますます激しくなっています。今後の SEO は、テクノロジー、コ...

360 Searchは最近SiteLink機能を導入しました

Baidu は 11 月に SiteLink 機能を開始して以来、数日以内に表示をキャンセルしました...

現在のウェブサイトの検索エンジン最適化のための高品質な記事を作成するスキルの解釈

SEOウェブサイト最適化である限り、高品質のオリジナル記事が絶対に不可欠であることはわかっています。...

SEO初心者が知っておくべき秘密

初心者の SEO が知っておくべき秘密: 新しいウェブマスターが初めてウェブサイトを構築し、SEO ...

raksmart: ロサンゼルス本土最適化ラインの「クラウドサーバー」の簡単な評価、中国電信は双方向cn2で、コストパフォーマンスが高い

Raksmart はクラウド サーバー事業に注力しており、従来の VPS 事業を放棄する可能性があり...

ソフトコンテンツマーケティングがなぜ効果的なブランドプロモーション効果を発揮できるのか?

今日のインターネットは、10 年以上前のように、単にテキストや画像を読む場所ではなく、新聞、テレビ、...

信頼できるアメリカのcn2gia VPS業者数社から推奨されており、帯域幅が大きく、評判が良く、コストパフォーマンスが高い

米国のCN2 GIA(AS4809)は、中国と米国が民間レベルで提供した最も初期かつ最速のネットワー...

Baiduは非常に謙虚で、個々のウェブマスターからPVを増やす方法を学んでいます。

Baidu News に小さな変更を加えただけで、誰にも気づかれずに PV が 2 倍になりました。...

さまざまな分散ロックの欠点を比較し、Redis分散ロックを実装するための鍵をつかむ

過去 2 年間で、マイクロサービスはますます普及し、分散環境に導入されるアプリケーションも増えていま...