如何使用 podman 复制 docker macvlan 网络?
How do I replicate a docker macvlan network with podman?
我在用于托管 Unifi 网络控制器应用程序的 fedora 工作站上有一个有效的 docker 实现。我使用 macvlan 为控制器分配静态 IP。 docker 创建 macvlan 的网络命令是:
docker network create -d macvlan -o parent=enp8s0 --subnet 192.168.110.0/24 --gateway 192.168.110.1 --ip-range 192.168.110.224/27 --aux-address 'host=192.168.110.225' unifinet
controller运行的容器分配静态ip:
docker run --rm --init --network unifinet --ip 192.168.110.226 ....
我想使用 podman 作为替代来实现它。是否有有用的在线教程解释如何使用 podman 使用的 CNI 实现?特别是 macvlan 插件?我无法决定我应该使用静态 IPAM 插件还是本地主机 IPAM 插件。
Brent Baude 的 Leasing Routable IP addresses with Podman containers 是一个好的开始,但重点在于使用 dhcp IPAM 插件。
谢谢
额外的测试和阅读 libpod 中的一些问题评论 github 产生了以下解决方案,它定义了一个 macvlan 并使用静态 IPAM 插件分配了一个静态 ip。
在 /etc/cni/net.d 中创建一个名为 90-unifinet.conflist:
的文件
{
"cniVersion": "0.4.0",
"name": "unifinet",
"plugins": [
{
"type": "macvlan",
"master": "enp8s0",
"ipam": {
"type": "static",
"addresses": [
{
"address": "192.168.110.226/24",
"gateway": "192.168.110.1"
}
],
"routes": [
{ "dst": "0.0.0.0/0" }
],
"dns": {
"nameservers": ["192.168.110.1"]
}
}
}
]
}
那么下面的就可以了
podman run -it --rm --network unifinet alpine ping 8.8.8.8 -c 4
我看到您有一个适合您的解决方案,但我建议改用 host-local
IPAM 插件,而不是 static
(这需要您显式分配地址)。相应的配置可能如下所示:
{
"cniVersion": "0.3.0",
"name": "unifinet",
"plugins": [
{
"type": "macvlan",
"mode": "bridge",
"master": "eth0",
"ipam": {
"type": "host-local",
"ranges": [
[{
"subnet": "192.168.110.0/24",
"rangeStart": "192.168.110.226",
"rangeEnd": "192.168.110.255",
"gateway": "192.168.110.1"
}]
],
"routes": [
{"dst": "0.0.0.0/0"}
]
}
}
]
}
就像您原来的 docker network create
命令一样,这将从 192.168.110.224/27 范围分配到 192.168.110.0/24 网络上的地址(我实际上指定了范围从 192.168.110.226 开始,这将避免分配您使用 --aux-address
).
保留的 192.168.110.225 地址
您可以使用 podman run
的 --ip
参数启动具有特定 ip 的容器。给定上面定义的网络,我们可以 运行:
podman run --net unifinet --ip 192.168.110.230 ...
我在用于托管 Unifi 网络控制器应用程序的 fedora 工作站上有一个有效的 docker 实现。我使用 macvlan 为控制器分配静态 IP。 docker 创建 macvlan 的网络命令是:
docker network create -d macvlan -o parent=enp8s0 --subnet 192.168.110.0/24 --gateway 192.168.110.1 --ip-range 192.168.110.224/27 --aux-address 'host=192.168.110.225' unifinet
controller运行的容器分配静态ip:
docker run --rm --init --network unifinet --ip 192.168.110.226 ....
我想使用 podman 作为替代来实现它。是否有有用的在线教程解释如何使用 podman 使用的 CNI 实现?特别是 macvlan 插件?我无法决定我应该使用静态 IPAM 插件还是本地主机 IPAM 插件。
Brent Baude 的 Leasing Routable IP addresses with Podman containers 是一个好的开始,但重点在于使用 dhcp IPAM 插件。
谢谢
额外的测试和阅读 libpod 中的一些问题评论 github 产生了以下解决方案,它定义了一个 macvlan 并使用静态 IPAM 插件分配了一个静态 ip。
在 /etc/cni/net.d 中创建一个名为 90-unifinet.conflist:
的文件{
"cniVersion": "0.4.0",
"name": "unifinet",
"plugins": [
{
"type": "macvlan",
"master": "enp8s0",
"ipam": {
"type": "static",
"addresses": [
{
"address": "192.168.110.226/24",
"gateway": "192.168.110.1"
}
],
"routes": [
{ "dst": "0.0.0.0/0" }
],
"dns": {
"nameservers": ["192.168.110.1"]
}
}
}
]
}
那么下面的就可以了
podman run -it --rm --network unifinet alpine ping 8.8.8.8 -c 4
我看到您有一个适合您的解决方案,但我建议改用 host-local
IPAM 插件,而不是 static
(这需要您显式分配地址)。相应的配置可能如下所示:
{
"cniVersion": "0.3.0",
"name": "unifinet",
"plugins": [
{
"type": "macvlan",
"mode": "bridge",
"master": "eth0",
"ipam": {
"type": "host-local",
"ranges": [
[{
"subnet": "192.168.110.0/24",
"rangeStart": "192.168.110.226",
"rangeEnd": "192.168.110.255",
"gateway": "192.168.110.1"
}]
],
"routes": [
{"dst": "0.0.0.0/0"}
]
}
}
]
}
就像您原来的 docker network create
命令一样,这将从 192.168.110.224/27 范围分配到 192.168.110.0/24 网络上的地址(我实际上指定了范围从 192.168.110.226 开始,这将避免分配您使用 --aux-address
).
您可以使用 podman run
的 --ip
参数启动具有特定 ip 的容器。给定上面定义的网络,我们可以 运行:
podman run --net unifinet --ip 192.168.110.230 ...