类型:nic
¶
注意
nic
设备类型支持容器和虚拟机。
NIC 支持容器和虚拟机的热插拔(ipvlan
NIC 类型除外)。
网络设备,也称为网络接口控制器或NIC,提供与网络的连接。Incus 支持几种不同类型的网络设备(NIC 类型)。
nictype
与 network
¶
在将网络设备添加到实例时,有两种方法可以指定要添加的设备类型:通过 nictype
设备选项或 network
设备选项。
这两个设备选项是互斥的,您只能在创建设备时指定其中一个。但是,请注意,当您指定 network
选项时,nictype
选项会从网络类型自动派生。
nictype
使用
nictype
设备选项时,您可以指定不受 Incus 控制的网络接口。因此,您必须指定 Incus 使用网络接口所需的所有信息。使用此方法时,必须在创建设备时指定
nictype
选项,并且以后无法更改。network
使用
network
设备选项时,NIC 将链接到现有的 托管网络。在这种情况下,Incus 拥有有关网络的所有必需信息,您只需在添加设备时指定网络名称即可。使用此方法时,Incus 会自动派生
nictype
选项。该值是只读的,无法更改。从网络继承的其他设备选项在 NIC 特定设备选项的“托管”列中标记为“是”。如果您使用的是
network
方法,则无法直接自定义这些选项以用于 NIC。
有关更多信息,请参见 关于网络。
可用的 NIC 类型¶
以下 NIC 可以使用 nictype
或 network
选项添加
bridged
:使用主机上的现有网桥,并创建一个虚拟设备对,将主机网桥连接到实例。macvlan
:基于现有网络设备设置一个新的网络设备,但使用不同的 MAC 地址。sriov
:将启用 SR-IOV 的物理网络设备的虚拟函数传递到实例。physical
:将主机的物理设备传递到实例。目标设备将从主机消失,并出现在实例中。
以下 NIC 只能使用 network
选项添加
ovn
:使用现有 OVN 网络,并创建一个虚拟设备对,将实例连接到该网络。
以下 NIC 只能使用 nictype
选项添加
ipvlan
: 基于现有网络设备设置新的网络设备,使用相同的 MAC 地址但不同的 IP。p2p
: 创建一对虚拟设备,将其中一端放入实例,另一端留在主机上。routed
: 创建一对虚拟设备来连接主机到实例,并设置静态路由和代理 ARP/NDP 条目,允许实例加入指定父接口的网络。
可用的设备选项取决于 NIC 类型,并在以下各节的表格中列出。
nictype
: bridged
¶
注意
您可以通过 nictype
选项或 network
选项选择此 NIC 类型(有关托管 bridge
网络的信息,请参见 桥接网络)。
一个 bridged
NIC 使用主机上的现有桥接,并创建一对虚拟设备来连接主机桥接到实例。
设备选项¶
类型为 bridged
的 NIC 设备具有以下设备选项
键 |
类型 |
默认值 |
托管 |
描述 |
---|---|---|---|---|
|
整数 |
- |
否 |
VM 的启动优先级(值越大,越优先启动) |
|
字符串 |
随机分配 |
否 |
主机内部接口的名称 |
|
字符串 |
随机分配 |
否 |
新接口的 MAC 地址 |
|
字符串 |
- |
否 |
通过 DHCP 分配给实例的 IPv4 地址(可以是 |
|
字符串 |
- |
否 |
要在主机上添加到 NIC 的 IPv4 静态路由的逗号分隔列表 |
|
字符串 |
- |
否 |
路由到 NIC 并发布到上行网络(BGP)的 IPv4 静态路由的逗号分隔列表 |
|
字符串 |
- |
否 |
通过 DHCP 分配给实例的 IPv6 地址(可以是 |
|
字符串 |
- |
否 |
要在主机上添加到 NIC 的 IPv6 静态路由的逗号分隔列表 |
|
字符串 |
- |
否 |
路由到 NIC 并发布到上行网络(BGP)的 IPv6 静态路由的逗号分隔列表 |
|
字符串 |
- |
否 |
出站流量的 I/O 限制,单位为 bit/s(支持各种后缀,请参见 存储、内存和网络限制的单位) |
|
字符串 |
- |
否 |
入站流量的 I/O 限制,单位为 bit/s(支持各种后缀,请参见 存储、内存和网络限制的单位) |
|
字符串 |
- |
否 |
入站和出站流量的 I/O 限制(与设置 |
|
整数 |
- |
否 |
出站流量的 |
|
整数 |
父 MTU |
是 |
新接口的 MTU |
|
字符串 |
内核分配 |
否 |
实例内部接口的名称 |
|
字符串 |
- |
否 |
将设备链接到的托管网络(而不是直接指定 |
|
字符串 |
- |
是 |
主机设备的名称(如果直接指定 |
|
整数 |
- |
否 |
NIC 的发送队列长度 |
|
布尔值 |
|
否 |
防止实例欺骗其他实例的 IPv4 地址(启用 |
|
布尔值 |
|
否 |
防止实例欺骗其他实例的 IPv6 地址(启用 |
|
布尔值 |
|
否 |
防止实例欺骗其他实例的 MAC 地址 |
|
布尔值 |
|
否 |
防止 NIC 与网络中启用了端口隔离的其他 NIC 通信 |
|
整数 |
- |
否 |
用于非标记流量的 VLAN ID(可以是 |
|
整数 |
- |
否 |
用于标记流量的 VLAN ID 或 VLAN 范围的逗号分隔列表 |
nictype
: macvlan
¶
注意
您可以通过 nictype
选项或 network
选项选择此 NIC 类型(有关托管 macvlan
网络的信息,请参见 Macvlan 网络)。
一个 macvlan
NIC 基于现有网络设备设置新的网络设备,但使用不同的 MAC 地址。
如果您使用的是 macvlan
NIC,Incus 主机与实例之间的通信是不可能的。主机和实例都可以与网关通信,但它们不能直接通信。
设备选项¶
类型为 macvlan
的 NIC 设备具有以下设备选项
键 |
类型 |
默认值 |
托管 |
描述 |
---|---|---|---|---|
|
整数 |
- |
否 |
VM 的启动优先级(值越大,越优先启动) |
|
布尔值 |
|
否 |
使用 GARP VLAN 注册协议注册 VLAN |
|
字符串 |
随机分配 |
否 |
新接口的 MAC 地址 |
|
字符串 |
|
否 |
Macvlan 模式( |
|
整数 |
父 MTU |
是 |
新接口的 MTU |
|
字符串 |
内核分配 |
否 |
实例内部接口的名称 |
|
字符串 |
- |
否 |
将设备链接到的托管网络(而不是直接指定 |
|
字符串 |
- |
是 |
主机设备的名称(如果直接指定 |
|
整数 |
- |
否 |
要连接到的 VLAN ID |
nictype
: sriov
¶
注意
您可以通过 nictype
选项或 network
选项选择此 NIC 类型(有关托管 sriov
网络的信息,请参见 SR-IOV 网络)。
一个 sriov
NIC 将支持 SR-IOV 的物理网络设备的虚拟功能传递到实例中。
支持 SR-IOV 的网络设备将一组虚拟功能 (VF) 与网络设备的单个物理功能 (PF) 关联。PF 是标准的 PCIe 功能。另一方面,VF 是非常轻量级的 PCIe 功能,专门用于数据移动。它们具有一组有限的配置功能,以防止更改 PF 的属性。
鉴于 VF 对系统来说就像常规的 PCIe 设备一样,它们可以像常规的物理设备一样传递到实例中。
- VF 分配
sriov
接口类型希望通过parent
属性传递系统上支持 SR-IOV 的网络设备的名称。然后,Incus 检查系统上是否有任何可用的 VF。默认情况下,Incus 分配它找到的第一个空闲 VF。如果它检测到没有启用的 VF 或所有当前启用的 VF 正在使用中,它会将支持的 VF 数增加到最大值,并使用第一个空闲 VF。如果所有可能的 VF 都在使用中,或者内核或网卡不支持增加 VF 数,则 Incus 会返回错误。
注意
如果您需要 Incus 使用特定的 VF,请使用
physical
NIC 而不是sriov
NIC,并将它的parent
选项设置为 VF 名称。
设备选项¶
类型为 sriov
的 NIC 设备具有以下设备选项
键 |
类型 |
默认值 |
托管 |
描述 |
---|---|---|---|---|
|
整数 |
- |
否 |
VM 的启动优先级(值越大,越优先启动) |
|
字符串 |
随机分配 |
否 |
新接口的 MAC 地址 |
|
整数 |
内核分配 |
是 |
新接口的 MTU |
|
字符串 |
内核分配 |
否 |
实例内部接口的名称 |
|
字符串 |
- |
否 |
将设备链接到的托管网络(而不是直接指定 |
|
字符串 |
- |
是 |
主机设备的名称(如果直接指定 |
|
布尔值 |
|
否 |
防止实例欺骗其他实例的 MAC 地址 |
|
整数 |
- |
否 |
要连接到的 VLAN ID |
nictype
: ovn
¶
注意
您只能通过 network
选项选择此 NIC 类型(有关托管 ovn
网络的信息,请参见 OVN 网络)。
一个 ovn
NIC 使用现有的 OVN 网络,并创建一对虚拟设备来连接实例到它。
- SR-IOV 硬件加速
要使用
acceleration=sriov
,您必须在您的 Incus 主机中拥有兼容的 SR-IOV 物理 NIC,该 NIC 支持以太网交换机设备驱动程序模型 (switchdev
)。Incus 假设物理 NIC (PF) 在switchdev
模式下配置并连接到 OVN 集成 OVS 桥接,并且它有一个或多个活动的虚拟功能 (VF)。要实现此目的,请遵循以下基本先决条件设置步骤
设置 PF 和 VF
在 PF 上激活一些 VF(在以下示例中称为
enp9s0f0np0
,PCI 地址为0000:09:00.0
)并取消绑定它们。在 PF 上启用
switchdev
模式和hw-tc-offload
。重新绑定 VF。
echo 4 > /sys/bus/pci/devices/0000:09:00.0/sriov_numvfs for i in $(lspci -nnn | grep "Virtual Function" | cut -d' ' -f1); do echo 0000:$i > /sys/bus/pci/drivers/mlx5_core/unbind; done devlink dev eswitch set pci/0000:09:00.0 mode switchdev ethtool -K enp9s0f0np0 hw-tc-offload on for i in $(lspci -nnn | grep "Virtual Function" | cut -d' ' -f1); do echo 0000:$i > /sys/bus/pci/drivers/mlx5_core/bind; done
通过启用硬件卸载并将 PF NIC 添加到集成桥接(通常称为
br-int
)来设置 OVSovs-vsctl set open_vswitch . other_config:hw-offload=true systemctl restart openvswitch-switch ovs-vsctl add-port br-int enp9s0f0np0 ip link set enp9s0f0np0 up
- VDPA 硬件加速
要使用
acceleration=vdpa
,您必须拥有兼容的 VDPA 物理 NIC。设置与 SR-IOV 硬件加速相同,只是您还必须启用vhost_vdpa
模块,并检查您是否有一些可用的 VDPA 管理设备modprobe vhost_vdpa && vdpa mgmtdev show
设备选项¶
类型为 ovn
的 NIC 设备具有以下设备选项
键 |
类型 |
默认值 |
托管 |
描述 |
---|---|---|---|---|
|
字符串 |
|
否 |
启用硬件卸载( |
|
整数 |
- |
否 |
VM 的启动优先级(值越大,越优先启动) |
|
字符串 |
随机分配 |
否 |
主机内部接口的名称 |
|
字符串 |
随机分配 |
否 |
新接口的 MAC 地址 |
|
字符串 |
- |
否 |
通过 DHCP 分配给实例的 IPv4 地址, |
|
字符串 |
- |
否 |
指向 NIC 的 IPv4 静态路由的逗号分隔列表 |
|
字符串 |
- |
否 |
指向 NIC 并发布到上行链路网络的 IPv4 静态路由的逗号分隔列表 |
|
字符串 |
- |
否 |
通过 DHCP 分配给实例的 IPv6 地址, |
|
字符串 |
- |
否 |
指向 NIC 的 IPv6 静态路由的逗号分隔列表 |
|
字符串 |
- |
否 |
指向 NIC 并发布到上行链路网络的 IPv6 静态路由的逗号分隔列表 |
|
字符串 |
内核分配 |
否 |
实例内部接口的名称 |
|
字符串 |
- |
否 |
将此 NIC 嵌套在其中的父 NIC 名称(另请参见 |
|
字符串 |
- |
是 |
将设备链接到的托管网络(必填) |
|
字符串 |
- |
否 |
要应用的网络 ACL 的逗号分隔列表 |
|
字符串 |
|
否 |
用于与任何 ACL 规则不匹配的出站流量的操作 |
|
布尔值 |
|
否 |
是否记录与任何 ACL 规则不匹配的出站流量 |
|
字符串 |
|
否 |
用于与任何 ACL 规则不匹配的入站流量的操作 |
|
布尔值 |
|
否 |
是否记录与任何 ACL 规则不匹配的入站流量 |
|
布尔值 |
|
否 |
让 OVN 将未知网络流量发送到此网络接口(某些嵌套情况需要) |
|
整数 |
- |
否 |
嵌套时使用的 VLAN ID(另请参见 |
注意
请注意,在 ipv4.address
或 ipv6.address
中使用 none
需要禁用另一个协议。目前,OVN 无法仅在 IPv4 或 IPv6 上禁用 IP 分配。
nictype
: physical
¶
注意
您可以通过
nictype
选项或network
选项选择此 NIC 类型(有关托管physical
网络的信息,请参见 物理网络)。每个父设备只能有一个
physical
NIC。
physical
NIC 提供从主机到物理设备的直接直通。目标设备将从主机消失并出现在实例中(这意味着每个目标设备只能有一个 physical
NIC)。
设备选项¶
类型为 physical
的 NIC 设备具有以下设备选项
键 |
类型 |
默认值 |
托管 |
描述 |
---|---|---|---|---|
|
整数 |
- |
否 |
VM 的启动优先级(值越大,越优先启动) |
|
布尔值 |
|
否 |
使用 GARP VLAN 注册协议注册 VLAN |
|
字符串 |
随机分配 |
否 |
新接口的 MAC 地址 |
|
整数 |
父 MTU |
否 |
新接口的 MTU |
|
字符串 |
内核分配 |
否 |
实例内部接口的名称 |
|
字符串 |
- |
否 |
将设备链接到的托管网络(而不是直接指定 |
|
字符串 |
- |
是 |
主机设备的名称(如果直接指定 |
|
整数 |
- |
否 |
要连接到的 VLAN ID |
nictype
: ipvlan
¶
注意
此 NIC 类型仅适用于容器,不适用于虚拟机。
您只能通过
nictype
选项选择此 NIC 类型。此 NIC 类型不支持热插拔。
一个 ipvlan
NIC 使用相同的 MAC 地址但不同的 IP,基于现有网络设备设置一个新网络设备。
如果您使用的是 ipvlan
NIC,则 Incus 主机与实例之间的通信是不可能的。主机和实例都可以与网关通信,但它们不能直接通信。
Incus 目前支持 L2 和 L3S 模式下的 IPVLAN。在此模式下,网关由 Incus 自动设置,但必须使用 ipv4.address
和/或 ipv6.address
选项在容器启动之前手动指定 IP 地址。
- DNS
名称服务器必须在容器内部配置,因为它们不会自动设置。为此,请设置以下
sysctls
使用 IPv4 地址时
net.ipv4.conf.<parent>.forwarding=1
使用 IPv6 地址时
net.ipv6.conf.<parent>.forwarding=1 net.ipv6.conf.<parent>.proxy_ndp=1
设备选项¶
类型为 ipvlan
的 NIC 设备具有以下设备选项
键 |
类型 |
默认值 |
描述 |
---|---|---|---|
|
布尔值 |
|
使用 GARP VLAN 注册协议注册 VLAN |
|
字符串 |
随机分配 |
新接口的 MAC 地址 |
|
字符串 |
- |
要添加到实例的 IPv4 静态地址的逗号分隔列表(在 |
|
字符串 |
|
在 |
|
整数 |
- |
要添加 IPv4 静态路由的自定义策略路由表 ID(除了主路由表之外) |
|
字符串 |
- |
要添加到实例的 IPv6 静态地址的逗号分隔列表(在 |
|
字符串 |
|
在 |
|
整数 |
- |
要添加 IPv6 静态路由的自定义策略路由表 ID(除了主路由表之外) |
|
字符串 |
|
IPVLAN 模式( |
|
整数 |
父 MTU |
新接口的 MTU |
|
字符串 |
内核分配 |
实例内部接口的名称 |
|
字符串 |
- |
主机设备的名称(必填) |
|
整数 |
- |
要连接到的 VLAN ID |
nictype
: p2p
¶
注意
您只能通过 nictype
选项选择此 NIC 类型。
p2p
NIC 创建一个虚拟设备对,将一侧放在实例中,并将另一侧留在主机上。
设备选项¶
类型为 p2p
的 NIC 设备具有以下设备选项
键 |
类型 |
默认值 |
描述 |
---|---|---|---|
|
整数 |
- |
VM 的启动优先级(值越大,越优先启动) |
|
字符串 |
随机分配 |
主机内部接口的名称 |
|
字符串 |
随机分配 |
新接口的 MAC 地址 |
|
字符串 |
- |
要在主机上添加到 NIC 的 IPv4 静态路由的逗号分隔列表 |
|
字符串 |
- |
要在主机上添加到 NIC 的 IPv6 静态路由的逗号分隔列表 |
|
字符串 |
- |
出站流量的 I/O 限制,单位为 bit/s(支持各种后缀,请参见 存储、内存和网络限制的单位) |
|
字符串 |
- |
入站流量的 I/O 限制,单位为 bit/s(支持各种后缀,请参见 存储、内存和网络限制的单位) |
|
字符串 |
- |
入站和出站流量的 I/O 限制(与设置 |
|
整数 |
- |
出站流量的 |
|
整数 |
内核分配 |
新接口的 MTU |
|
字符串 |
内核分配 |
实例内部接口的名称 |
|
整数 |
- |
NIC 的发送队列长度 |
nictype
: routed
¶
注意
您只能通过 nictype
选项选择此 NIC 类型。
routed
NIC 创建一个虚拟设备对以连接主机到实例,并设置静态路由和代理 ARP/NDP 条目以允许实例加入指定父接口的网络。对于容器,它使用虚拟以太网设备对,而对于 VM,它使用 TAP 设备。
此 NIC 类型在操作上类似于 ipvlan
,因为它允许实例加入外部网络而无需配置网桥并共享主机的 MAC 地址。但是,它与 ipvlan
不同,因为它不需要内核中的 IPVLAN 支持,主机和实例可以互相通信。
此 NIC 类型尊重主机上的 netfilter
规则并使用主机的路由表来路由数据包,这在主机连接到多个网络时可能很有用。
- IP 地址、网关和路由
您必须在实例启动之前手动指定 IP 地址(使用
ipv4.address
和/或ipv6.address
)。对于容器,NIC 在主机端配置以下链接本地网关 IP 并将其设置为容器 NIC 接口中的默认网关
169.254.0.1 fe80::1
对于 VM,必须通过手动方式或通过
cloud-init
等机制配置网关(请参阅 操作指南)。注意
如果您的容器映像配置为在接口上执行 DHCP,它可能会删除自动添加的配置。在这种情况下,您必须通过手动方式或通过
cloud-init
等机制配置 IP 地址和网关。NIC 类型在主机上配置指向实例的
veth
接口的静态路由,用于实例的所有 IP。- 多个 IP 地址
每个 NIC 设备都可以添加多个 IP 地址。
但是,最好使用多个
routed
NIC 接口。在这种情况下,将后续接口上的ipv4.gateway
和ipv6.gateway
值设置为none
以避免默认网关冲突。还可以考虑使用ipv4.host_address
和/或ipv6.host_address
为这些后续接口指定不同的主机端地址。- 父接口
此网卡可以在设置了
parent
网络接口的情况下工作,也可以在未设置的情况下工作。在设置了
parent
网络接口的情况下,实例 IP 的代理 ARP/NDP 条目将被添加到父接口,这允许实例在第 2 层加入父接口的网络。要启用此功能,必须通过
sysctl
在主机上应用以下网络配置使用 IPv4 地址时
net.ipv4.conf.<parent>.forwarding=1
使用 IPv6 地址时
net.ipv6.conf.all.forwarding=1 net.ipv6.conf.<parent>.forwarding=1 net.ipv6.conf.all.proxy_ndp=1 net.ipv6.conf.<parent>.proxy_ndp=1
设备选项¶
类型为routed
的网卡设备具有以下设备选项
键 |
类型 |
默认值 |
描述 |
---|---|---|---|
|
布尔值 |
|
使用 GARP VLAN 注册协议注册 VLAN |
|
字符串 |
随机分配 |
主机内部接口的名称 |
|
字符串 |
随机分配 |
新接口的 MAC 地址 |
|
字符串 |
- |
要添加到实例的 IPv4 静态地址的逗号分隔列表 |
|
字符串 |
|
是否添加自动默认 IPv4 网关(可以是 |
|
字符串 |
|
要添加到主机端 |
|
整数 |
- |
要添加 IPv4 静态路由的自定义策略路由表 ID(除了主路由表之外) |
|
布尔值 |
|
是否探测父网络以查看 IP 地址可用性 |
|
字符串 |
- |
要添加到主机到网卡的 IPv4 静态路由的逗号分隔列表(没有 L2 ARP/NDP 代理) |
|
字符串 |
- |
要添加到实例的 IPv6 静态地址的逗号分隔列表 |
|
字符串 |
|
是否添加自动默认 IPv6 网关(可以是 |
|
字符串 |
|
要添加到主机端 |
|
整数 |
- |
要添加 IPv6 静态路由的自定义策略路由表 ID(除了主路由表之外) |
|
布尔值 |
|
是否探测父网络以查看 IP 地址可用性 |
|
字符串 |
- |
要添加到主机到网卡的 IPv6 静态路由的逗号分隔列表(没有 L2 ARP/NDP 代理) |
|
字符串 |
- |
出站流量的 I/O 限制,单位为 bit/s(支持各种后缀,请参见 存储、内存和网络限制的单位) |
|
字符串 |
- |
入站流量的 I/O 限制,单位为 bit/s(支持各种后缀,请参见 存储、内存和网络限制的单位) |
|
字符串 |
- |
入站和出站流量的 I/O 限制(与设置 |
|
整数 |
- |
出站流量的 |
|
整数 |
父 MTU |
新接口的 MTU |
|
字符串 |
内核分配 |
实例内部接口的名称 |
|
字符串 |
- |
要将实例加入的宿主设备的名称 |
|
整数 |
- |
NIC 的发送队列长度 |
|
整数 |
- |
要连接到的 VLAN ID |
bridged
、macvlan
或ipvlan
,用于连接到物理网络¶
bridged
、macvlan
和ipvlan
接口类型可用于连接到现有的物理网络。
macvlan
实际上允许你将物理网卡分叉,得到一个第二个接口,然后由实例使用。此方法可以让你免于创建桥接设备和虚拟以太网设备对,并且通常比桥接提供更好的性能。
此方法的缺点是macvlan
设备虽然能够相互通信以及与外部通信,但无法与父设备通信。这意味着如果你需要实例与主机本身通信,则不能使用macvlan
。
在这种情况下,最好使用bridge
设备。桥接还可以让你使用 MAC 过滤和 I/O 限制,而这些限制无法应用于macvlan
设备。
ipvlan
类似于macvlan
,不同之处在于分叉的设备具有静态分配的 IP,并在网络上继承父设备的 MAC 地址。