如何使用Podman复制docker macvlan网络?

时间:2019-12-28 21:29:31

标签: cni podman macvlan

我在fedora工作站上有一个工作正常的docker实现,用于托管Unifi Network Controller应用程序。我使用macvlan将静态IP分配给控制器。用于创建macvlan的docker network命令为:

class Rock:
    # [...]

    def collision(self, player, playerX, playerY):

        tolerability = 5
        player_rect = pygame.Rect(playerX+tolerability, playerY,
                                  player.get_width()-2*tolerability, player.get_height())
        rock_rect = pygame.Rect(self.x, self.y, rock_width, rock_height)

        #check collision
        if player_rect.colliderect(rock_rect):
            #delete the rock from the screen
            self.x = 5000

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

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

我想用podman代替它来实现。是否有有用的在线教程来说明如何使用podman使用的CNI实现?特别是macvlan插件?我不能决定应该使用静态IPAM插件还是本地主机IPAM插件。

Brent Baude的Leasing Routable IP addresses with Podman containers是一个很好的开始,但专注于使用dhcp IPAM插件。

谢谢

2 个答案:

答案 0 :(得分:0)

通过额外的测试并阅读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

答案 1 :(得分:0)

我看到您有一个适合您的解决方案,但我建议使用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.0/24网络上分配192.168.110.224/27范围内的地址(我实际上已指定了192.168.110.226的范围开始避免分配用--aux-address保留的192.168.110.225地址。


您可以使用--ip的{​​{1}}参数来启动具有特定IP的容器。给定上面定义的网络,我们可以运行:

podman run