Red Hat Training
A Red Hat training course is available for OpenShift Container Platform
6.3. 追加のネットワークインターフェースの作成
Pod の追加インターフェースは、カスタムリソース (CR) として保存される CNI 設定で定義されます。これらの CR は、oc ツールを使用して作成し、一覧表示し、編集し、削除できます。
以下の手順は、Pod に macvlan インターフェースを設定します。この設定は、すべての実稼働環境に適用されない可能性がありますが、他の CNI プラグインに同じ手順を使用できます。
6.3.1. 追加インターフェースの CNI 設定の CR としての作成
追加インターフェースを Pod に割り当てる必要がある場合、インターフェースを定義する CR は Pod と同じプロジェクト (namespace) に置かれる必要があります。
CNI 設定を CR として保存するプロジェクト、およびその CR を使用する Pod を作成します。
$ oc new-project multinetwork-example
追加のネットワークインターフェースを定義する CR を作成します。以下の内容を含む、
macvlan-conf.yamlという YAML ファイルを作成します。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition 1 metadata: name: macvlan-conf 2 spec: config: '{ 3 "cniVersion": "0.3.0", "type": "macvlan", "master": "eth0", "mode": "bridge", "ipam": { "type": "host-local", "subnet": "192.168.1.0/24", "rangeStart": "192.168.1.200", "rangeEnd": "192.168.1.216", "routes": [ { "dst": "0.0.0.0/0" } ], "gateway": "192.168.1.1" } }'
設定はプラグインに固有のものです。CNI 設定部分の
type行に注意してください。CNI 設定の部分のtype行をメモしてください。 この例では、ネットワーク用の IPAM (IP アドレス管理) パラメーターのほかに、masterフィールドは、Pod をホストするノードにあるネットワークインターフェースを参照する必要があります。以下のコマンドを実行して CR を作成します。
$ oc create -f macvlan-conf.yaml
この例は、macvlan CNI プラグインをベースにしています。AWS 環境では、macvlan トラフィックはフィルターされる可能性があるため、必要な宛先に到達しない可能性があります。
6.3.2. 追加インターフェースの CR の管理
追加インターフェースの CR は、oc CLI を使用して管理できます。
以下のコマンドを使用して、追加リソースの CR を一覧表示します。
$ oc get network-attachment-definitions.k8s.cni.cncf.io
以下のコマンドを使用して、追加インターフェースの CR を削除します。
$ oc delete network-attachment-definitions.k8s.cni.cncf.io macvlan-conf
6.3.3. CR を使用するアノテーション付き Pod の作成
追加インターフェースを使用する Pod を作成するには、CR を参照するアノテーションを使用します。以下の内容を含む Pod についての samplepod.yaml という YAML ファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
name: samplepod
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-conf 1
spec:
containers:
- name: samplepod
command: ["/bin/bash", "-c", "sleep 2000000000000"]
image: centos/tools- 1
annotationsフィールドには、k8s.v1.cni.cncf.io/networks: macvlan-confが含まれます。 これは、先に定義した CR のnameフィールドに相関します。
以下のコマンドを実行して samplepod Pod を作成します。
$ oc create -f samplepod.yaml
追加のネットワークインターフェースが作成され、Pod に割り当てられているのを確認するには、以下のコマンドを使用して IPv4 アドレス情報を一覧表示します。
$ oc exec -it samplepod -- ip -4 addr
3 つのインターフェースが出力に一覧表示されます。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 1 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 3: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP link-netnsid 0 2 inet 10.244.1.4/24 scope global eth0 valid_lft forever preferred_lft forever 4: net1@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link-netnsid 0 3 inet 192.168.1.203/24 scope global net1 valid_lft forever preferred_lft forever
6.3.3.1. 複数インターフェースの Pod への割り当て
複数の追加インターフェースを Pod に割り当てるには、複数の名前を、Pod 定義の annotations フィールドにカンマ区切りの形式で指定します。
Pod 定義の以下の annotations フィールドは、追加インターフェースの複数の異なる CR を指定します。
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-conf, tertiary-conf, quaternary-conf
Pod 定義の以下の annotations フィールドは、追加インターフェースに同じ CR を指定します。
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-conf, macvlan-conf6.3.4. 実行中の Pod のインターフェース設定の表示
Pod の実行後に、作成された追加インターフェースの設定を確認できます。先の例と同じ Pod を表示するには、以下のコマンドを実行します。
$ oc describe pod samplepod
出力の metadata セクションには、JSON 形式で表示されるアノテーションの一覧が含まれます。
Annotations:
k8s.v1.cni.cncf.io/networks: macvlan-conf
k8s.v1.cni.cncf.io/networks-status:
[{
"name": "openshift-sdn",
"ips": [
"10.131.0.10"
],
"default": true,
"dns": {}
},{
"name": "macvlan-conf", 1
"interface": "net1", 2
"ips": [ 3
"192.168.1.200"
],
"mac": "72:00:53:b4:48:c4", 4
"dns": {} 5
}]
最初のアノテーション k8s.v1.cni.cncf.io/networks: macvlan-conf は、例で作成された CR を参照します。このアノテーションは Pod 定義で指定されています。
2 つ目のアノテーションは、 k8s.v1.cni.cncf.io/networks-status です。k8s.v1.cni.cncf.io/networks-status には 2 つのインターフェースが一覧表示されます。
-
最初のインターフェースは、デフォルトネットワーク
openshift-sdnのインターフェースを記述します。このインターフェースはeth0として作成されます。これは、クラスター内の通信に使用されます。 -
2 つ目のインターフェースは、作成した追加インターフェース
net1です。上記の出力は、Pod に割り当てられた IP アドレスなど、インターフェースの作成時に設定されたいくつかのキーの値を一覧表示しています。