![見出し画像](https://assets.st-note.com/production/uploads/images/128689308/rectangle_large_type_2_cf6fcf22f73dd0d82af1c2e37d101669.png?width=1200)
CNI と nerdctl の併用
はじめに 本文章は、 containerdプロジェクトが公開しているLinuxでコンテナーを操作するためのコマンド nerdctl のマニュアルを独自に翻訳したものです。 オリジナルの著作権はcontainerdプロジェクトが保有しておりApache-2.0ライセンスで頒布されています。本翻訳と編集の著作権は編訳者が保有しています。オリジナルの英語ドキュメントはこちらで参照できます。
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を割り当てることです。
# nerdctl network create mac0 --driver macvlan --ipam-driver=dhcp
--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