网络类型
Equinix Metal Portal 的用户可能对二层、三层和混合等服务器网络类型比较熟悉。在 Portal 中,您只需单击用户界面即可切换网络类型。Terraform 与 Equinix Metal API 紧密相关,因此,要利用这些功能,必须了解网络类型是一个复合字符串值,它由一个或多个端口绑定、寻址和 VLAN 连接配置决定。要更改网络类型,您必须更改端口的这些底层属性。
有关更多详细信息,请参阅 Equinix Metal 文档中的网络配置类型。
此 Terraform 提供程序提供了两种定义网络类型的方法。
金属端口
equinix_metal_port 资源公开了影响设备或端口配对的网络类型所需的所有功能。
以下示例展示了如何使用 equinix_metal_port 资源配置各种网络类型,假设 local.bond0_id 是包含 eth1 的绑定接口的 UUID,local.eth1_id 是 eth1 接口的 UUID。这些可以代表 equinix_metal_device 资源或数据源的端口。
三层端口
在 Equinix Metal 设备上,默认端口配置为三层(绑定)。以下内容用于说明 equinix_metal_port 资源的用法。实际上通常不需要此硬件兼容性列表 (HCL),但在某些配置中,它可用于逐端口地检查导入的 equinix_metal_device 资源或数据源是否已正确设置模式。
resource "equinix_metal_port" "bond0" {
port_id = local.bond0_id
bonded = true
}
resource "equinix_metal_port" "eth1" {
port_id = local.eth1_id
bonded = true
}
二层非绑定端口
此示例配置一台 Equinix Metal 服务器,采用 纯二层非绑定 网络配置,并向其 eth1 端口添加两个 VLAN;其中一个设置为 [原生 VLAN。请注意 equinix_metal_port.eth1 资源中的 depends_on 元参数以及两个端口配置中的 reset_on_delete 属性。reset_on_delete 会在执行 Terraform 资源删除/销毁操作之前,将端口恢复为默认设置(三层绑定,未连接 VLAN)。建议在此处使用 depends_on 参数,以确保先重置已连接 VLAN 的端口资源,因为在重新绑定端口之前,必须先分离所有 VLAN。
resource "equinix_metal_port" "bond0" {
port_id = local.bond0_id
layer2 = true
bonded = false
reset_on_delete = true
}
resource "equinix_metal_port" "eth1" {
port_id = local.eth1_id
bonded = false
reset_on_delete = true
vlan_ids = [equinix_metal_vlan.test1.id, equinix_metal_vlan.test2.id]
native_vlan_id = equinix_metal_vlan.test1.id
depends_on = [
equinix_metal_port.bond0,
]
}
resource "equinix_metal_vlan" "test1" {
description = "test"
metro = "sv"
project = equinix_metal_project.test.id
}
resource "equinix_metal_vlan" "test2" {
description = "test"
metro = "sv"
project = equinix_metal_project.test.id
}
二层粘合端口
resource "equinix_metal_port" "bond0" {
port_id = local.bond0_id
layer2 = true
bonded = true
}
混合非键合端口
resource "equinix_metal_port" "eth1" {
port_id = local.eth1_id
bonded = false
}
混合式保税端口
resource "equinix_metal_port" "bond0" {
port_id = local.bond0_id
layer2 = false
bonded = true
vlan_ids = [equinix_metal_vlan.test.id]
}
resource "equinix_metal_vlan" "test" {
description = "test"
metro = "sv"
project = equinix_metal_project.test.id
}
访问端口 ID
可以使用 for 表达式 从 equinix_metal_device 获取端口 ID 值。
假设存在资源名称为 test 的 equinix_metal_device:
locals {
bond0_id = [for p in equinix_metal_device.test.ports: p.id if p.name == "bond0"][0]
eth1_id = [for p in equinix_metal_device.test.ports: p.id if p.name == "eth1"][0]
}
金属设备网络类型
equinix_metal_device_network_type 接受一个指定的网络类型及其所需的任何模式参数,并将设备转换为该指定的网络类型。此资源模拟了 Equinix Metal Portal 中设备的网络类型接口。随着更多具有不同端口配置的网络类型的引入,该接口也随之改变。
使用此资源时,请注意:
- 此资源不能保证在具有两个以上以太网端口的设备上正常工作。
- 它可能无法表达所有可能的端口配置
- 网络配置的后续更改可能会导致此设备检测到无法在不进行干预的情况下协调的更改。
equinix_metal_device_network_type资源不应在端口受equinix_metal_port资源控制的设备上使用。
混合(非键合)器件
此示例创建一个 c3.small 设备,并将其置于 混合(非绑定)网络模式。
resource "equinix_metal_device" "test" {
hostname = "tfacc-device-port-vlan-attachment-test"
plan = "c3.small.x86"
metro = "ny"
operating_system = "ubuntu_24_04"
billing_cycle = "hourly"
project_id = local.project_id
}
resource "equinix_metal_device_network_type" "test" {
device_id = equinix_metal_device.test.id
type = "hybrid"
}
具有 VLAN 的混合(非绑定)设备
此示例创建两个处于 混合(非绑定)模式 的设备,并向其 eth1 端口添加 VLAN。
locals {
project_id = "<uuid>"
device_count = 2
}
resource "equinix_metal_vlan" "test" {
metro = "ny"
project_id = local.project_id
}
resource "equinix_metal_device" "test" {
count = local.device_count
hostname = "test${count.index}"
plan = "c3.small.x86"
metro = "ny"
operating_system = "ubuntu_24_04"
billing_cycle = "hourly"
project_id = local.project_id
}
resource "equinix_metal_device_network_type" "test" {
count = local.device_count
device_id = equinix_metal_device.test[count.index].id
type = "hybrid"
}
resource "equinix_metal_port_vlan_attachment" "test" {
count = local.device_count
device_id = equinix_metal_device_network_type.test[count.index].id
port_name = "eth1"
vlan_vnid = equinix_metal_vlan.test.vxlan
}
混合(键合)器件
此示例创建一个 c3.small 设备并将其置于混合绑定网络模式 (https://docs.equinix.com/metal/layer2-networking/hybrid-bonded-mode/)。请注意,默认网络类型 layer3 可用于 VLAN 连接,而无需重新配置设备端口。
resource "equinix_metal_device" "test" {
hostname = "tfacc-device-port-vlan-attachment-test"
plan = "c3.small.x86"
metro = "ny"
operating_system = "ubuntu_24_04"
billing_cycle = "hourly"
project_id = local.project_id
}
resource "equinix_metal_vlan" "test" {
metro = "ny"
project_id = local.project_id
}
resource "equinix_metal_port_vlan_attachment" "test" {
count = local.device_count
device_id = equinix_metal_device.test.id
port_name = "bond0"
vlan_vnid = equinix_metal_vlan.test.vxlan
}