Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

分離された名前空間を作成する

概要 このトピックでは、Cloud-Native Contrail® Networking で分離された名前空間を作成する方法について説明します™。ジュニパーネットワークスは、Kubernetes オーケストレーション環境で Contrail Networking リリース 22.1 以降を使用して、分離された名前空間をサポートします。

名前空間の概要

メモ:

このドキュメントでは、Contrail ネットワークのコンテキストでのみ、「分離」と「非分離」という用語を使用します。

分離されていない名前空間

名前空間、または分離されていない名前空間は、1 つのクラスター内のリソース グループを分離するメカニズムを提供します。デフォルトでは、名前空間は分離されません。

分離されていない名前空間は、多くのユーザーが複数のチームやプロジェクトに広がる環境で使用することを目的としています。各チームは、分離されていない名前空間を使用して、お互いの作業に影響を与えることなく、独自の仮想クラスターに存在することができます。Kubernetesが提供するデフォルトの名前空間ですべてのリソースを作成したとします。複数の導入を使用する複雑なアプリケーションがある場合、デフォルトの名前空間を維持するのは難しい場合があります。この導入を管理する簡単な方法は、すべてのリソースをクラスタ内の異なる名前空間にグループ化することです。たとえば、クラスターには、データベース名前空間や監視データベースなど、別々の名前空間を含めることができます。リソースの名前は名前空間内で一意である必要がありますが、名前空間間では一意である必要はありません。

分離されていない名前空間のポッドは、以下のネットワーク動作を示します。

  • 分離されていない名前空間のポッドは、NATを使用せずにクラスター内の他のポッドと通信できます。

  • 分離されていない名前空間のポッドとサービスは、 default-podnetworkdefault-servicenetworkを共有します。

分離された名前空間

名前空間を分離することで、プライベートにしたい顧客固有のアプリケーションを実行できます。ネットワークポリシーを明示的に設定することなく、ポッドを他のポッドから分離する独立した名前空間を作成できます。

分離された名前空間は、分離されていない名前空間と似ていますが、分離された各名前空間には独自のポッドネットワークとサービスネットワークがあることを除きます。つまり、分離されたネームスペース内のポッドは、他の分離または非分離された名前空間のポッドやサービスに到達できません。

分離された名前空間のポッドは、同じ名前空間のポッドとのみ通信できます。唯一の例外は、分離されたネームスペース内のポッドが、コアDNSなどのKubernetesサービスにアクセスする必要がある場合です。この場合、ポッドはクラスターを使用してサービスにアクセスします default-servicenetwork

分離された名前空間のポッドは、以下のネットワーク動作を示します。

  • 分離された名前空間のポッドは、同じ名前空間のポッドとのみ通信できます。

  • 分離された名前空間のポッドは、分離されていない名前空間のサービスに到達できます。

  • 分離されたネームスペース内のポッドのIPアドレスとサービスIPアドレスは、クラスタのポッドおよびサービスサブネットと同じサブネットから割り当てられます。

  • 分離されたネームスペース内のポッドは、IPファブリック転送とファブリックソースNATを使用して、アンダーレイネットワーク、またはIPファブリックネットワークにアクセスできます。

メモ:分離されていない名前空間を分離された名前空間に含めることはできません。また、その逆も同様です。

例:分離された名前空間の設定

この構成例では、Cloud-Native Contrail Networking で分離された名前空間の構成を示しています。

図 1:分離された名前空間の設定 Isolated Namespace Configuration

この分離された名前空間の設定では、

  • Pod-1(非隔離-1)は、ユーザーが作成した非分離名前空間にあります。

  • Pod-2(kube-system)とPod-3(contrail)は、コントローラーによって作成された非分離された名前空間にあります。

  • Pod-4(isolated-1)とPod-5(isolated-2)は、ユーザーが作成した分離された名前空間にあります。

  • Pod-1、Pod-2、Pod-3のインターフェイスは、クラスタの default-podnetwork および default-servicenetworkから作成されます。

  • Pod-4およびPod-5のインターフェイスは、 および default-servicenetwork 独自の分離された名前空間で作成default-podnetworkされます。Pod-4インターフェイスとPod-5インターフェイスの両方が、クラスタdefault-podnetworkおよび とdefault-servicenetwork同じサブネットを共有します。

  • 分離された名前空間のポッドは、分離されていない名前空間のポッドと通信できません。この例では、分離された名前空間にあるPod-4およびPod-5は、非分離された名前空間のPod-1、Pod-2、Pod-3と通信できません。

  • 分離されたネームスペース内のポッド(Pod-4、ポッド5)は、クラスタ default-servicenetworkを介してあらゆるサービスにアクセスできます。

  • すべてのネームスペース(非分離および分離された)のポッドは、クラスター ip-fabric-networkを介してファブリックに接続できます。

ノート

  • 分離された名前空間は、ポッドのデフォルトインターフェイスにのみ影響します。これは、分離された名前空間のポッドのデフォルトインターフェイスが、分離された名前空間の上に default-podnetwork 作成されるためです。ただし、ユーザー定義 VirtualNetworks のインターフェイスは、分離された名前空間と分離されていない名前空間の両方で同じように動作します。

  • 分離された名前空間にネットワークポリシーを作成して、ポッドの分離を微調整できます。ネットワークポリシーは、分離された名前空間と分離されていない名前空間の両方で同じように動作します。

  • 2 つ以上の分離された名前空間は、(VNR)を VirtualNetworkRouter 介して相互接続できます。 VirtualNetworkRouter の概要を参照してください。

ここでは、2 つの分離された名前空間(ns-isolated-1 およびns-isolated-2)の相互接続default-podnetworksに使用される VNR 設定の例を示します。この設定では、 は VirtualNetworkRouter ns-isolated-1 および ns-isolated-2 に接続するため、これらの分離された名前空間のポッドは相互に通信できます。

分離された名前空間のオブジェクト

この表では、分離された名前空間を作成するときにコントローラーが作成する名前空間オブジェクト(API リソース)について説明します。

表 1: 分離された名前空間オブジェクト
名前空間の分離されたオブジェクト の説明
default-podnetwork (VirtualNetwork) クラスターのデフォルトネットワークではなく、分離された名前空間内のポッドのデフォルトインターフェイスが作成 default-podnetworkされます。
default-servicenetwork (VirtualNetwork) 分離された名前空間にあるサービスのクラスター IP は、クラスターの ではなく、この default-servicenetworkで作成されます default-servicenetwork
IsolatedNamespacePodServiceNetwork (VirtualNetworkRouter) このオブジェクトは、分離された名前空間 default-podnetwork と の間の接続を確立します default-servicenetwork
IsolatedNamespaceIPFabricNetwork (VirtualNetworkRouter) このオブジェクトは、分離された名前空間とdefault-servicenetworkクラスターip-fabricnetworkdefault-podnetwork .
IsolatedNamespacePodToDefaultService (VirtualNetworkRouter) このオブジェクトは、分離された名前空間とクラスターの default-podnetwork 間の接続を確立します default-servicenetwork

分離された名前空間を作成する

分離された名前空間を作成するには、次の手順に従います。

  1. と呼ばれる ns-isolated.ymlYAML ファイルを作成します。
  2. 名前空間のメタデータにラベルcore.juniper.net/isolated-namespaceを追加し、変数を に設定します"true"
  3. コマンドをkubectl apply発行して、設定を適用します。
  4. 設定を確認するには、 コマンドをkubectl get ns ns-isolated -o yaml発行します。

    成功!分離された名前空間を作成しました。

オプションの設定:IPファブリック転送とファブリックソースNAT

必要に応じて、分離された名前空間で IP ファブリック転送とファブリック ソース NAT を有効にすることができます。

IPファブリック転送により、アンダーレイネットワークの一部として仮想ネットワークを作成でき、データのカプセル化とカプセル化解除が不要になります。ファブリックソースNATにより、オーバーレイ内のポッドは、フローティングIPや論理ルーターを使用せずにインターネットに到達できます。

分離された名前空間を作成すると、2 つの仮想ネットワークが作成されます。default-podnetwork default-servicenetworkデフォルトでは、この2つの仮想ネットワークのIPファブリック転送とファブリックソースNATは無効になっています。分離された名前空間の YAML ファイル内の各機能に対して「転送モード」の注釈を追加することで、仮想ネットワークで IP ファブリック転送またはファブリック ソース NAT を有効にします。

ここでは、転送モードが default-podnetwork に設定されている分離された名前空間の例を示します fabricSNAT

IPファブリック転送を有効にする

分離された名前空間で IP ファブリック転送を有効にするには、次の手順に従います。

  1. 名前空間のメタデータにアノテーションcore.juniper.net/forwarding-mode: "ip-fabric"を追加します。
  2. 分離された名前空間のラベルを に設定します"true"
  3. コマンドをkubectl apply発行して、IPファブリック転送を有効にします。
  4. 設定を確認します。

    成功!分離された名前空間で IP ファブリック転送を有効にしました。

ファブリックソースNATを有効にする

メモ:

有効にできるのは、 でファブリックソースNAT default-podnetworkだけです。

分離された名前空間でファブリックソースNATを有効にするには、次の手順に従います。

  1. 名前空間のメタデータにアノテーションcore.juniper.net/forwarding-mode: "fabric-snat"を追加します。
  2. 分離された名前空間のラベルを に設定します"true"
  3. コマンドをkubectl apply発行して、ファブリックソースNATを有効にします。
  4. 設定を確認します。
    成功!分離された名前空間でファブリックソースNATを有効にしました。