CNI と nerdctl の併用
nerdctlはコンテナネットワークにCNIプラグインを使用しており、
--network
または --net
オプションのいずれかを使用してネットワークの設定をおこなえます。
基本ネットワーク
nerdctlは、いくつかの基本的なタイプのCNIプラグインを構成なしでサポートします。
Linuxシステムの場合(CNIプラグインがインストールされている必要があります)、基本的な
CNI プラグインの種類は、bridge
、portmap
、firewall
、tuning
です。
Windows の場合、サポートされているCNIプラグインタイプはnat
のみです。
Linux のデフォルトのネットワークbridge
と Windows の nat
(
ネットワーク オプションは設定しないでください。
Linuxのデフォルトのネットワークbridge
の設定:
{
"cniVersion": "1.0.0",
"name": "bridge",
"plugins": [
{
"type": "bridge",
"bridge": "nerdctl0",
"isGateway": true,
"ipMasq": true,
"hairpinMode": true,
"ipam": {
"type": "host-local",
"routes": [{ "dst": "0.0.0.0/0" }],
"ranges": [
[
{
"subnet": "10.4.0.0/24",
"gateway": "10.4.0.1"
}
]
]
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
},
{
"type": "firewall",
"ingressPolicy": "same-bridge"
},
{
"type": "tuning"
}
]
}
ブリッジの分離
nerdctl >= 0.18 は、ファイアウォール
プラグイン >= 1.1.0 がインストールされている場合、ingressPolicy
を same-bridge
に設定します。
この ingressPolicy
は、nerdctl <= 0.17 で使用される CNI 分離
プラグインを置き換えます。
分離
プラグインが見つかった場合、nerdctl は ingressPolicy
の代わりに分離
プラグインを使用します。
分離
プラグインは非推奨となり、nerdctl
の将来のバージョンではingressPolicy
のみがサポートされます。
ファイアウォール
プラグイン >= 1.1.0 も分離
プラグインも見つからない場合、nerdctl はブリッジ分離を有効にしません。
つまり、--net=foo
のコンテナは --net=bar
のコンテナに接続できます。
macvlan/IPvlan ネットワーク
nerdctlは、macvlanおよびIPvlanネットワークドライバもサポートしています。
特定の物理ネットワークインターフェースとブリッジする macvlan
ネットワークを作成するには、--driver macvlan
を
nerdctl network create
コマンドを実行します。
# nerdctl network create mac0 --driver macvlan \
--subnet=192.168.5.0/24
--gateway=192.168.5.2
-o parent=eth0
トラフィックがホスト上で物理的に通過するインターフェイスである親
を指定できます。
デフォルトはデフォルト・ルート・インターフェースです。
また、サブネット
はネットワークインターフェイスと同じネットワークの下にある必要があります。
より簡単な方法は、DHCPを使用してIPを割り当てることです。
--driver ipvlan
を使用するとipvlan
ネットワークを作成でき、IPvlanのデフォルトモードはl2
です。
カスタムネットワーク
また、構成ファイルを提供することで、CNI ネットワークをカスタマイズすることもできます。
たとえば、1 つの構成ファイル (/etc/cni/net.d/10-mynet.conf
) があるとします。
bridge
ネットワークの場合:
{
"cniVersion": "1.0.0",
"name": "mynet",
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "172.19.0.0/24",
"routes": [
{ "dst": "0.0.0.0/0" }
]
}
}
mynet
という名前の新しい CNI ネットワークが構成され、
このネットワークを使用してコンテナを作成します。
# nerdctl run -it --net mynet --rm alpine ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if6120: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 5e:5b:3f:0c:36:56 brd ff:ff:ff:ff:ff:ff
inet 172.19.0.51/24 brd 172.19.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5c5b:3fff:fe0c:3656/64 scope link tentative
valid_lft forever preferred_lft forever