1.2. チューニング CNI を使用してオールマルチキャストモードを有効にする
OpenShift Container Platform のネットワークインターフェイスでオールマルチキャストモードを有効にするには、ネットワークアタッチメント定義でチューニング Container Network Interface (CNI) メタプラグインを使用できます。有効にすると、インターフェイスはネットワーク上のすべてのマルチキャストパケットを受信します。
手順
次の内容を含む、
tuning-example.yamlなどのネットワークアタッチメント定義を作成します。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <name> namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "<name>", "plugins": [{ "type": "<main_CNI_plugin>" }, { "type": "tuning", "allmulti": true } } ] }ここでは、以下のようになります。
<name>- 作成する追加のネットワーク割り当ての名前を指定します。名前は指定された namespace 内で一意である必要があります。
default- オブジェクトが関連付けられている namespace を指定します。
0.4.0- CNI 仕様のバージョンを指定します。
< 名前 >- 設定の名前を指定します。設定の名前は、ネットワークアタッチメント定義の名前の値と一致させてください。
"<main_CNI_plugin>"- 設定するメイン CNI プラグインの名前を指定します。
" チューニング "- CNI メタプラグインの名前を指定します。
" 真実 "- インターフェイスのオールマルチキャストモードを指定します。有効にすると、ネットワーク上のすべてのマルチキャストパケットがそのインターフェイスで受信されます。
ネットワーク接続定義の例
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: setallmulti namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "setallmulti", "plugins": [ { "type": "bridge" }, { "type": "tuning", "allmulti": true } ] }'次のコマンドを実行して、YAML ファイルで指定された設定を適用します。
$ oc apply -f tuning-allmulti.yaml出力例
networkattachmentdefinition.k8s.cni.cncf.io/setallmulti created次の
examplepod.yamlサンプルファイルで指定されているものと同様のネットワークアタッチメント定義を使用して Pod を作成します。apiVersion: v1 kind: Pod metadata: name: allmultipod namespace: default annotations: k8s.v1.cni.cncf.io/networks: setallmulti spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefaultここでは、以下のようになります。
metadata.annotations.k8s.v1.cni.cncf.io/networks-
設定された
NetworkAttachmentDefinitionの名前を指定します。 spec.containers.securityContext.runAsUser- コンテナーを実行するユーザー ID を指定します。
spec.containers.securityContext.runAsGroup- コンテナーの実行に使用するプライマリーグループ ID を指定します。
spec.containers.securityContext.allowPrivilegeEscalation-
Pod が特権昇格を許可するよう要求できるかどうかを指定します。指定しない場合、デフォルトで true に設定されます。このブール値は、
no_new_privsフラグがコンテナープロセスに設定されるかどうかを直接制御します。 spec.containers.securityContext.capabilities- 完全なルートアクセス権限を与えずに、特権的な操作を指定します。このポリシーにより、すべての機能が Pod から削除されます。
spec.containers.securityContext.runAsNonRoot: true- UID が 0 以外のユーザーでコンテナーが実行されるように指定します。
spec.containers.securityContext.seccompProfile- Pod またはコンテナーワークロードのデフォルトの seccomp プロファイルを指定します。
次のコマンドを実行して、YAML ファイルで指定された設定を適用します。
$ oc apply -f examplepod.yaml次のコマンドを実行して、Pod が作成されていることを確認します。
$ oc get pod出力例
NAME READY STATUS RESTARTS AGE allmultipod 1/1 Running 0 23s次のコマンドを実行して、Pod にログインします。
$ oc rsh allmultipod次のコマンドを実行して、Pod に関連付けられているすべてのインターフェイスをリスト表示します。
sh-4.4# ip link出力例
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8901 qdisc noqueue state UP mode DEFAULT group default link/ether 0a:58:0a:83:00:10 brd ff:ff:ff:ff:ff:ff link-netnsid 0 3: net1@if24: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether ee:9b:66:a4:ec:1d brd ff:ff:ff:ff:ff:ff link-netnsid 0ここでは、以下のようになります。
eth0@if22- プライマリーインターフェイスを指定します。
net1@if24- 全マルチキャストモード (ALLMULTI フラグ) をサポートするネットワーク接続定義で設定されたセカンダリーインターフェイスを指定します。