第5章 複数ネットワーク
5.1. 複数ネットワークの使用について
デフォルトの OVN-Kubernetes Container Network Interface (CNI) プラグインに加えて、MicroShift Multus CNI を使用して他の CNI プラグインをチェーンすることもできます。MicroShift Multus のインストールおよび使用はオプションです。
5.1.1. MicroShift の追加ネットワーク
クラスターのインストール中、設定をカスタマイズしない限り、default の Pod ネットワークはデフォルト値で設定されます。デフォルトのネットワークは、クラスターの通常のネットワークトラフィックをすべて処理します。MicroShift Multus CNI プラグインを使用すると、他のネットワークの Pod に追加のインターフェイスを追加できます。これにより、スイッチングやルーティングなどのネットワーク機能を提供する Pod を設定する際に柔軟性が得られます。
5.1.1.1. ネットワーク分離のための追加ネットワークをサポート
MicroShift 4.16 では、次の追加ネットワークがサポートされています。
- Bridge: 同じホスト上の Pod が相互に、またホストと通信できるようにします。
IPVLAN: ホスト上の Pod が他のホストと通信できるようにします。
- これは、MACVLAN ベースの追加ネットワークに似ています。
- MACVLAN ベースの追加ネットワークとは異なり、各 Pod は親物理ネットワークインターフェイスと同じ MAC アドレスを共有します。
- MACVLAN: ホスト上の Pod が物理ネットワークインターフェイスを使用して他のホストや他のホスト上の Pod と通信できるようにします。MACVLAN ベースの追加ネットワークに接続された各 Pod には、一意の MAC アドレスが提供されます。
追加のネットワークに対するネットワークポリシーの設定はサポートされていません。
5.1.1.2. 使用例: ネットワーク分離のための追加ネットワーク
コントロールプレーンとデータプレーンの分離など、ネットワークの分離が必要な状況では、追加のネットワークを使用できます。たとえば、Pod がホスト上のネットワークにアクセスし、エッジにデプロイされたデバイスと通信できるようにする場合は、追加のインターフェイスを設定できます。これらのエッジデバイスは、分離された Operator ネットワーク上にあるか、定期的に切断される可能性があります。
トラフィックの分離は、以下のようなパフォーマンスおよびセキュリティー関連の理由で必要になります。
- パフォーマンス
- 2 つの異なるプレーンでトラフィックを送信して、各プレーンのトラフィック量を管理できます。
- セキュリティー
- 機密トラフィックは、セキュリティー上の考慮に基づいて管理されているネットワークに送信でき、テナントまたはカスタマー間で共有できないプライベートを分離できます。
Multus CNI プラグインは、MicroShift サービスの起動時にデプロイされます。したがって、MicroShift の起動後に microshift-multus
RPM パッケージを追加する場合は、ホストの再起動が必要です。再起動すると、すべてのコンテナーが Multus アノテーション付きで再作成されます。
5.1.1.3. 追加ネットワークの実装方法
クラスターのすべての Pod はクラスター全体のデフォルトネットワークを依然として使用し、クラスター全体での接続性を維持します。すべての Pod には、クラスター全体の Pod ネットワークに割り当てられる eth0
インターフェイスがあります。
-
oc get pod <pod_name> -o=jsonpath='{ .metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status }'
コマンドを使用して、Pod のインターフェイスを表示できます。 -
MicroShift Multus CNI を使用するネットワークインターフェイスを追加する場合、その名前は
net1
、net2
、…、netN
です。 - CNI 設定は、MicroShift Multus DaemonSet の起動時に作成されます。この設定は自動生成され、デフォルトの委譲であるプライマリー CNI が含まれます。MicroShift の場合、デフォルトの CNI は OVN-Kubernetes です。
5.1.1.4. Pod に追加のネットワークを接続する方法
Pod に追加のネットワークインターフェイスを接続するには、インターフェイスの接続方法を定義する設定を作成して適用する必要があります。
- 使用する追加のネットワークを設定する必要があります。ネットワークにはそれぞれ違いがあるため、デフォルトの設定はありません。
-
NetworkAttachmentDefinition
カスタムリソース (CR) を使用して各インターフェイスを指定するには、YAML マニフェストを適用する必要があります。これらの各 CR 内の設定は、そのインターフェイスがどのように作成されるかを定義します。 CRI-O は Multus を使用するように設定する必要があります。デフォルト設定は
microshift-multus
RPM に含まれています。- Multus CNI が既存の MicroShift インスタンスにインストールされている場合は、ホストを再起動する必要があります。
- Multus CNI が MicroShift と一緒にインストールされている場合は、CR と Pod を追加してから MicroShift サービスを開始できます。このシナリオではホストを再起動する必要はありません。
5.1.1.5. 追加のネットワークタイプの設定
次のセクションでは、追加のネットワークの具体的な設定フィールドを説明します。
5.1.2. 実行中のクラスターへの Multus CNI プラグインのインストール
高性能ネットワーク設定のために Pod に追加のネットワークを接続する場合は、MicroShift Multus RPM パッケージをインストールできます。インストール後、Multus アノテーションを持つすべての Pod を再作成するには、ホストを再起動する必要があります。
Multus CNI プラグインのアンインストールはサポートされていません。
前提条件
- ホストへの root アクセス権限がある。
手順
次のコマンドを実行して、Multus RPM パッケージをインストールします。
$ sudo dnf install microshift-multus
ヒントここで追加のネットワーク用のカスタムリソース (CR) を作成すると、1 回の再起動でインストールを完了し、設定を適用できます。
パッケージマニフェストをアクティブなクラスターに適用するには、次のコマンドを実行してホストを再起動します。
$ sudo systemctl restart
検証
再起動後、次のコマンドを実行して、Multus CNI プラグインコンポーネントが作成されていることを確認します。
$ oc get pod -A | grep multus
出力例
openshift-multus dhcp-daemon-ktzqf 1/1 Running 0 45h openshift-multus multus-4frf4 1/1 Running 0 45h
次のステップ
- まだ行っていない場合は、使用する追加のネットワークを設定して適用します。
- 作成された CR を使用するアプリケーションをデプロイします。
5.1.3. ブリッジネットワークの追加設定
次のオブジェクトは、Bridge CNI プラグインの設定パラメーターを説明します。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
設定する CNI プラグインの名前: |
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。 |
|
|
オプション: 使用する仮想ブリッジの名前を指定します。ブリッジインターフェイスがホストに存在しない場合は、これが作成されます。デフォルト値は |
|
|
オプション: 仮想ネットワークから外すトラフィックの IP マスカレードを有効にするには、 |
|
|
オプション: IP アドレスをブリッジに割り当てるには |
|
|
オプション: ブリッジを仮想ネットワークのデフォルトゲートウェイとして設定するには、 |
|
|
オプション: 仮想ブリッジの事前に割り当てられた IP アドレスの割り当てを許可するには、 |
|
|
オプション: 仮想ブリッジが受信時に使用した仮想ポートでイーサネットフレームを送信できるようにするには、 |
|
|
オプション: ブリッジで無作為検出モード (Promiscuous Mode) を有効にするには、 |
|
| オプション: 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
オプション: コンテナー側の |
|
|
オプション: MAC スプーフィングチェックを有効にして、コンテナーから発信されるトラフィックをインターフェイスの MAC アドレスに制限します。デフォルト値は |
5.1.3.1. ブリッジ CNI プラグインの設定例
次の例では、MicroShift Multus CNI で使用するために bridge-conf
という名前の追加ネットワークを設定します。
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: bridge-conf spec: config: '{ "cniVersion": "0.4.0", "type": "bridge", "bridge": "test-bridge", "mode": "bridge", "ipam": { "type": "host-local", "ranges": [ [ { "subnet": "10.10.0.0/16", "rangeStart": "10.10.1.20", "rangeEnd": "10.10.3.50", "gateway": "10.10.0.254" } ] ], "dataDir": "/var/lib/cni/test-bridge" } }'
5.1.4. ipvlan 追加ネットワークの設定
以下のオブジェクトは、IPVLAN CNI プラグインの設定パラメーターを説明しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
CNO 設定に以前に指定した |
|
|
設定する CNI プラグインの名前: |
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。これは、プラグインが連鎖している場合を除き必要です。 |
|
|
オプション: 仮想ネットワークの操作モードを指定します。この値は、 |
|
|
オプション: ネットワーク割り当てに関連付けるイーサネットインターフェイスを指定します。 |
|
| オプション: 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
オプション: マスターインターフェイスが、コンテナーネットワーク namespace とメインネットワーク namespace のどちらにあるかを指定します。コンテナー namespace マスターインターフェイスの使用を要求するには、値を |
-
ipvlan
オブジェクトは、仮想インターフェイスがmaster
インターフェイスと通信することを許可しません。したがって、コンテナーはipvlan
インターフェイスを使用してホストに到達できません。コンテナーが、Precision Time Protocol (PTP
) をサポートするネットワークなど、ホストへの接続を提供するネットワークに参加していることを確認してください。 -
1 つのの
master
インターフェイスを、macvlan
とipvlan
の両方を使用するように同時に設定することはできません。 -
インターフェイスに依存できない IP 割り当てスキームの場合、
ipvlan
プラグインは、このロジックを処理する以前のプラグインと連鎖させることができます。master
が省略された場合、前の結果にはスレーブにするipvlan
プラグインのインターフェイス名が 1 つ含まれていなければなりません。ipam
が省略された場合、ipvlan
インターフェイスの設定には前の結果が使用されます。
5.1.4.1. IPVLAN CNI プラグインの設定例
以下の例では、ipvlan-net
という名前の追加のネットワークを設定します。
{ "cniVersion": "0.3.1", "name": "ipvlan-net", "type": "ipvlan", "master": "eth1", "linkInContainer": false, "mode": "l3", "ipam": { "type": "static", "addresses": [ { "address": "192.168.10.10/24" } ] } }
5.1.5. macvlan 追加ネットワークの設定
以下のオブジェクトは、MACVLAN CNI プラグインの設定パラメーターを説明しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
CNO 設定に以前に指定した |
|
|
設定する CNI プラグインの名前: |
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。 |
|
|
オプション: 仮想ネットワークのトラフィックの可視性を設定します。 |
|
| オプション: 新しく作成された macvlan インターフェイスに関連付けるホストネットワークインターフェイス。値が指定されていない場合は、デフォルトのルートインターフェイスが使用されます。 |
|
| オプション: 指定された値への最大転送単位 (MTU)。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
オプション: マスターインターフェイスが、コンテナーネットワーク namespace とメインネットワーク namespace のどちらにあるかを指定します。コンテナー namespace マスターインターフェイスの使用を要求するには、値を |
プラグイン設定の master
キーを指定する場合は、競合の可能性を回避するために、プライマリーネットワークプラグインに関連付けられているものとは異なる物理ネットワークインターフェイスを使用してください。
5.1.5.1. MACVLAN CNI プラグイン設定の例
以下の例では、macvlan-net
という名前の追加のネットワークを設定します。
{ "cniVersion": "0.3.1", "name": "macvlan-net", "type": "macvlan", "master": "eth1", "linkInContainer": false, "mode": "bridge", "ipam": { "type": "dhcp" } }