计算实例的网络配置 - Amazon Snowball Edge 开发人员指南
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

计算实例的网络配置

在 Snow Family 设备上启动计算实例后,必须通过创建网络接口为其提供 IP 地址。Snow Family 设备支持两种网络接口,一种是虚拟网络接口,另一种是直接网络接口。

虚拟网络接口 (VNI)

虚拟网络接口是连接到 Snow Family 设备上的 EC2 实例的标准网络接口。无论您是否还使用直接网络接口,都必须为每个 EC2 实例创建 VNI。通过 VNI 的流量受您设置的安全组的保护。您只能将 VNI 与用于控制 Snow Family 设备的物理网络端口相关联。

注意

VNI: 支持所有物理接口(RJ45、SFP+ 和 QSFP)。

直接网络接口 (DNI)

直接网络接口 (DNI) 是一项高级网络功能,支持多播流、传递路由和负载平衡等用例。通过为实例提供无需任何中间转换或筛选的第 2 层网络接入,您可以在 Snow Family 设备的网络配置上获得更高的灵活性并提高网络性能。DNI 支持 VLAN 标记和自定义 MAC 地址。DNI 上的流量不受安全组保护。

Snowcone 设备支持每个 EC2 实例八个 DNI,每个设备最多支持 63 个 DNI。

在 Snowball Edge 设备上,DNI 可以与 SFP 或 QSFP 端口相关联。DNI 不能与 RJ45 端口关联。每个光学端口最多支持七个 DNI。DNI 不必与您用于控制 Snow Family 设备的物理网络端口相关联。一个 EC2 实例可以支持四个 DNI,另一个实例可以支持三个,每台设备最多支持七个。

先决条件

在配置 VNI 或 DNI 之前,请确保您已符合以下先决条件。

  1. 确保您的设备已通电,并且您的一个物理网络接口(例如 RJ45 端口)已连接到 IP 地址。

  2. 获取与您在 Snow Family 设备上使用的物理网络接口关联的 IP 地址。

  3. 配置你的 Snowball Edge 客户端 有关更多信息,请参阅 ball Edge 客户端配置文件

  4. 解锁此设备。我们建议使用Amazon OpsHub for Snow Family来解锁您的设备。有关说明,请参阅解锁设备

    如果要使用 CLI 命令,请运行以下命令并提供对话框中显示的信息。

    snowballEdge configure

    Snowball Edge Manifest Path: manifest.bin

    Unlock Code: unlock code

    Default Endpoint: https://device ip

  5. 运行以下命令。

    snowballEdge unlock-device

    设备显示更新表明设备已解锁。

  6. 在设备上启动 EC2 实例。您要将 VNI 与此实例关联起来。

  7. 运行 snowballEdge describe-device 命令以获取物理网络接口 ID 的列表。

  8. 标识您要使用的物理网络接口的 ID 并记下它。

设置虚拟网络接口 (VNI)

确定物理网络接口的 ID 后,即可设置虚拟网络接口 (VNI)。使用以下步骤设置 VNI。在创建 VNI 之前,请务必执行先决任务。

创建 VNI 并关联 IP 地址

  1. 运行 snowballEdge create-virtual-network-interface 命令。以下示例显示使用两种不同的 IP 地址分配方法(DHCPSTATIC)运行此命令。DHCP 方法使用动态主机配置协议 (DHCP)。

    snowballEdge create-virtual-network-interface \ --physical-network-interface-id s.ni-abcd1234 \ --ip-address-assignment DHCP //OR// snowballEdge create-virtual-network-interface \ --physical-network-interface-id s.ni-abcd1234 \ --ip-address-assignment STATIC \ --static-ip-address-configuration IpAddress=192.0.2.0,Netmask=255.255.255.0

    该命令返回一个 JSON 结构,其中包含 IP 地址。在此过程的后面记下该ec2 associate-addressAmazon CLI命令的 IP 地址。

    无论何时需要这个 IP 地址,都可以使用snowballEdge describe-virtual-network-interfaces Snowball Edge 客户端命令或aws ec2 describe-addressesAmazon CLI命令来获取它。

  2. 要将新创建的 IP 地址与您的实例相关联,请使用以下命令,将红色文本替换为您的值:

    aws ec2 associate-address --public-ip 192.0.2.0 --instance-id s.i-01234567890123456 --endpoint Snow Family device physical IP address:8008

设置直接网络接口 (DNI)

注意

直接网络接口功能将于 2021 年 1 月 12 日当天或之后推出,在 Snow Family 设备可用的所有Amazon Web Services 区域地方均可用。

先决条件

在设置直接网络接口 (DNI) 之前,必须执行先决条件部分中的任务。

  1. 在设置 DNI 之前执行先决任务。有关说明,请参阅 先决条件

  2. 此外,您必须在设备上启动实例,创建 VNI,然后将其与该实例关联。有关说明,请参阅 设置虚拟网络接口 (VNI)

    注意

    如果您通过执行 in-the-field 软件更新向现有设备添加了直接联网功能,则必须重新启动设备两次才能完全启用该功能。

创建 DNI 并关联 IP 地址

  1. 通过运行以下命令创建直接网络接口并将其附加到 Amazon EC2 实例。在下一步骤中,您需要用到设备的 MAC 地址。

    create-direct-network-interface [--endpoint endpoint] [--instance-id instanceId] [--mac macAddress] [--physical-network-interface-id physicalNetworkInterfaceId] [--unlock-code unlockCode] [--vlan vlanId]

    OPTIONS

    --endpoint <endpoint>要向其发送此请求的终端节点。您的设备的终端节点将是一个使用架构的 URL,后跟一个 IP 地址。https例如,如果您的设备的 IP 地址为 123.0.1.2,则设备的终端节点将为 https://123.0.1.2。

    --instance-id <instanceId>要连接接口的 EC2 实例 ID(可选)。

    --mac <macAddress>设置网络接口的 MAC 地址(可选)。

    --physical-network-interface-id <physicalNetworkInterfaceId>要在其上创建新虚拟网络接口的物理网络接口的 ID。您可以使用describe-device命令确定 Snowball Edge 上可用的物理网络接口。

    --vlan <vlanId>为接口设置分配的 VLAN(可选)。指定后,从接口发送的所有流量都使用指定的 VLAN ID 进行标记。将针对指定的 VLAN ID 筛选传入流量,并在传递给实例之前去除所有 VLAN 标记。

  2. 如果您在步骤 1 中没有将您的 DNI 与实例关联,则可以通过运行更新直接网络接口命令将其关联。

  3. 创建 DNI 并将其与 EC2 实例关联后,您必须在 Amazon EC2 实例内进行两次配置更改。

    • 首先是更改确保发往与 EC2 实例关联的 VNI 的数据包通过 eth0 发送。

    • 第二个更改将您的直接网络接口配置为在启动时使用 DCHP 或静态 IP。

    以下是用于亚马逊 Linux 2 和 CentOS Linux 的 shell 脚本进行这些配置更改的示例。

    Amazon Linux 2
    # Mac address of the direct network interface. # You got this when you created the direct network interface. DNI_MAC=[MAC ADDRESS FROM CREATED DNI] # Configure routing so that packets meant for the VNI always are sent through eth0. PRIVATE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4) PRIVATE_GATEWAY=$(ip route show to match 0/0 dev eth0 | awk '{print $3}') ROUTE_TABLE=10001 echo "from $PRIVATE_IP table $ROUTE_TABLE" > /etc/sysconfig/network-scripts/rule-eth0 echo "default via $PRIVATE_GATEWAY dev eth0 table $ROUTE_TABLE" > /etc/sysconfig/network-scripts/route-eth0 echo "169.254.169.254 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0 # Query the persistent DNI name, assigned by udev via ec2net helper. # changable in /etc/udev/rules.d/70-persistent-net.rules DNI=$(ip --oneline link | grep -i $DNI_MAC | awk -F ': ' '{ print $2 }') # Configure DNI to use DHCP on boot. cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$DNI DEVICE="$DNI" NAME="$DNI" HWADDR=$DNI_MAC ONBOOT=yes NOZEROCONF=yes BOOTPROTO=dhcp TYPE=Ethernet MAINROUTETABLE=no EOF # Make all changes live. systemctl restart network
    CentOS Linux
    # Mac address of the direct network interface. You got this when you created the direct network interface. DNI_MAC=[MAC ADDRESS FROM CREATED DNI] # The name to use for the direct network interface. You can pick any name that isn't already in use. DNI=eth1 # Configure routing so that packets meant for the VNIC always are sent through eth0 PRIVATE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4) PRIVATE_GATEWAY=$(ip route show to match 0/0 dev eth0 | awk '{print $3}') ROUTE_TABLE=10001 echo from $PRIVATE_IP table $ROUTE_TABLE > /etc/sysconfig/network-scripts/rule-eth0 echo default via $PRIVATE_GATEWAY dev eth0 table $ROUTE_TABLE > /etc/sysconfig/network-scripts/route-eth0 # Configure your direct network interface to use DHCP on boot. cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$DNI DEVICE="$DNI" NAME="$DNI" HWADDR="$DNI_MAC" ONBOOT=yes NOZEROCONF=yes BOOTPROTO=dhcp TYPE=Ethernet EOF # Rename DNI device if needed. CURRENT_DEVICE_NAME=$(LANG=C ip -o link | awk -F ': ' -vIGNORECASE=1 '!/link\/ieee802\.11/ && /'"$DNI_MAC"'/ { print $2 }') ip link set $CURRENT_DEVICE_NAME name $DNI # Make all changes live. systemctl restart network