3

我在用于托管 Unifi 网络控制器应用程序的 Fedora 工作站上有一个可用的 docker 实现。我使用 macvlan 为控制器分配静态 IP。创建 macvlan 的 docker network 命令是:

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

控制器运行的容器被分配了一个静态 ip:

docker run --rm --init --network unifinet --ip 192.168.110.226 ....

我想使用 podman 作为替代来实现这一点。是否有有用的在线教程解释如何使用 podman 使用的 CNI 的实现?特别是macvlan插件?我无法决定是否应该使用静态 IPAM 插件或本地主机 IPAM 插件。

Brent Baude 的使用 Podman 容器租赁可路由 IP 地址是一个好的开始,但重点是使用 dhcp IPAM 插件。

谢谢你

4

2 回答 2

2

我看到您有一个适合您的解决方案,但我会建议使用host-localIPAM 插件,而不是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 的范围开始,这将避免分配您的 192.168.110.225 地址你已经预订了--aux-address)。


--ip您可以使用参数 to启动具有特定 ip 的容器podman run。鉴于上面定义的网络,我们可以运行:

podman run --net unifinet --ip 192.168.110.230 ...
于 2019-12-29T03:56:11.890 回答
1

额外的测试和阅读 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
于 2019-12-28T23:57:20.283 回答