3.8. コンテナーネットワーク namespace での master インターフェイスの設定
マスター インターフェイスに基づいて、MAC-VLAN、IP-VLAN、および VLAN サブインターフェイスを作成し、管理できます。
3.8.1. コンテナーネットワーク namespace での master インターフェイスの設定について リンクのコピーリンクがクリップボードにコピーされました!
コンテナー namespace に存在する master インターフェイスに基づいて、MAC-VLAN、IP-VLAN、または VLAN サブインターフェイスを作成できます。別のネットワークアタッチメント定義 CRD で、Pod ネットワーク設定の一部として master インターフェイスを作成することもできます。
コンテナー namespace の master インターフェイスを使用するには、NetworkAttachmentDefinition CRD のサブインターフェイス設定に存在する linkInContainer パラメーターに true を指定する必要があります。
3.8.1.1. SR-IOV VF 上で複数の VLAN を作成する リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV VF に基づいて複数の VLAN を作成することができます。この設定では、SR-IOV ネットワークを作成し、VLAN インターフェイスのネットワークアタッチメントを定義します。
以下の図は、SR-IOV VF に複数の VLAN を作成する設定プロセスを示しています。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 - SR-IOV Network Operator がインストールされている。
手順
次のコマンドを使用して、Pod をデプロイする専用のコンテナー namespace を作成します。
$ oc new-project test-namespaceSR-IOV ノードポリシーを作成します。
SriovNetworkNodePolicyオブジェクトを作成してから、YAML をsriov-node-network-policy.yamlファイルに保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriovnic namespace: openshift-sriov-network-operator spec: deviceType: netdevice isRdma: false needVhostNet: true nicSelector: vendor: "15b3" deviceID: "101b" rootDevices: ["00:05.0"] numVfs: 10 priority: 99 resourceName: sriovnic nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true"ここでは、以下のようになります。
vendor-
SR-IOV ネットワークデバイスのベンダーの 16 進数コード。
15b3の値は Mellanox NIC に関連付けられます。 deviceIDSR-IOV ネットワークデバイスのデバイスの 16 進数コード。
注記deviceType: netdeviceを設定した SR-IOV ネットワークノードポリシーの設定例は、Mellanox ネットワークインターフェイスカード (NIC) 向けに特別に調整されています。
以下のコマンドを実行して YAML 設定を適用します。
$ oc apply -f sriov-node-network-policy.yaml注記ノードの再起動操作により、YAML 設定の適用に時間がかかる場合があります。
SR-IOV ネットワークを作成します。
次のサンプル CR に示すように、追加のセカンダリー SR-IOV ネットワーク割り当て用の
SriovNetworkカスタムリソース(CR)を作成します。YAML をsriov-network-attachment.yamlファイルとして保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: sriov-network namespace: openshift-sriov-network-operator spec: networkNamespace: test-namespace resourceName: sriovnic spoofChk: "off" trust: "on"以下のコマンドを実行して YAML を適用します。
$ oc apply -f sriov-network-attachment.yaml
VLAN セカンダリーネットワークを作成します。
以下の YAML の例を使用して、
vlan100-additional-network-configuration.yamlという名前のファイルを作成します。apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: vlan-100 namespace: test-namespace spec: config: | { "cniVersion": "0.4.0", "name": "vlan-100", "plugins": [ { "type": "vlan", "master": "ext0", "mtu": 1500, "vlanId": 100, "linkInContainer": true, "ipam": {"type": "whereabouts", "ipRanges": [{"range": "1.1.1.0/24"}]} } ] }ここでは、以下のようになります。
master-
VLAN 設定では
master名を指定する必要があります。Pod の networks アノテーションで名前を指定できます。 linkInContainer-
linkInContainerパラメーターを指定する必要があります。
以下のコマンドを実行して、YAML ファイルを適用します。
$ oc apply -f vlan100-additional-network-configuration.yaml
先に指定したネットワークを使用して Pod 定義を作成します。
次の YAML 設定例を使用して、
pod-a.yamlファイルという名前のファイルを作成します。注記マニフェストの例には、次のリソースが含まれています。
- セキュリティーラベルのある namespace
- 適切なネットワークアノテーションを含む Pod 定義
apiVersion: v1 kind: Namespace metadata: name: test-namespace labels: pod-security.kubernetes.io/enforce: privileged pod-security.kubernetes.io/audit: privileged pod-security.kubernetes.io/warn: privileged security.openshift.io/scc.podSecurityLabelSync: "false" --- apiVersion: v1 kind: Pod metadata: name: nginx-pod namespace: test-namespace annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "sriov-network", "namespace": "test-namespace", "interface": "ext0" }, { "name": "vlan-100", "namespace": "test-namespace", "interface": "ext0.100" } ]' spec: securityContext: runAsNonRoot: true containers: - name: nginx-container image: nginxinc/nginx-unprivileged:latest securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] ports: - containerPort: 80 seccompProfile: type: "RuntimeDefault"ここでは、以下のようになります。
interface-
VLAN インターフェイスの
マスターインターフェイスとして使用される名前。
以下のコマンドを実行して、YAML ファイルを適用します。
$ oc apply -f pod-a.yaml
次のコマンドを実行して、
test-namespace内のnginx-podに関する詳細情報を取得します。$ oc describe pods nginx-pod -n test-namespaceName: nginx-pod Namespace: test-namespace Priority: 0 Node: worker-1/10.46.186.105 Start Time: Mon, 14 Aug 2023 16:23:13 -0400 Labels: <none> Annotations: k8s.ovn.org/pod-networks: {"default":{"ip_addresses":["10.131.0.26/23"],"mac_address":"0a:58:0a:83:00:1a","gateway_ips":["10.131.0.1"],"routes":[{"dest":"10.128.0.0... k8s.v1.cni.cncf.io/network-status: [{ "name": "ovn-kubernetes", "interface": "eth0", "ips": [ "10.131.0.26" ], "mac": "0a:58:0a:83:00:1a", "default": true, "dns": {} },{ "name": "test-namespace/sriov-network", "interface": "ext0", "mac": "6e:a7:5e:3f:49:1b", "dns": {}, "device-info": { "type": "pci", "version": "1.0.0", "pci": { "pci-address": "0000:d8:00.2" } } },{ "name": "test-namespace/vlan-100", "interface": "ext0.100", "ips": [ "1.1.1.1" ], "mac": "6e:a7:5e:3f:49:1b", "dns": {} }] k8s.v1.cni.cncf.io/networks: [ { "name": "sriov-network", "namespace": "test-namespace", "interface": "ext0" }, { "name": "vlan-100", "namespace": "test-namespace", "i... openshift.io/scc: privileged Status: Running IP: 10.131.0.26 IPs: IP: 10.131.0.26
3.8.1.2. コンテナー namespace のブリッジマスターインターフェイスをベースにしてサブインターフェイスを作成する リンクのコピーリンクがクリップボードにコピーされました!
コンテナー namespace に存在するブリッジ master インターフェイスに基づいてサブインターフェイスを作成できます。サブインターフェイスの作成は、他のタイプのインターフェイスに適用できます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとして OpenShift Container Platform クラスターにログインしている。
手順
次のコマンドを入力して、Pod のデプロイ先となる専用のコンテナー namespace を作成します。
$ oc new-project test-namespace以下の YAML 設定例を使用して、
bridge-nad.yamlという名前のブリッジNetworkAttachmentDefinitionカスタムリソース定義(CRD)ファイルを作成します。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: bridge-network spec: config: '{ "cniVersion": "0.4.0", "name": "bridge-network", "type": "bridge", "bridge": "br-001", "isGateway": true, "ipMasq": true, "hairpinMode": true, "ipam": { "type": "host-local", "subnet": "10.0.0.0/24", "routes": [{"dst": "0.0.0.0/0"}] } }'次のコマンドを実行して、
NetworkAttachmentDefinitionCRD を OpenShift Container Platform クラスターに適用します。$ oc apply -f bridge-nad.yaml次のコマンドを入力して、
NetworkAttachmentDefinitionCRD が正常に作成されたことを確認します。予想される出力には、NAD CRD の名前と作成後の経過時間 (分) が表示されます。$ oc get network-attachment-definitions以下の YAML の例を使用して、IPVLAN セカンダリーネットワーク設定用に
ipvlan-additional-network-configuration.yamlという名前のファイルを作成します。apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: ipvlan-net namespace: test-namespace spec: config: '{ "cniVersion": "0.3.1", "name": "ipvlan-net", "type": "ipvlan", "master": "net1", "mode": "l3", "linkInContainer": true, "ipam": {"type": "whereabouts", "ipRanges": [{"range": "10.0.0.0/24"}]} }'ここでは、以下のようになります。
master- ネットワークアタッチメントに関連付けるイーサネットインターフェイスを指定します。その後、イーサネットインターフェイスは Pod ネットワークアノテーションで設定されます。
linkInContainer-
マスターインターフェイスがコンテナーネットワーク namespace に存在することを指定します。
以下のコマンドを実行して、YAML ファイルを適用します。
$ oc apply -f ipvlan-additional-network-configuration.yaml次のコマンドを実行して、
NetworkAttachmentDefinitionCRD が正常に作成されたことを確認します。予想される出力には、NAD CRD の名前と作成後の経過時間 (分) が表示されます。$ oc get network-attachment-definitions次の YAML 設定例を使用して、Pod 定義用に
pod-a.yamlという名前のファイルを作成します。apiVersion: v1 kind: Pod metadata: name: pod-a namespace: test-namespace annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "bridge-network", "interface": "net1"1 }, { "name": "ipvlan-net", "interface": "net2" } ]' spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: test-pod image: quay.io/openshifttest/hello-sdn@sha256:c89445416459e7adea9a5a416b3365ed3d74f2491beb904d61dc8d1eb89a72a4 securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL]ここでは、以下のようになります。
k8s.v1.cni.cncf.io/networks,interface-
IPVLAN インターフェイスの
masterとして使用する名前を指定します。
以下のコマンドを実行して、YAML ファイルを適用します。
$ oc apply -f pod-a.yaml
検証
以下のコマンドを使用して、Pod が実行されていることを確認します。
$ oc get pod -n test-namespaceNAME READY STATUS RESTARTS AGE pod-a 1/1 Running 0 2m36s次のコマンドを実行して、
test-namespace内のpod-aリソースに関するネットワークインターフェイス情報を表示します。$ oc exec -n test-namespace pod-a -- ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UP group default link/ether 0a:58:0a:d9:00:5d brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.217.0.93/23 brd 10.217.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::488b:91ff:fe84:a94b/64 scope link valid_lft forever preferred_lft forever 4: net1@if107: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether be:da:bd:7e:f4:37 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.0.0.2/24 brd 10.0.0.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::bcda:bdff:fe7e:f437/64 scope link valid_lft forever preferred_lft forever 5: net2@net1: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default link/ether be:da:bd:7e:f4:37 brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/24 brd 10.0.0.255 scope global net2 valid_lft forever preferred_lft forever inet6 fe80::beda:bd00:17e:f437/64 scope link valid_lft forever preferred_lft foreverこの出力は、ネットワークインターフェイスの
net2が物理インターフェイスnet1に関連付けられていることを示しています。