Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

Kubernetes と Contrail の統合

 

この章では、Kubernetes における’Contrail の役割について詳しく説明します。まず Contrail Ku netes 統合アーキテクチャに関するセクションから始めます。ここでは、NS、ポッド、サービス、受信、ネットワークポリシーなどの Kubernetes オブジェクトが Contrail でどのように処理されるかについて説明します。その後、各オブジェクトの実装について詳しく説明します。

この章では、Contrail オブジェクトを導入することが必要な場合があります。Kubernetes のネットワークとして、CNI の複数のアウトオブラインポッドは’、他の実装と比べてメリット Contrail があります。この章ではそのようなメリットについて説明します。

この章の最後に、Juniper’s cSRX コンテナを使用したサービス連鎖のデモを紹介します。統合’アーキテクチャの導入を始めましょう。

Contrail Kubernetes アーキテクチャ

Witnessing では、第2章の Kubernetes の主要な概念を理解した後、標準の Kubernetes 導入環境に Contrail を追加するメリットがあるでしょうか。

また、 www.juniper.netの製品ページでは、最新のサービスをご紹介しています。 Contrail では、複数の環境 (Openstack、Kubernetes など) および enriches Kuber netes’ネットワークおよびセキュリティ機能に共通の導入を提供し Contrail ています。

複数の環境への導入に関しては、コンテナは、アプリケーションの構築における現在の傾向です (コンテナが VM でホストされるようなネストアプローチについては触れません)。’しかし、すべての人が vm から迅速なコンテナへの移行を期待しているわけではありません。パブリッククラウドで完全にまたは部分的に実行されるワークロードを追加すると、Kubernetes が管理する必要があるのは、ネットワークおよびセキュリティ管理者の misery を見ることができます。

多くの組織の管理者は、各環境に対して個別のオーケストレーション管理マネージャーを担当しています。OpenStack または、コンテナの VM、Kubernetes、または Os 向けの VMware NSX は、AWS console を対象としています。WContrail al-leviates この misery は、あらゆるクラウド、ワークロード、あらゆる導入環境に対して、動的なエンドツーエンドのネットワークポリシーと制御を提供することによって実現されています。

1つのユーザーインターフェイス Contrail から、抽象ワークフローが特定のポリシーに変換され、すべての環境で仮想オーバーレイ接続のオーケストレーションが簡素化されます。これを実現するために、プライベートまたはパブリッククラウドに配置された BMS、VM、コンテナを接続する仮想ネットワークを構築して保護します。

Kubernetes を導入して、OpenStack によってオーケストレーションされた Vm で pod を起動することもできますが、この chap は Kubernetes のみに焦点を当てています。ここで説明されている多くの機能を他の環境に拡張することもできますが、Contrail 標準の Kubernetes 導入にも enriches です。

Kubernetes はネットワークを提供していませんが、ネットワーク実装の基本要件を定めており、すべての CNI (コンテナネットワークインターフェイス) プロバイダによって処理されるようになっています。Juni per Contrail は、CNI プロバイダの1つです。以下を参照してください。詳細については、https://kubernetes.io/docs/concepts/cluster-administra/ネットワーキングをご覧ください。

Kubernetes は、ネットワークの実装に関して明確に定義された要件を満たしています。

  • ノードのポッドは NAT なしですべてのノードのすべてのポッドと通信できます。

  • ノード上のエージェント (システムデーモン、kubelet など) は、そのノード上のすべてのポッドと通信できます。

  • ノードのホストネットワーク内のポッドは、NAT なしにすべてのノードのすべてのポッドと通信できます。

Kubernetes は、クラスターに限定されたいくつかのセキュリティー機能とフラットなネットワーク接続を提供しますが、その上に、Contrail が提供することができます。

  • Segmentations およびマルチテナント用にカスタマイズされた名前空間とサービス isolations

  • 分散型のロードバランシングとファイアウォールにより、一元的なフローとログのインサイトを提供します。

  • 他の環境に拡張できるタグ (オープンスタック、VMWare、BMS、AWS など) を使用した豊富なセキュリティーポリシー

  • サービス連鎖

この章では、これらの機能のいくつか’について説明しますが、まず Contrail アーキテクチャとオブジェクトマッピングについて説明します。

Contrail Kube マネージャー

Contrail の新しいモジュールが追加されました。 contrail-kube-manager、KM として短縮されます。Kuber-netes API サーバーを調査して Kubernetes のリソースを監視し、それらを Contrail コントローラオブジェクトに変換します。Figure 1は、基本的なワークフローを示しています。

Figure 1: Contrail Kubernetes アーキテクチャ
Contrail Kubernetes アーキテクチャ

Kubernetes の Contrail オブジェクトマッピング

これは、当社が把握している通常の Contrail からの変化ではありませ’んが、その背後に多くの問題が発生しています。Kubernetes/Contrail を扱うことは、オブジェクトのマッピングに関するものであることに注意してください。その’Contrail 原因は、複数の環境を管理する単一のインターフェイスであり、各環境に独自の頭字語や用語があるため、そのようなマッピングはプラグインによって実行されるためです。Kubernetes では、 contrail- kube-managerこれが可能です。

Note

Juniper Contrail には、環境/オーケストレータごとに固有のプラグインがあります。詳細について知り、最新のリリース情報を入手するには、 https://www.juniper.net/us/en/products のサービス/sdn/Contrail/という Contrail Juniper を参照してください。

たとえば、Kubernetes の名前空間は、仮想クラスターを作成する場合と同じように、複数のチームまたは proj-ect 間のセグメント化を目的としています。Contrail 同様の概念がprojectという名前になっているため、Kubernetes で名前空間を作成すると、Contrail に同等のプロジェクトが自動的に作成されます。後ほど紹介しますが、Figure 2に示すオブジェクトのリストをよく理解しておくと、アーキテクチャのスタンドを防ぐのに役に立つでしょう。

Figure 2: Contrail Kubernetes オブジェクトマッピング
Contrail Kubernetes オブジェクトマッピング

Contrail 名前空間と分離

第3章の詳細はこちら namespaceまたは NS for Kubernetes では、この章の最初に、Kubernetes と Contrail のオブジェクトマッピングについて説明しました。このセクション’では、名前空間が Contrail 環境でどのように機能するか、さらにはどのように拡張する Contrail かについて説明します。

を導入すると、1つの比喩をご紹介します。 namespace概念は OpenStack project、または tenant。それがまさに Contrail の考え方であるということです。新しい namespaceオブジェクトが作成され、 contrail-kube-manager(KM) は、オブジェクト作成イベントに関する tice を取得し、それに対応するプロジェクトを Contrail に作成します。

Contrail 内の複数の Kubernetes クラスターを区別するために、Kubernetes のクラスター名が Kubernetes 名前空間またはプロジェクト名に追加されます。デフォルトの Kubernetes クラスター名は k8s。そのため、Kubernetes の名前空間を作成すると ns-user-1k8s-ns-user-1Contrail の GUI を示すFigure 3のように Contrail にプロジェクトを作成します。

Figure 3: Contrail コマンド: 」
Contrail コマンド: 」

Kubernetes cluster name設定は可能ですが、導入プロセス時にのみ実行されます。構成し’ていない場合 k8sがデフォルトになります。クラスターが作成されたら、名前を変更することはできません。を表示し cluster nameするには、 contrail-kube-manager(KM) docker、その設定ファイルを確認してください。

KM docker コンテナの場所を確認するには、次のようにします。

KM コンテナーにログインするには、次のようにします。

を検索するには cluster_nameボタン

Note

このガイドの残りの部分では、これらの用語をすべて参照しています。 namespace, NS, tenant,および projectインターチェンジとしてのことではありません。

非分離型名前空間

Kubernetes の基本的なネットワーク要件の1つは、フラット型/NAT レスネットワーク–を対象としており、すべての pod が任意–の名前空間の任意の pod と通信できること、CNI のすべてのプロバイダがそのことを保証する必要があることを認識しておく必要があります。そのため、Kuber では、デフォルトですべての名前空間が分離されていません

Note

「分離」と「非分離」という用語は、(Contrail) のネットワークのみのコンテキストで機能します。

k8s-default-pod-network and k8s-default-service-network

非分離型のすべての名前空間にネットワークを提供するには、共通の VRF (仮想ルーティングおよび転送) テーブルまたはルーティングインスタンスが必要です。Contrail Kubernetes 環境では、pod とサービスのそれぞれについて、k8s’のデフォルト名前空間で2つのデフォルト仮想 net-works が事前設定されています。同様に、それぞれに対応する仮想ネットワークと同じ名前を持つ2つの VRF テーブルがあります。

2つの仮想ネットワーク/VRF テーブルの名前は、次のような形式になっています。

<k8s-cluster-name>-<namespace name>-[pod|service]-network

既定の名前空間にデフォルトのクラスター名を使用するには、 k8s、2つの仮想ネットワーク/VRF テーブル名は以下のとおりです。

  • k8s-default-pod-network: デフォルトのサブネットを使用した、pod 仮想ネットワーク/VRF テーブル 10.32.0.0/12

  • k8s-default-service-network: デフォルトのサブネットを持つサービス仮想ネットワーク/VRF 表 10.96.0.0/12

Note

ポッドまたはサービスのデフォルトサブネットは設定可能です。

この2つのデフォルトの仮想ネットワークは、非分離型のすべての名前空間で共有されることを理解しておくことが重要です。つまり、暗黙的に作成した非分離型名前空間のすべてに対して使用できるようになります。その’理由は、すべての非分離型名前空間 (デフォルトの名前空間を含む) からのポッドが互いに通信できるからです。

一方で、作成した仮想ネットワークは他の仮想ネットワークと分離されます。これは、同一または異なる名前空間が小さいという点を考慮しています。2つの異なる仮想ネットワークのポッド間の通信には Contrail ネットワークポリシーが必要です。

Note

その後、Kubernetes サービスについてお読みになったときに、サービス仮想ネットワーク/VRF テーブル宛てのパケットが、ポッドバーチャルネットワーク/VRF テーブルのバックエンドのポッドに到達できる理由について疑問に思うかもしれません。ここでも、優れたニュースは Contrail ネットワークポリシーによるものです。デフォルトでは、サービスとポッドネットワークの間で Contrail ネットワークポリシーが有効になっています。これにより、サービス仮想ネットワーク/VRF テーブルに着信するパケットをポッドに到達させることができます。またその逆も可能です。

孤立した名前空間

対照的に、分離型名前空間には独自のデフォルトポッドとサービスネットワークがあり、したがって、孤立した名前空間ごとに2つの新しい VRF テーブルも作成されます。同一のフラットサブネット 10.32.0.0/12および 10.96.0.0/12分離された名前空間のポッドとサービスのネットワークで共有します。しかし、ネットは異なる VRF テーブルとして機能しているため、デフォルトでは別の名前空間と分離されています。独立した名前空間で起動されたポッドは、同じ名前空間のサービスとポッドにのみ通信できます。その他の設定 (ポリシーなど) は、pod が現在の名前空間の外部にあるネットワークにアクセスできるようにするために必要です。

この概念を説明するため’に、例を使用してみましょう。次の3つの名前空間があるとします。、 default名前空間と2つのユーザー名前空間: ns-non-isolatedおよび ns-isolated。各名前空間では、1つのユーザー仮想ネットワークを作成できます。 vn-left-1。Contrail では、次の仮想ネットワーク/VRF テーブルを作成します。

  • default-domain:k8s-default:k8s-default-pod-network

  • default-domain:k8s-default:k8s-default-service-network

  • default-domain:k8s-default:k8s-vn-left-1-pod-network

  • default-domain:k8s-ns-non-isolated:k8s-vn-left-1-pod-network

  • default-domain:k8s-ns-isolated:k8s-ns-isolated-pod-network

  • default-domain:k8s-ns-isolated:k8s-ns-isolated-service-network

  • default-domain:k8s-ns-isolated:k8s-vn-left-1-pod-network

Note

上記の名前は FQDN 形式で記載されています。Contrail では、domain はトップレベルのオブジェクトであり、その後に project/テナントが続き、その後、仮想ネットワークが続きます。

Figure 4 expertly はこれをすべて示しています。

Figure 4: NS および仮想ネットワーク
NS および仮想ネットワーク

次に、YAML ファイルで孤立した名前空間を作成します。

そして、次のような NS を生み出します。

メタデータの下にある注釈は、標準 (非分離) k8s 名前空間を比較する追加の方法です。True の値は、これが孤立した名前空間であることを示します。

定義のこの部分が Juniper’の拡張であることがわかります。こちらの contrail-kube-manager (KM)名前空間を読み取ります。 metadatakube から取得した情報を解析します。 annotationsそのオブジェクトがあることを確認します。 isolationフラグが true に設定されています。その後、分離された名前空間に対してデフォルトの名前空間ルーティングインスタンスを使用する代わりに、対応するルーティングインスタンス (pod 用とサービス用に1つ) でテナントを作成します。Damentally は、分離を実装する方法を示しています。

以下のセクションでは、ルーティングの分離が機能していることを確認します。

NS での接続のポッド

非分離型名前空間と孤立した名前空間を作成します。

名前空間とデフォルトの名前空間の両方で、web サーバポッドを起動するための配備を作成します。

3つの名前空間のすべてのポッド間で Ping を実行します。

このテスト結果は、非分離型の2つの名前空間 (名前空間 ns-non-isolatedおよび default(この場合) は機能しますが、非分離型名前空間からのトラフィックは可能です (defaultns) は、孤立した名前空間への到達を通過しません。同じ孤立した名前空間内のトラフィックはどうでしょうか。

の力を持つ deploymentすぐにテストできます。孤立した名前空間で ns-isolated、導入の規模を拡張することで、1つ目のポッドを複製します。 replicas=22つのポッド間で ping を実行します。

Ping パケットはすぐに通過します。テスト結果を要約するには、次のようにします。

  • トラフィックは非分離型名前空間の間で分離されていません。

  • 孤立した名前空間とクラスター内の他のすべてのテナントの間でトラフィックが分離されています。

  • トラフィックは同一の名前空間で分離されていません。

Note

Kubernetes のネットワークポリシーを使用して、またはセキュリティグループによって、ポッドレベルの分離を実現することができます。 Contrail では、この章の後半で説明します。

Contrail Floating IP

同一または異なる名前空間のポッド間で通信を議論し、テストしてき’ましたが、これまでは同じクラスター内に存在しています。クラスター外のデバイスとの通信についてはどうでしょうか。

従来の (OpenStack) Contrail 環境では、オーバーレイエンティティ (一般的には VM) でインターネットにアクセスするためのさまざまな方法があることをすでに知っているかもしれません。最も頻繁に実行される3つの方法は次のとおりです。

  • フローティング IP

  • Fabric SNAT

  • 論理ルーター

Kubernetes の推奨ソリューションでは、 serviceおよび Ingressオブジェクトについて’は第3章でご確認いただけます。Contrail Kubernetes 環境では、サービスとインプリメンテーションで floating IP を使用して、’それらをクラスターの外側に公開しています。この章では、この2つの各オブジェクトについて説明します。しかし、まず、’Kubernetes を使用して、floating IP ベースを確認し、それがどのように機能するかを見てみましょう。

Note

こちらの fabric SNATおよび logical routerオーバーレイワークロード (VM とポッド) がインターネットにアクセスするために使用しますが、逆方向からの通信を初期化することはできません。しかし floatingIP は、受信トラフィック、送信–トラフィック、またはその両方をサポートするように構成できるように、双方向から初期化されたトラフィックをサポートし、デフォルトは双方向です。本書では、 floatingIP. ファブリック SNAT および論理ルーターの詳細については、Contrail マニュアルを参照してください。https://www.juniper.net/ documentation/en_US/contrail5.0/information-products/pathway-pages/contrail-feature-guide-pwp.html.

Floating IP および Floating IP プール

こちらの floatingFIP は、非常に初期のリリース以降にサポートされてい Contrail た従来の概念です。基本的には’、VM IP (通常はプライベート ip アドレス) をパブリック ip (このコンテキストでは floating ip) にマッピングして、クラスター外から到達できるようにするのが、openstack の概念です。内部的には、1対1のマッピングが NAT によって実装されています。VRouter は、クラスター外から floating IP に送信されたパケットを受信するたびに、それを VM’のプライベート ip に変換し、パケットを vm に転送します。Larly では、逆方向への変換が行われます。最終的には、VM とインターネットホストの両方が相互に通信できるようになり、どちらもコミュニケーションを開始できるようになります。

Note

VRouter は、各コンピューティングノードにワークロードトラフィックを処理する Contrail 転送プレーンです。

Figure 5は、floating IP の基本的なワークフローを示しています。

Figure 5: Floating IP ワークフロー
Floating IP ワークフロー

ここでは、フローティング IP に関して以下の点に注目しています。

  • フローティング IP は VM’s に関連付けられています port、VMI (バーチャルマシンインターフェイス) があります。

  • 浮動 IP が割り当てられているのは FIP pool

  • 仮想ネットワークに基づいて、floating IP プールが作成されます (FIP-VN)。

  • FIP-VN は、クラスター外で使用できるようになります。 route-target (RT)ゲートウェイルーター’s VRF テーブルの属性。

  • また、ゲートウェイルーターは、RT 内のルートインポートポリシーと一致することを確認すると、そのルートを VRF テーブルに読み込みます。VRF のテーブルに接続されたすべてのリモートクライアントは、フローティング IP と通信できます。

Floating IP の概念と役割については、Contrail Kubernetes 環境に新たなものはありません。しかし、Kubernetes では浮動 IP の使用が拡張されています。 serviceおよび ingressオブジェクトの実装、Kubernetes へのアクセスにおける重要な役割を果たしています。 serviceおよび ingress公開. 詳細については、この章の後のセクションを確認してください。

FIP プールの作成

次’の3段階のプロセスで floating IP プールを作成してみましょう。

  1. パブリック浮動 IP-VN を作成します。

  2. 仮想ネットワークの RT (VRF) を設定し、ゲートウェイルーター’s のテーブルに通知してインポートできます。

  3. パブリックな floating IP 仮想ネットワークに基づいて、floating IP プールを作成します。

繰り返しになりますが、ここでは何も新しいものではありません。Kubernetes を使用せずに、他の Contrail 環境でも同じ手順を実行する必要があります。しかし、これまで’のセクションで学習したように、Contrail Kubernetes による IP 仮想ネットワークの統合を Kubernetes スタイルで作成できるようになりました。

Vn という名前のパブリックフローティング IP 仮想ネットワークを作成します。デフォルトは

ここで、ルーティングターゲットを設定します。

インターネットからゲートウェイルーターを介して floating IP にアクセスできるようにする必要がある’場合は、ゲートウェイルーター’の VRF テーブルにインポートする仮想ネットワークプレフィックスのルートターゲットを設定する必要があります (Figure 6を参照)。このステップは、インターネットへのアクセスが必要な場合に必要です。

RT を設定するための UI ナビゲーションパスは、以下のとおりです。Contrail コマンド > メインメニュー > オーバーレイ > 仮想ネットワーク > k8s-vn-ns-既定のポッド-> ルーティング、ブリッジ、ポリシーを編集します。

Figure 6: Contrail コマンド: RT の設定
Contrail コマンド:
RT の設定

では’、パブリックバーチャルネットワークに基づいて、floating IP プールを作成してみましょう。

これは最後のステップです。Contrail コマンド UI から、パブリックな仮想ネットワークに基づいて、floating IP プールを作成します。Figure 7に示すこの設定の UI ナビゲーションパスは次のとおりです。Contrail コマンド > メインメニュー > オーバーレイ > フローティング IP > 作成。

Tip

また、Contrail UI では、virtual network の詳細オプションで外部フラグを設定して、 publicという名前の floating IP プールを自動的に作成できます。

Figure 7: Contrail コマンド: Floating IP プールを作成します。
Contrail
コマンド: Floating IP プールを作成します。

Floating IP プールスコープ

Contrail Kubernetes 環境でフローティング IP プールを参照するには、さまざまな方法がありますが、それに応じてプールの範囲も異なります。降順 pri では、次の3つのレベルを ority できます。

  • オブジェクト固有

  • 名前空間レベル

  • グローバルレベル

オブジェクト固有

これは最も限定的なスコープのレベルです。オブジェクト専用のフローティング IP プール自体は、指定したオブジェクトにのみバインドされますが、同じ名前空間やクラスター内の他のオブジェクトには影響を与えません。たとえば、サービスオブジェクトを指定できます。 webfloating ip プールから floating IP を取得するには pool1、サービスオブジェクト dns別の floating IP プールからの IP アドレスを取得するには pool2付記. これにより、オブジェクト–のためにフローティング IP がどこから割り当てられるかを最もきめ細かく制御できます。コストとは、各オブジェクトの yaml ファイルに明示的に指定する必要があるということです。

名前空間レベル

マルチテナント環境では、各名前空間がテナントに関連付けられ、各テナントは専用の浮動 IP プールを持ちます。その場合は、NS レベルでフローティング IP プールを定義するオプションを用意して、その名前空間で作成されたすべてのオブジェクトがそのプールから floating IP の割り当てを得られるようにしておくことをお勧めします。名前空間レベルプールが定義されている場合 (たとえば、 pool-ns-default)、各オブジェクト’の s yaml ファイルでフローティング IP プール名を指定する必要はありません。別のプール名を指定することもできます。たとえば、 my-webservice-poolオブジェクトで webservice。その場合、オブジェクトの webservice は IP アドレスから my-webservice-pool名前空間レベルプールではなく pool-ns-defaultこれにより、前者の方がより具体的になります。

グローバルレベル

グローバルレベルプールの範囲は、クラスター全体を対象にしています。任意の名前空間のオブジェクトは、glob 浮動小数点 IP プールを使用できます。

3つの方法すべてを組み合わせて、その組み合わせの柔軟性を活用できます。’具体的な例を示します。

  • グローバルプールを定義する pool-global-defaultため、名前空間レベルまたは ob-リソースレベルのプールが定義されていない名前空間内のオブジェクトは、このプールから floating IP を取得します。

  • Ns の dev、floating IP プールを定義します。 pool-devため、ns で作成されたすべてのオブジェクトが devデフォルトでフローティング IP を取得する pool-dev

  • Ns の sales、floating IP プールを定義します。 pool-salesため、ns で作成されたすべてのオブジェクトが salesデフォルトでフローティング IP を取得する pool-sales

  • Ns の test-onlyは、名前空間レベルのプールを定義せに、デフォルトのオブジェクトが、そのファイル内で作成されたその他の IP アドレスから pool-global-default

  • サービス dev-webservicens dev には浮動 IP が必要です pool-sales代わりに pool-devを指定する pool- salesチェックイン dev-webserviceオブジェクト YAML ファイルは、この目標を達成します。

Note

経験則–では、最も具体的なスコープが常に適用されることを念頭に置いてください。

オブジェクトのフローティング IP プール

まず’、オブジェクト固有の floating IP プールを見てみましょう。

この例では、サービス service-web-lb-pool-public-1プールから浮動 IP を取得します。 pool-public-1、仮想ネットワークに基づいて作成されます。 vn-public-1現在のプロジェクトの下 k8s-ns-user-1。対応する Kubernetes 名前空間は ns-user-1。オブジェクトレベルの浮動 IP プールは、この特定のオブジェクトにのみ割り当てられるため、この方法では、新しいオブジェクトごとにフローティング IP プールを明示的に割り当てる必要があります。

NS Floating IP プール

次の浮動 IP プールスコープは、名前空間レベルにあります。それぞれの名前空間は、独自の浮動 IP プールを定義できます。Kubernetes annotations オブジェクトを使用してサブネットを仮想ネットワークに提供するのと同じように、floating IP プールの指定にも使用されます。YAML ファイルは次のようになります。

ここは ns-user-1名前空間レベルの floating IP プールが指定されます。 pool-ns-default、対応する仮想ネットワークが vn-ns-default。すると、 ns-user-1この YAML ファイルを使用して作成された場合、floating IP を必要とする新しいサービスでは、YAML ファイルでオブジェクト固有のプール名を指定せずに作成しなければ、このプールからフローティング IP が割り当てられます。実際には、ほとんどの名前空間 (特に分離された名前空間) には独自の名前空間のデフォルトプールが必要になるため、このような設定がフィールドに頻繁に見られるようになります。

グローバルな浮動 IP プール

グローバルレベルの浮動 IP プールを指定するには、完全修飾プール名を付与する必要があります (domain > project > net- work > name) で contrail-kube-manager (KM)Docker’s 設定ファイル (/etc/contrail/contrail-kubernetes.conf)。このファイルは、その ENV パラメーターに基づいた起動中に Docker によって自動的に生成されます。 /etc/contrail/common_kubemanager env ファイルをマスターノードで実行します。

ご覧のように、この .envファイルには、セットアップに関する重要な環境パラメーターが含まれています。を指定するには global FIP pool、以下の行を追加します。

KUBERNETES_PUBLIC_FIP_POOL={'domain': 'default-domain','name': 'pool-global-default','network': 'vn-global-default','project': 'k8s-ns-user-1'}

次のようになります。グローバルな浮動 IP プールが呼び出されます。 pool-global-default仮想ネットワークに基づいて定義されています。 vn- global-defaultプロジェクトの下 k8s-ns-user-1。これは、対応する Kubernetes 名前空間が ns-user-1

この設定が完了したので、 contrail-kube-managerDocker コンテナを使用して変更を有効にすることができます。基本的には、それを破棄してからバックアップする必要があります。

これで、グローバルな浮動 IP プールがクラスターに指定されました。

Note

3つのスコープすべてにおいて、浮動 IP は自動的に割り当てられ、サービスおよび受信オブジェクトにのみ関連付けされるようになっています。フローティング IP が pod に関連付けられている必要がある場合は、手動で実行する必要があります。’これについては、次のセクションで説明します。

ポッドのフローティング IP

Floating ip プールが作成されて利用可能になると、浮動 ip pool を必要とするポッドに対応するために、floating ip プールからの割り当てを行うことができます。このためには、浮動 ip プールから VMI (VM、または pod) に floating ip を関連付けることで、Figure 8と4.9 のように Contrail UI を使用して floating vmi にフローティング ip を関連付けることができFigure 9

Figure 8: 浮動 IP の作成
浮動 IP の作成
Figure 9: ポッドインターフェイスでの浮動 IP の関連付け
ポッドインターフェイスでの浮動 IP の関連付け
Note

Floating ip プールが、浮動 IP が作成されるプロジェクトに対して共有されていることを確認します。

浮動 IP のアドバタイズ

浮動 IP が pod インターフェイスに関連付けられると、その非管理 BGP のピアに通知されます。これは、typ ゲートウェイルーターとして機能します。次の図、 Figure 10Figure 11Figure 12は、BGP ピアを追加および編集する方法を示しています。

Figure 10: Contrail コマンド: メインメニューの > インフラストラクチャを選択します。クラスタ > の高度なオプション
Contrail コマンド: メインメニューの > インフラストラクチャを選択します。クラスタ > の高度なオプション
Figure 11: Contrail コマンド: BGP ルーター > Create の選択
Contrail
コマンド: BGP ルーター > Create の選択
Figure 12: BGP ピアパラメーターの編集
BGP ピアパラメーターの編集

BGP ピア情報をすべて入力し、’コントローラーを関連付けることを忘れないでください (Figure 13を参照)。

Figure 13: ピアをコントローラに関連付ける
ピアをコントローラに関連付ける

のドロップダウンから peer下で Associated Peers追加しようとしているこの新しい BGP ルーターから、ピアリングするコントローラーを選択します。] save完了したら、ルータータイプがルーターの新しい BGP ピアがポップアップで表示されます。

Figure 14: BGP ルーターリストの新しい BGP ルーター
BGP
ルーターリストの新しい BGP ルーター

’ここで、タイプルーターとしてピア BGP ルーターを追加しました。タイプコントロールノードを使用しているローカル BGP スピーカーでは、[編集] ボタンをクリックしてパラメーターをダブルチェックするだけで済みます。このテストでは Contrail コントローラとゲートウェイルーター間で MP-IBGP neighborship を構築して、ASN および Address 族の両方のフィールドが一致していることを確認してください。両方の端については、Figure 15を参照してください。

Figure 15: Contrail コントローラ BGP のパラメーター: ASN
Contrail
コントローラ BGP のパラメーター: ASN

これで、ゲートウェイルーターの neighborship の状態を BGP 確認できます。

Neighborship を確立すると BGP、2つのスピーカー間でルートが交換されます。これ’は、Kubernetes オブジェクトに割り当てられている floating IP がマスターノード (10.169.25.19) によってアドバタイズされ、ゲートウェイルーターでは学習していることを確認すると、次のようになります。

こちらの detail同じコマンドのバージョンにより、次のようなことがわかります。floating IP ルートは Contrail の Con ローラーから反映されていますが、 Protocol next hop計算ノードである (10.169.25.20) は、フローティング IP が compute ノードに割り当てられていることを示します。その計算ノードで現在実行されている1つのエンティティは、フローティング IP を所有しています。

ダイナミックソフト GRE 構成により、ゲートウェイルーターはソフト GRE トンネルインターフェイスを自動的に作成します。

こちらの IP-HeaderGRE 外部 IP ヘッダーを示すため、BGP のローカルアドレスを持つ現在のゲートウェイルーターからトンネルが構築されます。 192.168.0.204をリモートノード 10.169.25.20(この場合’は、Contrail の計算ノードの1つです)。Figure 16は、浮動 IP アドバタイズメントプロセスを示しています。

Figure 16: Floating IP アドバタイズ
Floating IP アドバタイズ

サマリー

この章では、以下のオブジェクトを作成しました。

  • Ecn ns-user-1

  • FIP VN: vn-ns-デフォルト

  • FIP pool: pool-ns-デフォルト

こちらの ns-user-1ns プロジェクトは、名前空間レベルのプールを参照しています。 pool-ns-defaultこれは手動で作成されるもので、すべてのテストオブジェクトが保持されます。名前空間レベルのプールは、仮想ネットワークに基づいています。 vn-ns-default101.101.101/24 サブネットではありません。名前空間 ns で作成されたオブジェクトの floating IP は、このサブネットから割り当てられます。

Note

名前空間および浮動 virtu-al ネットワークに対して事前に設定された YAML ファイルを準備したら、以下のオブジェクトを作成できます。

浮動 IP プールは Contrail’s UI で個別に作成する必要があります。詳細については、 Contrail の浮動 IP アドレスを参照してください。

これらのオブジェクトを使用すると、floating IP プールに関連付けられた名前空間が存在することになります。この名前空間の中から、サービスなど、その他の Kubernetes オブジェクトの作成と研究に進むことができます。

Note

本書に記載されているサービスと受信のデモは、この ns-user-1 名前空間の下で作成します。