10.4. ブリッジネットワークの設定
クラスター管理者は、ブリッジの Container Network Interface (CNI) プラグインを使用して、クラスターの追加ネットワークを設定できます。設定時に、ノード上のすべての Pod が仮想スイッチに接続されます。各 Pod には追加のネットワークの IP アドレスが割り当てられます。
10.4.1. ブリッジ CNI プラグインを使用した追加ネットワーク割り当ての作成 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は追加ネットワークの定義を管理します。作成する追加ネットワークを指定する場合、CNO は NetworkAttachmentDefinition オブジェクトを自動的に作成します。
Cluster Network Operator が管理する NetworkAttachmentDefinition オブジェクトは編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。
前提条件
-
OpenShift CLI (
oc) をインストールしている。 -
cluster-admin権限を持つユーザーとしてログインしている。
手順
クラスターの追加ネットワークを作成するには、以下の手順を実施します。
以下のコマンドを実行して CNO CR を編集します。
$ oc edit networks.operator.openshift.io cluster以下のサンプル 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", "name": "test-network-1", "type": "bridge", "ipam": { "type": "static", "addresses": [ { "address": "192.168.1.23/24" } ] } }'- 1
- 追加ネットワーク割り当て定義の設定を指定します。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
以下のコマンドを実行して、CNO が NetworkAttachmentDefinition オブジェクトを作成していることを確認します。
<namespace>を、ネットワーク割り当ての設定時に指定した namespace に置き換えます。CNO がオブジェクトを作成するまでに遅延が生じる可能性があります。$ oc get network-attachment-definitions -n <namespace>出力例
NAME AGE test-network-1 14m
10.4.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>
namespace: <namespace>
rawCNIConfig: '{
...
}'
type: Raw
以下のオブジェクトは、ブリッジ CNI プラグインの設定パラメーターについて説明しています。
ブリッジ CNI プラグイン JSON 設定オブジェクト
{
"cniVersion": "0.3.1",
"name": "<name>",
"type": "bridge",
"bridge": "<bridge>",
"ipam": {
...
},
"ipMasq": false,
"isGateway": false,
"isDefaultGateway": false,
"forceAddress": false,
"hairpinMode": false,
"promiscMode": false,
"vlan": <vlan>,
"mtu": <mtu>
}
- 1
- CNO 設定に以前に指定した
nameパラメーターの値を指定します。 - 2
- 使用する仮想ブリッジの名前を指定します。ブリッジインターフェイスがホストに存在しない場合は、これが作成されます。デフォルト値は
cni0です。 - 3
- IPAM CNI プラグインの設定オブジェクトを指定します。プラグインは、ネットワーク割り当て定義についての IP アドレスの割り当てを管理します。
- 4
- 仮想ネットワークから外すトラフィックについて IP マスカレードを有効にするには、
trueに設定します。すべてのトラフィックのソース IP アドレスは、ブリッジの IP アドレスに書き換えられます。ブリッジに IP アドレスがない場合は、この設定は影響を与えません。デフォルト値はfalseです。 - 5
- IP アドレスをブリッジに割り当てるには
trueに設定します。デフォルト値はfalseです。 - 6
- ブリッジを仮想ネットワークのデフォルトゲートウェイとして設定するには、
trueに設定します。デフォルト値はfalseです。isDefaultGatewayがtrueに設定される場合、isGatewayも自動的にtrueに設定されます。 - 7
- 仮想ブリッジの事前に割り当てられた IP アドレスの割り当てを許可するには、
trueに設定します。falseに設定される場合、重複サブセットの IPv4 アドレスまたは IPv6 アドレスが仮想ブリッジに割り当てられるとエラーが発生します。デフォルト値はfalseです。 - 8
- 仮想ブリッジが受信時に使用した仮想ポートでイーサネットフレームを送信できるようにするには、
trueに設定します。このモードは、Reflective Relay (リフレクティブリレー) としても知られています。デフォルト値はfalseです。 - 9
- ブリッジで無作為検出モード (Promiscuous Mode) を有効にするには、
trueに設定します。デフォルト値はfalseです。 - 10
- 仮想 LAN (VLAN) タグを整数値として指定します。デフォルトで、VLAN タグは割り当てません。
- 11
- 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。
10.4.1.1.1. ブリッジ設定の例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、bridge-net という名前の追加のネットワークを設定します。
name: bridge-net
namespace: work-network
type: Raw
rawCNIConfig: '{
"cniVersion": "0.3.1",
"name": "work-network",
"type": "bridge",
"isGateway": true,
"vlan": 2,
"ipam": {
"type": "dhcp"
}
}'
- 1
- CNI 設定オブジェクトは YAML 文字列として指定されます。
10.4.1.2. IPAM CNI プラグインの設定 リンクのコピーリンクがクリップボードにコピーされました!
IPAM Container Network Interface (CNI) プラグインは、他の CNI プラグインに IP アドレス管理 (IPAM) を提供します。
IP アドレスの割り当てには、以下の方法を使用できます。
- 静的割り当て。
- DHCP サーバーを使用した動的割り当て。指定する DHCP サーバーは、追加のネットワークから到達可能である必要があります。
- Whereabouts IPAM CNI プラグインを使用した動的割り当て。
10.4.1.2.1. 静的 IP アドレス割り当ての設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の JSON は、静的 IP アドレスの割り当ての設定について説明しています。
静的割り当ての設定
{
"ipam": {
"type": "static",
"addresses": [
{
"address": "<address>",
"gateway": "<gateway>"
}
],
"routes": [
{
"dst": "<dst>",
"gw": "<gw>"
}
],
"dns": {
"nameservers": ["<nameserver>"],
"domain": "<domain>",
"search": ["<search_domain>"]
}
}
}
- 1
- 仮想インターフェイスに割り当てる IP アドレスを記述する配列。IPv4 と IPv6 の IP アドレスの両方がサポートされます。
- 2
- 指定する IP アドレスおよびネットワーク接頭辞。たとえば、
10.10.21.10/24を指定すると、追加のネットワークに IP アドレスの10.10.21.10が割り当てられ、ネットマスクは255.255.255.0になります。 - 3
- egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。
- 4
- Pod 内で設定するルートを記述する配列。
- 5
- CIDR 形式の IP アドレス範囲 (
192.168.17.0/24、またはデフォルトルートの0.0.0.0/0)。 - 6
- ネットワークトラフィックがルーティングされるゲートウェイ。
- 7
- オプション: DNS 設定。
- 8
- DNS クエリーの送信先となる 1 つ以上の IP アドレスの配列。
- 9
- ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが
example.comに設定されている場合、example-hostの DNS ルックアップクエリーはexample-host.example.comとして書き換えられます。 - 10
- DNS ルックアップのクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例:
example-host)。
10.4.1.2.2. 動的 IP アドレス割り当ての設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の JSON は、DHCP を使用した動的 IP アドレスの割り当ての設定について説明しています。
Pod は、作成時に元の DHCP リースを取得します。リースは、クラスターで実行している最小限の DHCP サーバーデプロイメントで定期的に更新する必要があります。
DHCP サーバーのデプロイメントをトリガーするには、以下の例にあるように Cluster Network Operator 設定を編集して shim ネットワーク割り当てを作成する必要があります。
shim ネットワーク割り当ての定義例
apiVersion: operator.openshift.io/v1
kind: Network
metadata:
name: cluster
spec:
...
additionalNetworks:
- name: dhcp-shim
namespace: default
type: Raw
rawCNIConfig: |-
{
"name": "dhcp-shim",
"cniVersion": "0.3.1",
"type": "bridge",
"ipam": {
"type": "dhcp"
}
}
DHCP 割り当ての設定
{
"ipam": {
"type": "dhcp"
}
}
10.4.1.2.3. Whereabouts を使用した動的 IP アドレス割り当ての設定 リンクのコピーリンクがクリップボードにコピーされました!
Whereabouts CNI プラグインにより、DHCP サーバーを使用せずに IP アドレスを追加のネットワークに動的に割り当てることができます。
以下の JSON は、Whereabouts を使用した動的 IP アドレス割り当ての設定について説明しています。
Whereabouts 割り当て設定
{
"ipam": {
"type": "whereabouts",
"range": "<range>",
"exclude": ["<exclude_part>, ..."],
}
}
10.4.1.2.4. 静的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
静的 IP アドレスの割り当てに IPAM を設定することができます。
{
"ipam": {
"type": "static",
"addresses": [
{
"address": "191.168.1.7"
}
]
}
}
10.4.1.2.5. DHCP を使用した動的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
DHCP に IPAM を設定できます。
{
"ipam": {
"type": "dhcp"
}
}
10.4.1.2.6. Whereabouts を使用した動的 IP アドレス割り当ての設定例 リンクのコピーリンクがクリップボードにコピーされました!
Whereabouts を使用するように IPAM を設定できます。
{
"ipam": {
"type": "whereabouts",
"range": "192.0.2.192/27",
"exclude": [
"192.0.2.192/30",
"192.0.2.196/32"
]
}
}