IBM Cloud Docs
创建虚拟网络接口

创建虚拟网络接口

可以在不连接到目标的情况下创建虚拟网络接口。 因此,即使除去了虚拟网络接口的目标,也可以存在该虚拟网络接口。

例如,在 VPC 中,实例具有可从因特网访问实例的公共 IP 地址,以及可从 VPC 中的其他实例访问实例的专用 IP 地址。 您已使用定制安全组规则配置实例。 如果删除实例,那么将拆离公共 IP 地址和安全组。 将释放专用 IP 地址,并且可以由另一个资源再次保留。 如果要使用与已删除实例相同的公共 IP 地址,专用 IP 地址和安全组来创建新实例,那么必须再次保留专用 IP 地址,并单独连接先前的公共 IP 地址和安全组。

您可以使用虚拟网络接口来管理具有独立于实例的生命周期的单独资源中的 IP 地址和安全组。 创建具有专用 IP 地址,公共 IP 地址和安全组的虚拟网络接口。 然后,使用此虚拟网络接口创建实例。 稍后可以删除实例,保留虚拟网络接口,并创建具有相同虚拟网络接口的新实例。

准备工作

要创建虚拟网络接口,必须满足以下先决条件:

  • VPC 实例
  • 要在其中创建虚拟网络接口的子网
  • 确保您具有相应的 IAM 许可权。 您必须具有 IAM 管理员角色许可权才能配置 IP 电子欺骗和基础架构 NAT。

查看虚拟网络接口的 规划注意事项已知限制

您可以使用控制台、CLI、API 或 Terraform 创建虚拟网络接口。

在控制台中创建虚拟网络接口

要在控制台中创建虚拟网络接口,请按照以下步骤操作:

  1. 从浏览器打开 IBM Cloud 控制台并登录账户。

  2. 选择导航菜单 导航菜单图标,然后单击基础结构 > 网络 > 虚拟网络接口

  3. 在“VPC 的虚拟网络接口”页面上,单击 创建

  4. 在“位置”部分中,根据需要编辑以下字段。

    • 地理位置: 指示要在其中创建虚拟网络接口的地理位置。
    • 区域: 指示要在其中创建虚拟网络接口的区域。
  5. 在详细信息部分,填写以下信息:

    • 名称: 输入虚拟网络接口的唯一名称,例如 my-virtual-network-interface
    • 资源组: 选择虚拟网络接口的资源组。
    • 标签:(可选)添加标签,帮助您组织和查找资源。 以后可以添加更多标记。 有关更多信息,请参阅使用标记
    • 访问管理标记: (可选) 向资源添加访问管理标记以帮助组织访问控制关系。 访问管理标记唯一受支持的格式为 key:value。 有关更多信息,请参阅 使用标记控制对资源的访问
  6. 在“网络配置”部分中,完成以下信息:

    • 虚拟私有云: 选择要在其中创建虚拟网络接口的 VPC。 如果需要创建 VPC,请单击 创建 VPC

    • 子网: 选择要在其中创建虚拟网络接口的子网。 如果需要创建子网,请单击 创建

    • 允许 IP 电子欺骗: 选择开关以启用或禁用 IP 电子欺骗。

      • 禁用 IP 欺骗可使流量通过网络接口,而不是在网络接口结束。
      • IP 电子欺骗仅支持虚拟服务器实例和裸机服务器。 不支持文件共享。
    • 基础架构 NAT: 选择交换机以启用或禁用基础架构 NAT。

      启用 IP 欺骗时,将启用基础结构 NAT。

      • 已启用 包含一个浮动 IP 地址,并且支持虚拟服务器,裸机服务器和文件共享。

      • 已禁用 仅在裸机服务器上支持多个浮动 IP 地址。 不支持将虚拟服务器和文件共享作为虚拟网络接口目标。

        禁用时,虚拟服务器实例将接收同级发送的流量,而不使用 NAT。 目标 IP 地址是浮动 IP 地址,裸机服务器负责执行 NAT。

    • 协议状态过滤方式: 选择单选按钮以设置方式:

      • 自动 (缺省值): 根据虚拟网络接口的目标资源启用或禁用过滤。

        • 裸机服务器 (已禁用)
        • 虚拟服务器实例 (已启用)
        • 文件共享安装 (已启用)
      • 已启用:强制 TCP 连接与 RFC793 标准保持一致,并通过相应的安全组规则和网络 ACL 允许任何数据包。

      • 已禁用:仅允许相应的安全组规则和网络 ACL 允许数据包。

  7. 在“主 IP”部分中,进行以下选择。

    • 保留方法: 选择是要为您创建主 IP 地址,还是要手动指定主 IP 地址。 如果您指定自己的 IP 地址,请输入虚拟网络接口的现有保留 IP 地址,或者从现有保留 IP 列表菜单中选择一个 IP 地址。
    • 自动发布: 单击交换机以启用或禁用此虚拟网络接口的自动发布。
  8. 在“浮动 IP”部分 (可选) 中,单击 连接。 在显示的侧面板中,您可以从浮动 IP 地址的现有列表中进行选择,或者选择 保留新的浮动 IP 并完成所请求的信息。

    如果连接了浮动 IP ,那么将不接受虚拟网络接口作为文件共享安装目标。 如果启用了基础设施 NAT,最多只能连接一个浮动 IP。

  9. 在“辅助 IP”部分 (可选) 中,单击 连接。 选择保留方法,并指定是否启用自动发布。

    虚拟网络接口附加的辅助 IP 不能被接受为文件共享挂载目标。

  10. 在“安全组”部分,选择至少一个、最多五个安全组来控制网络层面的流量。 您可以从列表中选择安全组,也可以通过单击 创建来创建安全组。 有关创建安全组的更多信息,请参阅 创建安全组

  11. 查看“摘要”面板中的信息,然后单击 创建虚拟网络接口

从 CLI 创建虚拟网络接口

开始之前,请 设置 CLI 环境

export IBMCLOUD_IS_FEATURE_VNI_ENABLE_PROTOCOL_STATE_FILTERING=true

要从 CLI 创建虚拟网络接口,请输入以下命令:

ibmcloud is virtual-network-interface-create [--name NAME] [--allow-ip-spoofing false | true] [--auto-delete false | true] [--enable-infrastructure-nat false | true] [--protocol-state-filtering-mode auto | disabled | enabled] [[--rip RIP | [--rip-address RIP_ADDRESS --rip-auto-delete RIP_AUTO_DELETE --rip-name RIP_NAME]]] [--subnet SUBNET] [--ips RESERVED_IPS_JSON | @RESERVED_IPS_JSON_FILE] [--sgs SGS] [--resource-group-id RESOURCE_GROUP_ID | --resource-group-name RESOURCE_GROUP_NAME] [--vpc VPC] [--output JSON] [-q, --quiet]

其中:

--name
此虚拟网络接口的名称。
--allow-ip-spoofing
指示此接口上是否允许源 IP 电子欺骗。 如果 false,则在此接口上防止源 IP 欺骗。 如果 true,则允许在此接口上欺骗源 IP。 其中一个: falsetrue
--auto-delete
指示删除目标时是否将自动删除此虚拟网络接口。 如果虚拟网络接口未绑定,则必须为 false。 其中一个: falsetrue
--enable-infrastructure-nat
如果 true,VPC 基础设施会执行任何所需的 NAT 操作。 如果 false,数据包将保持不变地传入/传出网络接口,允许工作负载执行任何所需的 NAT 操作。 其中一个: falsetrue
--protocol-state-filtering-mode
协议状态过滤方式的状态。 autoenableddisabled 之一。
  • 自动 (缺省值): 根据虚拟网络接口的目标资源启用或禁用过滤。
    • 裸机服务器 (已禁用)
    • 虚拟服务器实例 (已启用)
    • 文件共享安装 (已启用)
  • 已启用:强制 TCP 连接与 RFC793 标准保持一致,并通过相应的安全组规则和网络 ACL 允许任何数据包。
  • 已禁用:仅允许相应的安全组规则和网络 ACL 允许数据包。
--rip
要绑定到虚拟网络接口的预留 IP 的标识或名称。
--rip-address
要绑定到虚拟网络接口的预留 IP 的 IP 地址。
--rip-auto-delete
指示在删除目标或取消绑定预留 IP 时是否将自动删除此预留 IP。
--rip-name
要绑定到虚拟网络接口的此预留 IP 的名称。
--subnet
关联的子网。
--ips ips RESERVED_IPS_JSON | @RESERVED_IPS_JSON_FILE
JSON 或 JSON 文件中的二级保留 IP 地址,用于绑定到虚拟网络接口。 有关数据模式,请查看 API 文档中的 IPs 属性。 其中一个: RESERVED_IPS_JSON@RESERVED_IPS_JSON_FILE
--sgs
要用于虚拟网络接口的安全组的标识或名称。
--resource-group-id
资源组的标识。 该 ID 与 --resource-group-name 互斥。
--resource-group-name
资源组的名称。 该名称与 --resource-group-id 互斥。
--vpc
与此 VNI 关联的 VPC 的 ID 或名称。
--output
指定输出格式,仅支持 JSON。 以下项之一:JSON
-q, --quiet
禁止详细输出。

命令示例

  • ibmcloud is virtual-network-interface-create --subnet 7208-d42716a5-6df2-416c-979d-f26330b9eod1
  • ibmcloud is virtual-network-interface-create --name cli-vni-1 --allow-ip-spoofing true --auto-delete true --enable-infrastructure-nat true --protocol-state-filtering-mode auto --rip 7208-d4c0abbe-3fc2-4696-9fe1-4eb3dc9af976 --ips '[{"id":"7208-d83b7e58-3c3d-47d0-89c5-02d9a20c72fd"},{"address":"10.240.64.13", "auto_delete": false, "name": "srip2"}]' --sgs r006-aa7c7658-e503-4456-b342-8d6a89e05115,r006-4fb388f1-2b6e-4013-b279-7a8748f4d6ca --resource-group-id 11caaa983d9c4beb82690daab08717e9
  • ibmcloud is virtual-network-interface-create --name cli-vni-2 --allow-ip-spoofing true --auto-delete true --enable-infrastructure-nat true --protocol-state-filtering-mode enabled --rip cli-rip-1 --subnet my-subnet --vpc vpc-cli-1 --ips '[{"id":"7208-d83b7e58-3c3d-47d0-89c5-02d9a20c72fd"},{"address":"10.240.64.14", "auto_delete": false, "name": "srip3"}]' --sgs cli-sg,sanctity-contest-only-filing --resource-group-name Default
  • ibmcloud is virtual-network-interface-create --name cli-vni-4 --allow-ip-spoofing false --auto-delete false --enable-infrastructure-nat false --protocol-state-filtering-mode disabled --subnet 7208-bfe017e7-6e71-415a-8615-0ee787fbeef9 --rip-address 10.240.64.15 --rip-auto-delete false --rip-name primar-ip-1 --ips '[{"id":"7208-2772a45f-c062-4e22-bafb-32ea792da56b"},{"address":"10.240.64.17", "auto_delete": false, "name": "sec-ip-2"}]' --sgs r006-aa7c7658-e503-4456-b342-8d6a89e05115,r006-4fb388f1-2b6e-4013-b279-7a8748f4d6ca --resource-group-id 11caaa983d9c4beb82690daab08717e9
  • ibmcloud is virtual-network-interface-create --name cli-vni-3 --allow-ip-spoofing true --auto-delete false --enable-infrastructure-nat true --protocol-state-filtering-mode auto --subnet my-subnet --vpc vpc-cli-1 --rip-address 10.240.64.18 --rip-auto-delete true --rip-name primar-ip-2 --ips '[{"id":"7208-d42716a5-6df2-416c-979d-f26330b9d0b1"},{"address":"10.240.64.19", "auto_delete": true, "name": "sec-ip-3"}]' --sgs cli-sg,sanctity-contest-only-filing --resource-group-name Default

使用 API 创建虚拟网络接口

要使用 API 创建虚拟网络接口,请执行以下步骤:

  1. 使用正确的变量 设置 API 环境。

  2. 存储要在 API 命令中使用的任何其他变量; 例如:

    • version (字符串): API 版本,格式为 YYYY-MM-DD
  3. 启动所有变量时,创建虚拟网络接口:

    curl -X POST \
        "$vpc_api_endpoint/v1/virtual_network_interfaces?version=$version&generation=2" \
        -H "Authorization: Bearer $iam_token" \
        -d '{
              "name": "my-virtual-network-interface",
              "primary_ip": {
                "address": "10.0.0.5"
              },
              "protocol_state_filtering_mode": "disabled",
              "security_groups": [
                {
                  "id": "be5df5ca-12a0-494b-907e-aa6ec2bfa271"
                },
                {
                  "id": "032e1387-71ba-4e83-b268-a53edf94af19"
                }
              ],
              "subnet": {
                "id": "032e1387-71ba-4e83-b268-a53edf94af19"
              }
      }'
    

使用 Terraform 创建虚拟网络接口

以下示例使用 Terraform 创建虚拟网络接口:

resource "ibm_is_virtual_network_interface" "is_virtual_network_interface_instance" {
  allow_ip_spoofing = true
  auto_delete = false
  enable_infrastructure_nat = true
  name = "my-virtual-network-interface"
  subnet = "<SubnetId>"
  protocol_state_filtering_mode = "auto"
}

有关更多信息,请参阅 Terraform 注册表