7.7. ホストデバイスネットワークの設定

クラスター管理者は、ホストデバイス Container Network Interface (CNI) プラグインを使用して、クラスターの追加ネットワークを設定できます。このプラグインは、指定されたネットワークデバイスを、ホストのネットワーク namespace から Pod のネットワーク namespace に移動することを可能にします。

7.7.1. ホストデバイス CNI プラグインを使用した追加ネットワーク割り当ての作成

Cluster Network Operator (CNO) は追加ネットワークの定義を管理します。作成する追加ネットワークを指定する場合、CNO は NetworkAttachmentDefinition カスタムリソース (CR) を自動的に作成します。

重要

Cluster Network Operator が管理する NetworkAttachmentDefinition CR は編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。

前提条件

  • oc として知られる OpenShift コマンドラインインターフェース (CLI) のインストール。
  • cluster-admin 権限を持つユーザーとしてのログイン。

手順

クラスターの追加ネットワークを作成するには、以下の手順を実施します。

  1. 以下のコマンドを実行して CNO CR を編集します。

    $ oc edit networks.operator.openshift.io cluster
  2. 以下のサンプル CR のように、作成される追加ネットワークの設定を追加して、作成している CR を変更します。

    以下の YAML は、ホストデバイス CNI プラグインを設定します。

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      additionalNetworks: 1
      - name: test-network-1
        namespace: test-1
        type: Raw
        rawCNIConfig: '{
          "cniVersion": "0.3.1",
          "type": "host-device",
          "device": "eth1"
        }'
    1
    追加ネットワーク割り当て定義の設定を指定します。
  3. 変更を保存し、テキストエディターを終了して、変更をコミットします。
  4. オプション: 以下のコマンドを実行して、CNO が NetworkAttachmentDefinition CR を作成していることを確認します。CNO が CR を作成するまでに遅延が生じる可能性があります。

    $ oc get network-attachment-definitions -n <namespace>
    NAME                 AGE
    test-network-1       14m

7.7.1.1. ホストデバイスの設定

ホストデバイス Container Network Interface (CNI) プラグインを使用する追加ネットワーク割り当ての設定は、以下の 2 つの部分に分けて提供されます。

  • Cluster Network Operator (CNO) の設定
  • CNI プラグインの設定

CNO 設定では、追加ネットワーク割り当ての名前と割り当てを作成する namespace を指定します。このプラグインは、CNO 設定の rawCNIConfig パラメーターで指定される JSON オブジェクトで設定されます。

以下の YAML は、CNO の設定パラメーターについて説明しています。

Cluster Network Operator YAML の設定

name: <name> 1
namespace: <namespace> 2
rawCNIConfig: '{ 3
  ...
}'
type: Raw

1
作成している追加ネットワーク割り当ての名前を指定します。名前は指定された namespace 内で一意である必要があります。
2
ネットワークの割り当てを作成する namespace を指定します。値を指定しない場合、default の namespace が使用されます。
3
以下のテンプレートに基づく CNI プラグイン設定を JSON 形式で指定します。
重要

devicehwaddrkernelpath、または pciBusID のいずれかのパラメーターを設定してネットワークデバイスを指定します。

以下のオブジェクトは、ホストデバイス CNI プラグインの設定パラメーターについて説明しています。

ホストデバイス CNI プラグイン JSON 設定オブジェクト

{
  "cniVersion": "0.3.1",
  "name": "<name>", 1
  "type": "host-device",
  "device": "<device>", 2
  "hwaddr": "<hwaddr>", 3
  "kernelpath": "<kernelpath>", 4
  "pciBusID": "<pciBusID>", 5
    "ipam": { 6
    ...
  }
}

1
CNO 設定に以前に指定した name パラメーターの値を指定します。
2
eth0などのデバイスの名前を指定します。
3
デバイスハードウェアの MAC アドレスを指定します。
4
/sys/devices/pci0000:00/0000:00:1f.6 などの Linux カーネルデバイスを指定します。
5
0000:00:1f.6 などのネットワークデバイスの PCI アドレスを指定します。
6
IPAM CNI プラグインの設定オブジェクトを指定します。プラグインは、割り当て定義についての IP アドレスの割り当てを管理します。
7.7.1.1.1. ホストデバイス設定例

以下の例では、hostdev-netという名前の追加のネットワークを設定します。

name: hostdev-net
namespace: work-network
type: Raw
rawCNIConfig: '{ 1
  "cniVersion": "0.3.1",
  "type": "host-device",
  "device": "eth1"
}'
1
CNI 設定オブジェクトは YAML 文字列として指定されます。

7.7.1.2. IPAM CNI プラグインの設定

IP アドレス管理 (IPAM) CNI プラグインは、他の CNI プラグインの IP アドレスの割り当てを管理します。DHCP を使用して、静的 IP アドレスの割り当てまたは動的 IP アドレスの割り当てのいずれかに IPAM を設定することができます。指定する DHCP サーバーは、追加のネットワークから到達可能である必要があります。

重要

OpenShift Container Platform 4.2.0 では、Pod を、IP アドレス管理に DHCP を使用する追加ネットワークに割り当てると、Pod は起動に失敗します。これは OpenShift Container Platform 4.2.1 で修正されています。詳細は、BZ#1754686 を参照してください。

以下の JSON 設定オブジェクトは設定できるパラメーターについて説明しています。

重要

type パラメーターを DHCP 値に設定すると、その他のパラメーターを設定することはできません。

IPAM CNI プラグイン JSON 設定オブジェクト

{
  "ipam": {
    "type": "<type>", 1
    "addresses": [ 2
      {
        "address": "<address>", 3
        "gateway": "<gateway>" 4
      }
    ],
    "routes": [ 5
      {
        "dst": "<dst>" 6
        "gw": "<gw>" 7
      }
    ],
    "dns": { 8
      "nameservers": ["<nameserver>"], 9
      "domain": "<domain>", 10
      "search": ["<search_domain>"] 11
    }
  }
}

1
IP アドレスの割り当てを管理できるようにプラグインを設定するには static を指定します。DHCP を指定して、DHCP サーバーが IP アドレスの割り当てを管理できるようにします。DHCP の値を指定する場合は、追加のパラメーターを指定できません。
2
仮想インターフェースに割り当てる IP アドレスを記述する配列。IPv4 と IPv6 の IP アドレスの両方がサポートされます。
3
10.1.1.0/24 など、ワーカーノードの Pod に割り当てる CIDR 形式で指定する IP アドレスのブロック。
4
egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。
5
Pod 内で設定するルートを記述する配列。
6
CIDR 形式の IP アドレス範囲。
7
ネットワークトラフィックのルーティングに使用するゲートウェイ。
8
DNS 設定。オプション。
9
DNS クエリーの送信先となる 1 つ以上の IP アドレスの配列。
10
ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが example.com に設定されている場合、example-host の DNS ルックアップクエリー は example-host.example.com として書き換えられます。
11
DNS ルックアップクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例: example-host)。
7.7.1.2.1. 静的 IP アドレス割り当ての設定例

静的 IP アドレスの割り当てに IPAM を設定することができます。

{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.1/24"
        }
      ]
  }
}
7.7.1.2.2. 動的 IP アドレス割り当ての設定例

DHCP に IPAM を設定できます。

{
  "ipam": {
    "type": "DHCP"
  }
}