名称¶
podman-network.unit - 用于使用 Quadlet 管理 Podman 网络的 systemd 单元文件
简介¶
名称.network
描述¶
网络文件以 .network
扩展名命名,并包含一个 [Network]
部分,描述了命名的 Podman 网络。生成的服务是一次性命令,用于确保网络在主机上存在,如果需要则创建它。
默认情况下,Podman 网络与单元具有相同的名称,但带有 systemd-
前缀,即对于名为 $NAME.network
的网络文件,生成的 Podman 网络名为 systemd-$NAME
,生成的服务文件为 $NAME-network.service
。NetworkName
选项允许使用用户提供的名称覆盖此默认名称。
请注意,默认情况下,停止相应的服务不会删除 podman 网络——这可以通过 NetworkDeleteOnStop=true
选项覆盖。
此外,不支持更新现有网络。要更新网络参数,您需要首先手动删除 podman 网络,然后重新启动服务。
使用网络单元允许容器依赖于自动预创建的网络。当使用特殊选项控制网络创建时,这特别有趣,因为 Podman 否则会使用默认选项创建网络。
选项¶
[Network]
的有效选项如下所示
[Network] 选项 |
podman network create 等效项 |
---|---|
ContainersConfModule=/etc/nvd.conf |
--module=/etc/nvd.conf |
DisableDNS=true |
--disable-dns |
DNS=192.168.55.1 |
--dns=192.168.55.1 |
Driver=bridge |
--driver bridge |
Gateway=192.168.55.3 |
--gateway 192.168.55.3 |
GlobalArgs=--log-level=debug |
--log-level=debug |
InterfaceName=enp1 |
--interface-name enp1 |
Internal=true |
--internal |
IPAMDriver=dhcp |
--ipam-driver dhcp |
IPRange=192.168.55.128/25 |
--ip-range 192.168.55.128/25 |
IPv6=true |
--ipv6 |
Label=”XYZ” |
--label “XYZ” |
NetworkDeleteOnStop=true |
在停止单元时添加 ExecStopPost 以删除网络 |
NetworkName=foo |
podman network create foo |
Options=isolate=true |
--opt isolate=true |
PodmanArgs=--dns=192.168.55.1 |
--dns=192.168.55.1 |
Subnet=192.5.0.0/16 |
--subnet 192.5.0.0/16 |
ContainersConfModule=module
¶
加载指定的 containers.conf(5) 模块。
此选项可以列出多次。
DisableDNS=true
¶
禁用此网络的 DNS 插件,如果启用,该插件可以执行容器到容器的名称解析。它仅支持 bridge
驱动程序,对于其他驱动程序,它始终处于禁用状态。
DNS=ipaddr
¶
设置自定义 DNS 服务器。
此选项可用于覆盖传递给容器的 DNS 配置。通常,当主机 DNS 配置对容器无效时(例如,127.0.0.1),这是必要的。在这种情况下,每个运行都需要 DNS=. 标志。
可以指定特殊值 none 来禁止 Podman 在容器中创建 /etc/resolv.conf。然后,镜像中的 /etc/resolv.conf 文件将不加修改地使用。
请注意,ipaddr 可以直接添加到容器的 /etc/resolv.conf 中。但这并非保证。例如,将一个自定义网络(其 dns_enabled 设置为 true)传递给 --network 将导致 /etc/resolv.conf 只引用 aardvark-dns 服务器。aardvark-dns 然后将所有非容器名称查询转发到提供的 ipaddr。
Driver=driver
¶
管理网络的驱动程序。目前支持 bridge
、macvlan
和 ipvlan
。默认为 bridge
。作为无根用户,macvlan
和 ipvlan
驱动程序无法访问主机网络接口,因为无根网络需要单独的网络命名空间。
netavark 后端允许使用所谓的 netavark 插件,参见 netavark 中的 plugin-API.md 文档。二进制文件必须放置在指定的目录中,以便 podman 可以发现它,此列表在 containers.conf(5) 的 [network]
部分下的 netavark_plugin_dirs
中设置。
然后可以将插件的名称用作驱动程序来为您的插件创建网络。可以使用 podman info --format {{.Plugins.Network}}
查看所有受支持的驱动程序和插件列表。
请注意,macvlan
和 ipvlan
驱动程序不支持端口转发。对插件的端口转发支持取决于插件的实现。
Gateway=ip
¶
为子网定义网关。要提供网关地址,需要一个 subnet 选项。可以多次指定。
GlobalArgs=
¶
此键包含在生成的文件中紧跟在 podman
命令之后传递的参数列表。它可用于访问生成器否则不支持的 Podman 功能。由于生成器不清楚这些参数可能导致的意外交互,因此不建议使用此选项。
其格式是空格分隔的参数列表,可以选择单独转义以允许包含空格和其他控制字符。
此键可以列出多次。
InterfaceName=name
¶
此选项映射网络配置中的 network_interface 选项,请参阅 podman network inspect。根据驱动程序,这可以有不同的效果;对于 bridge
,它使用桥接接口名称。对于 macvlan
和 ipvlan
,它是主机上的父设备。它与 --opt parent=...
相同。
Internal=true
¶
当使用 bridge
网络时,限制此网络的外部访问。请注意,当使用 CNI 后端时,DNS 将自动禁用,请参阅 --disable-dns。
当使用 macvlan
或 ipvlan
驱动程序并启用此选项时,不会向容器添加默认路由。因为它绕过了主机网络堆栈,Podman 无法设置额外的限制,并且如果运行特权容器,它可以自己设置默认路由。如果这是一个问题,则应在您的实际网络网关上阻止容器连接。
使用 bridge
驱动程序并启用此选项具有以下效果
全局 IP 转发 sysctls 不会在主机网络命名空间中更改。
桥接接口上禁用 IP 转发,而不是设置防火墙。
不会向容器添加默认路由。
在所有情况下,启用此选项后,aardvark-dns 只会解析容器名称。其他查询将以 NXDOMAIN
回答。
IPAMDriver=driver
¶
为网络设置 ipam 驱动程序(IP 地址管理驱动程序)。未设置时,podman 根据网络驱动程序自动选择 ipam 驱动程序。
有效值为:
dhcp
: IP 地址从网络上的 dhcp 服务器分配。当使用 netavark 后端时,必须启用netavark-dhcp-proxy.socket
才能在容器启动时启动 dhcp-proxy,对于 CNI,请改用cni-dhcp.socket
单元。host-local
: IP 地址在本地分配。none
: 不向接口分配 IP 地址。
在 podman network inspect 输出的 ipam_options
字段下查看驱动程序。
IPRange=ip
¶
从范围分配容器 IP。该范围必须是 CIDR 表示法中的完整子网,或者是 <startIP>-<endIP>
语法,与 CIDR 子网相比,这允许更灵活的范围。ip-range 选项必须与 subnet 选项一起使用。可以多次指定。
IPv6=true
¶
启用 IPv6(双栈)网络。如果未给出子网,它会分配一个 ipv4 和一个 ipv6 子网。
Label=key=value [key=value ...]
¶
在网络上设置一个或多个 OCI 标签。
NetworkDeleteOnStop=true
(默认为 false
)¶
设置为 true
时,服务停止时网络将被删除
NetworkName=foo
¶
Podman 网络的(可选)名称。如果未指定,默认值与单元名称相同,但带有 systemd-
前缀,即 $name.network
文件创建一个 systemd-$name
Podman 网络,以避免与用户管理的网络冲突。
Options=option
¶
设置驱动程序特定选项。
所有驱动程序都接受 mtu
、metric
、no_default_route
和选项。
mtu
: 设置最大传输单元 (MTU),并接受整数值。metric
设置连接到此网络的每个容器中创建的默认路由的路由度量。接受正整数值。只能与 Netavark 网络后端一起使用。no_default_route
: 如果设置为 1,Podman 将不会自动向子网添加默认路由。仍然可以通过使用--route
创建自定义路由来手动添加路由。
此外,bridge
驱动程序支持以下选项
vlan
: 此选项分配 VLAN 标签并启用 vlan_filtering。默认为无。isolate
: 此选项通过阻止启用此选项的网络之间的流量来隔离网络。com.docker.network.bridge.name
: 此选项将给定名称分配给创建的 Linux Bridgecom.docker.network.driver.mtu
: 设置最大传输单元 (MTU),并接受整数值。vrf
: 此选项将 VRF 分配给桥接接口。它接受 VRF 的名称,默认为无。只能与 Netavark 网络后端一起使用。mode
: 此选项在接口上设置指定的桥接模式。默认为managed
。支持的值managed
: Podman 创建和删除桥接,并更改其 sysctls。它添加防火墙规则以伪装传出流量,并使用 DNAT 设置传入流量的端口转发。unmanaged
: Podman 使用现有桥接。在您想要启动使用该网络的容器时,它必须存在。不会有 NAT 或端口转发,即使在创建容器时传递了此类选项。
macvlan
和 ipvlan
驱动程序支持以下选项
parent
: 用于 macvlan 接口的主机设备。默认为默认路由接口。mode
: 此选项在接口上设置指定的 ip/macvlan 模式。macvlan
支持的值为bridge
、private
、vepa
、passthru
。默认为bridge
。ipvlan
支持的值为l2
、l3
、l3s
。默认为l2
。
此外,macvlan
驱动程序支持 bclim
选项
bclim
: 设置广播队列的阈值。必须是 32 位整数。将此值设置为-1
将完全禁用广播队列。
PodmanArgs=
¶
此键包含在生成的文件中直接传递到 podman
命令末尾的参数列表。它可用于访问生成器否则不支持的 Podman 功能。由于生成器不清楚这些参数可能导致的意外交互,因此不建议使用此选项。
其格式是空格分隔的参数列表,可以选择单独转义以允许包含空格和其他控制字符。
此键可以列出多次。
Subnet=subnet
¶
CIDR 表示法中的子网。可以多次指定,为此网络分配多个子网。
这对于设置静态 ipv4 和 ipv6 子网很有用。
示例¶
基本桥接网络
[Network]
NetworkName=private0
Subnet=10.10.0.0/16
Gateway=10.10.0.1
使用 IPAM 驱动程序启用 IPv6
[Network]
NetworkName=v6net
Subnet=fd00:dead:beef::/64
IPv6=true
IPAMDriver=host-local
另请参阅¶
systemd.unit(5)、podman-network-create(1)、[podman-quadlet(7)]