是否有可能...
- 使用 podman 运行容器
- 它在主机所在的同一子网上有一个 IP
- 可以从子网上的所有其他主机访问
- 包括主机本身?
我使用 macvlan 和 ipvlan 驱动程序取得了部分成功——我能够运行一个容器,给它一个 IP 地址,然后这个 IP 可以从网络上的所有其他主机访问。
但是,我无法访问运行容器的主机或从主机访问。
我什至尝试使用最新版本的podman、netavark、cni-plugins从源代码构建,这使 ipvlan 驱动程序具有相同的结果。
我更喜欢指向描述如何完成此操作的指南的指针,但也欢迎提供故障排除建议。
为此,我只需要在主机上添加一个额外的 ipvlan 接口,如果 podman 也使用 ipvlan,它允许我与容器对话。
10.0.0.0/16
10.0.99.0/24
。该子网应专用于该主机上的容器。10.0.99.1
。这是主机可以用来与容器对话的接口。sudo vim /etc/cni/net.d/podnet.conflist
并将 rangeStart 从 更改10.0.99.1
为10.0.99.2
。要使用 systemd 创建 ipvlan 接口,我必须
IPVLAN = podnet
到[Network]
定义我的主机网络接口的文件部分,这将创建一个podnet
插入父级的网络接口。平心而论,同样的方法适用于 macvlan 而不是 ipvlan,但是我的部分网络无法通过 MACVlan 接口访问主机,因此我切换到 IPVlan 以获得更好的互操作性。
我遇到的另一个问题是由于 podman 默认为 netavark,而 netavark IPVlan 支持仅在 podman 4.5+ 中可用,而我仍在使用 4.3。切换网络后端以
cni
解决此问题。不完全是你问的,但你可以很简单地与主机共享相同的 IP 地址,继续阅读以查看它是否对你有任何帮助:
你需要做的是添加到
podman run
这--network=host
实质上意味着你与主机共享相同的网络堆栈,所以你应该考虑以下几点: