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


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

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

推薦する

GPUクラウドはGIS技術の変革を推進し、測量・地図作成地理情報産業のアップグレードをサポートします。

2018年8月29日から31日まで、「地理情報知能、アップグレード、エンパワーメント」をテーマにした...

Yunyun Searchのユニークなポジショニングは、亀裂の中で生き残るのに役立ちます

12月17日、周鴻毅氏が「熱心すぎる」宣伝を後悔していた頃、12月18日に検索エンジン業界に新たな参...

曖昧な指標はクラウド コンピューティング企業の価値を隠します。投資家は業績よりも株価を重視します。

[[356782]]クラウドコンピューティング企業は、急速な成長と信頼性の高いサブスクリプションベー...

総合型電子商取引と垂直型電子商取引:カテゴリーレベルの垂直型電子商取引は生き残れるか?

総合型電子商取引と垂直型電子商取引:カテゴリーレベルの垂直型電子商取引は生き残れるか?(TechWe...

草の根SEO担当者はBaiduの国際化戦略についてどう考えているのでしょうか?

昨日、JD.comが3.cnドメイン名を取得したとお伝えしました。今朝起きてニュースをチェックしたと...

長編動画の初戦が「始まる」

「イカゲーム」が巻き起こした世界的なサスペンス熱はまだ完全には冷めていない。国内初の無限流映画・テレ...

Baidu製品を使用して業界のニーズを理解する

SEO に精通している人は、Baidu の製品を使用して業界ユーザーのニーズを把握する方法を知ってい...

私たちがその年月で触れてきた指標

ウェブマスターの友人は皆、「インデックスのブラッシング」という概念を聞いたことがあるでしょうし、ウェ...

BoyaとIntelが協力し、Analytics Zoo Cluster Servingをサポートする自動分散型スケーラブル推論プラットフォームを構築

概要データの豊富な固有情報のマイニング、フィッティング機能、データのスケーラビリティなどの利点により...

Baiduウェブマスターツールを使用して降格の問題を迅速に特定し解決する

ウェブサイトの降格は、多くのウェブマスターにとって常に頭痛の種でした。数年前、ウェブサイトが降格され...

エッジコンピューティングはモノのインターネットをより安全にするでしょうか?

エッジベース コンピューティング、つまりクラウド データ センターではなくネットワークのエッジでデー...

どのような Web ページのリダイレクトが不正行為とみなされないのでしょうか?

絶対的に正しいとか、絶対的に間違っているとかいうものは存在せず、この言葉は決して時代遅れになることは...

業界は有料音楽ダウンロードが今後も主流になるとは楽観視していない

ワーナーを含むいくつかの大手国際レコード会社が、今年末か来年初めにKugou、Kuwo、Baidu、...

知っておくべき6つのコンテナの概念

コンテナは企業に多大な価値と数多くのメリットをもたらすため、IT 環境を急速に変化させています。最新...

SEO トラフィックに影響を与える 3 つの要素: インクルージョン + ランキング + クリックスルー率

以前、Xiwei Qiangwei 氏が紹介した記事「検索トラフィックこそが王様、トラフィックこそが...