名称

podman-network.unit - 用于使用 Quadlet 管理 Podman 网络的 systemd 单元文件

简介

名称.network

描述

网络文件以 .network 扩展名命名,并包含一个 [Network] 部分,描述了命名的 Podman 网络。生成的服务是一次性命令,用于确保网络在主机上存在,如果需要则创建它。

默认情况下,Podman 网络与单元具有相同的名称,但带有 systemd- 前缀,即对于名为 $NAME.network 的网络文件,生成的 Podman 网络名为 systemd-$NAME,生成的服务文件为 $NAME-network.serviceNetworkName 选项允许使用用户提供的名称覆盖此默认名称。

请注意,默认情况下,停止相应的服务不会删除 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

管理网络的驱动程序。目前支持 bridgemacvlanipvlan。默认为 bridge。作为无根用户,macvlanipvlan 驱动程序无法访问主机网络接口,因为无根网络需要单独的网络命名空间。

netavark 后端允许使用所谓的 netavark 插件,参见 netavark 中的 plugin-API.md 文档。二进制文件必须放置在指定的目录中,以便 podman 可以发现它,此列表在 containers.conf(5)[network] 部分下的 netavark_plugin_dirs 中设置。

然后可以将插件的名称用作驱动程序来为您的插件创建网络。可以使用 podman info --format {{.Plugins.Network}} 查看所有受支持的驱动程序和插件列表。

请注意,macvlanipvlan 驱动程序不支持端口转发。对插件的端口转发支持取决于插件的实现。

Gateway=ip

为子网定义网关。要提供网关地址,需要一个 subnet 选项。可以多次指定。

GlobalArgs=

此键包含在生成的文件中紧跟在 podman 命令之后传递的参数列表。它可用于访问生成器否则不支持的 Podman 功能。由于生成器不清楚这些参数可能导致的意外交互,因此不建议使用此选项。

其格式是空格分隔的参数列表,可以选择单独转义以允许包含空格和其他控制字符。

此键可以列出多次。

InterfaceName=name

此选项映射网络配置中的 network_interface 选项,请参阅 podman network inspect。根据驱动程序,这可以有不同的效果;对于 bridge,它使用桥接接口名称。对于 macvlanipvlan,它是主机上的父设备。它与 --opt parent=... 相同。

Internal=true

当使用 bridge 网络时,限制此网络的外部访问。请注意,当使用 CNI 后端时,DNS 将自动禁用,请参阅 --disable-dns

当使用 macvlanipvlan 驱动程序并启用此选项时,不会向容器添加默认路由。因为它绕过了主机网络堆栈,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

设置驱动程序特定选项。

所有驱动程序都接受 mtumetricno_default_route 和选项。

  • mtu: 设置最大传输单元 (MTU),并接受整数值。

  • metric 设置连接到此网络的每个容器中创建的默认路由的路由度量。接受正整数值。只能与 Netavark 网络后端一起使用。

  • no_default_route: 如果设置为 1,Podman 将不会自动向子网添加默认路由。仍然可以通过使用 --route 创建自定义路由来手动添加路由。

此外,bridge 驱动程序支持以下选项

  • vlan: 此选项分配 VLAN 标签并启用 vlan_filtering。默认为无。

  • isolate: 此选项通过阻止启用此选项的网络之间的流量来隔离网络。

  • com.docker.network.bridge.name: 此选项将给定名称分配给创建的 Linux Bridge

  • com.docker.network.driver.mtu: 设置最大传输单元 (MTU),并接受整数值。

  • vrf: 此选项将 VRF 分配给桥接接口。它接受 VRF 的名称,默认为无。只能与 Netavark 网络后端一起使用。

  • mode: 此选项在接口上设置指定的桥接模式。默认为 managed。支持的值

    • managed: Podman 创建和删除桥接,并更改其 sysctls。它添加防火墙规则以伪装传出流量,并使用 DNAT 设置传入流量的端口转发。

    • unmanaged: Podman 使用现有桥接。在您想要启动使用该网络的容器时,它必须存在。不会有 NAT 或端口转发,即使在创建容器时传递了此类选项。

macvlanipvlan 驱动程序支持以下选项

  • parent: 用于 macvlan 接口的主机设备。默认为默认路由接口。

  • mode: 此选项在接口上设置指定的 ip/macvlan 模式。

    • macvlan 支持的值为 bridgeprivatevepapassthru。默认为 bridge

    • ipvlan 支持的值为 l2l3l3s。默认为 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)]