分離された名前空間を作成する
概要 このトピックでは、Cloud-Native Contrail® Networking で分離された名前空間を作成する方法について説明します™。ジュニパーネットワークスは、Kubernetes オーケストレーション環境で Contrail Networking リリース 22.1 以降を使用して、分離された名前空間をサポートします。
名前空間の概要
このドキュメントでは、Contrail ネットワークのコンテキストでのみ、「分離」と「非分離」という用語を使用します。
分離されていない名前空間
名前空間、または分離されていない名前空間は、1 つのクラスター内のリソース グループを分離するメカニズムを提供します。デフォルトでは、名前空間は分離されません。
分離されていない名前空間は、多くのユーザーが複数のチームやプロジェクトに広がる環境で使用することを目的としています。各チームは、分離されていない名前空間を使用して、お互いの作業に影響を与えることなく、独自の仮想クラスターに存在することができます。Kubernetesが提供するデフォルトの名前空間ですべてのリソースを作成したとします。複数の導入を使用する複雑なアプリケーションがある場合、デフォルトの名前空間を維持するのは難しい場合があります。この導入を管理する簡単な方法は、すべてのリソースをクラスタ内の異なる名前空間にグループ化することです。たとえば、クラスターには、データベース名前空間や監視データベースなど、別々の名前空間を含めることができます。リソースの名前は名前空間内で一意である必要がありますが、名前空間間では一意である必要はありません。
分離されていない名前空間のポッドは、以下のネットワーク動作を示します。
-
分離されていない名前空間のポッドは、NATを使用せずにクラスター内の他のポッドと通信できます。
-
分離されていない名前空間のポッドとサービスは、
default-podnetwork
とdefault-servicenetwork
を共有します。
分離された名前空間
名前空間を分離することで、プライベートにしたい顧客固有のアプリケーションを実行できます。ネットワークポリシーを明示的に設定することなく、ポッドを他のポッドから分離する独立した名前空間を作成できます。
分離された名前空間は、分離されていない名前空間と似ていますが、分離された各名前空間には独自のポッドネットワークとサービスネットワークがあることを除きます。つまり、分離されたネームスペース内のポッドは、他の分離または非分離された名前空間のポッドやサービスに到達できません。
分離された名前空間のポッドは、同じ名前空間のポッドとのみ通信できます。唯一の例外は、分離されたネームスペース内のポッドが、コアDNSなどのKubernetesサービスにアクセスする必要がある場合です。この場合、ポッドはクラスターを使用してサービスにアクセスします default-servicenetwork
。
分離された名前空間のポッドは、以下のネットワーク動作を示します。
-
分離された名前空間のポッドは、同じ名前空間のポッドとのみ通信できます。
-
分離された名前空間のポッドは、分離されていない名前空間のサービスに到達できます。
-
分離されたネームスペース内のポッドのIPアドレスとサービスIPアドレスは、クラスタのポッドおよびサービスサブネットと同じサブネットから割り当てられます。
-
分離されたネームスペース内のポッドは、IPファブリック転送とファブリックソースNATを使用して、アンダーレイネットワーク、またはIPファブリックネットワークにアクセスできます。
例:分離された名前空間の設定
この構成例では、Cloud-Native Contrail Networking で分離された名前空間の構成を示しています。
この分離された名前空間の設定では、
-
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 に接続するため、これらの分離された名前空間のポッドは相互に通信できます。
apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetworkRouter metadata: namespace: ns-isolated-1 name: vnr-1 annotations: core.juniper.net/display-name: vnr-1 labels: vnr: vnr-1 spec: type: mesh virtualNetworkSelector: matchExpressions: - key: core.juniper.net/virtualnetwork operator: In values: - isolated-namespace-pod-virtualnetwork import: virtualNetworkRouters: - virtualNetworkRouterSelector: matchLabels: vnr: vnr-2 namespaceSelector: matchLabels: kubernetes.io/metadata.name: ns-isolated-2 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetworkRouter metadata: namespace: ns-isolated-2 name: vnr-2 annotations: core.juniper.net/display-name: vnr-2 labels: vnr: vnr-2 spec: type: mesh virtualNetworkSelector: matchExpressions: - key: core.juniper.net/virtualnetwork operator: In values: - isolated-namespace-pod-virtualnetwork import: virtualNetworkRouters: - virtualNetworkRouterSelector: matchLabels: vnr: vnr-1 namespaceSelector: matchLabels: kubernetes.io/metadata.name: ns-isolated-1
分離された名前空間のオブジェクト
この表では、分離された名前空間を作成するときにコントローラーが作成する名前空間オブジェクト(API リソース)について説明します。
名前空間の分離されたオブジェクト | の説明 |
---|---|
default-podnetwork (VirtualNetwork) |
クラスターのデフォルトネットワークではなく、分離された名前空間内のポッドのデフォルトインターフェイスが作成 default-podnetwork されます。 |
default-servicenetwork (VirtualNetwork) |
分離された名前空間にあるサービスのクラスター IP は、クラスターの ではなく、この default-servicenetwork で作成されます default-servicenetwork 。 |
IsolatedNamespacePodServiceNetwork (VirtualNetworkRouter) |
このオブジェクトは、分離された名前空間 default-podnetwork と の間の接続を確立します default-servicenetwork 。 |
IsolatedNamespaceIPFabricNetwork (VirtualNetworkRouter) |
このオブジェクトは、分離された名前空間とdefault-servicenetwork クラスターip-fabricnetwork の default-podnetwork . |
IsolatedNamespacePodToDefaultService (VirtualNetworkRouter) |
このオブジェクトは、分離された名前空間とクラスターの default-podnetwork 間の接続を確立します default-servicenetwork 。 |
分離された名前空間を作成する
分離された名前空間を作成するには、次の手順に従います。
オプションの設定:IPファブリック転送とファブリックソースNAT
必要に応じて、分離された名前空間で IP ファブリック転送とファブリック ソース NAT を有効にすることができます。
IPファブリック転送により、アンダーレイネットワークの一部として仮想ネットワークを作成でき、データのカプセル化とカプセル化解除が不要になります。ファブリックソースNATにより、オーバーレイ内のポッドは、フローティングIPや論理ルーターを使用せずにインターネットに到達できます。
分離された名前空間を作成すると、2 つの仮想ネットワークが作成されます。default-podnetwork
default-servicenetwork
デフォルトでは、この2つの仮想ネットワークのIPファブリック転送とファブリックソースNATは無効になっています。分離された名前空間の YAML ファイル内の各機能に対して「転送モード」の注釈を追加することで、仮想ネットワークで IP ファブリック転送またはファブリック ソース NAT を有効にします。
ここでは、転送モードが default-podnetwork
に設定されている分離された名前空間の例を示します fabricSNAT
。
apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetwork metadata: annotations: core.juniper.net/description: Default Pod Network for IsolatedNamespace (ns-isolated) core.juniper.net/display-name: default-podnetwork ... spec: ... fabricSNAT: true ...
IPファブリック転送を有効にする
分離された名前空間で IP ファブリック転送を有効にするには、次の手順に従います。
ファブリックソースNATを有効にする
有効にできるのは、 でファブリックソースNAT default-podnetwork
だけです。
分離された名前空間でファブリックソースNATを有効にするには、次の手順に従います。