在覆疊網路上,NSX 支援在 L3 網域上路由 VLAN 間流量。在路由期間,虛擬分散式路由器 (VDR) 會使用 VLAN 識別碼來路由 VLAN 子網路之間的封包。

VLAN 間路由克服了每個虛擬機器只能使用 10 個 vNIC 的限制。NSX 支援 VLAN 間路由,可確保能夠在 vNIC 上建立多個 VLAN 子介面,並且用於不同的網路服務。例如,虛擬機器的一個 vNIC 可分割為多個子介面。每個子介面分別屬於一個子網路,可主控 SNMP 或 DHCP 等網路服務。例如,使用 VLAN 間路由時,VLAN-10 上的子介面可連線到 VLAN-10 或任何其他 VLAN 上的子介面。

虛擬機器上的每個 vNIC 都會透過負責管理未標記封包的父系邏輯連接埠連線至交換器。

若要建立子介面,請在增強模式中設定的交換器上,使用 API 與相關聯的 VIF 透過程序中說明的 API 呼叫來建立子系連接埠。以 VLAN 識別碼標記的子介面會與新的邏輯交換器相關聯,例如,VLAN10 會連結至邏輯交換器 LS-VLAN-10。VLAN10 的所有子介面都必須連結至 LS-VLAN-10。子介面的 VLAN 識別碼及其相關聯的邏輯交換器之間的這種 1 對 1 對應,是一項重要的必要條件。例如,若將 VLAN20 的子系連接埠新增至對應於 VLAN-10 的邏輯交換器 LS-VLAN-10,將會使 VLAN 之間的封包路由無法運作。這類組態錯誤會導致 VLAN 間路由無法運作。

NSX 3.2.2 開始,邏輯連接埠 Proton API 換成對應的區段連接埠原則 API。

必要條件

  • 將 VLAN 子介面關聯至邏輯交換器之前,請確定邏輯交換器與其他 VLAN 子介面之間沒有任何其他關聯。如果有不相符的狀況,覆疊網路上的 VLAN 間路由可能無法運作。

  • 確定主機執行 ESXi v 6.7 U2 或更新版本。

程序

  1. 若要為 vNIC 建立子介面,請確定 vNIC 已更新至父系連接埠。進行下列 REST API 呼叫:
    PATCH https://<nsx-mgr-ip>/policy/api/v1/infra/segments/<Segment to which vNIC is connected>/ports/<Seg-Port-vNIC>
    {
       "attachment": {
         "id": "<Attachment UUID of the vNIC>",
         "type": "PARENT"
      },
       "admin_state": "UP",
       "resource_type": "SegmentPort",
       "display_name": "parentport"
    }
    }
    如果邏輯交換器沒有對應的區段,您可以進行下列 REST API 呼叫 (邏輯連接埠 Proton API):
    PUT https://<nsx-mgr-ip>/api/v1/logical-ports/<Logical-Port UUID-of-the-vNIC>
    {
      "resource_type" : "LogicalPort",
      "display_name" : "parentport",
      "attachment" : {
        "attachment_type" : "VIF",
        "context" : {
          "resource_type" : "VifAttachmentContext",
          "vif_type": "PARENT"
        },
        "id" : "<Attachment UUID of the vNIC>"   
      },
      "admin_state" : "UP",
      "logical_switch_id" : "UUID of Logical Switch to which the vNIC is connected",  
      "_revision" : 0
    }
  2. 若要在與虛擬機器上的子介面相關聯的 N-VDS 上,建立父系 vNIC 連接埠的子連接埠,請進行下列 API 呼叫:
    備註: 在進行 API 呼叫前,請先確認有區段存在,可將子連接埠連線至虛擬機器上的子介面。
    PUT https://<nsx-mgr-ip>/policy/api/v1/infra/segments/<Segment to which child port is connected>/ports/<Child-port>
    {
       "attachment": {
         "id": "<Attachment UUID of the CHILD port>",
         "type": "CHILD",
         "context_id": "<Attachment UUID of the PARENT port from Step 1>",
         "traffic_tag": <VLAN ID>,
         "app_id": "<ID of the attachment>", ==> display id(can be any string). Must be unique.
      },
       "address_bindings": [
        {
           "ip_address": "<IP address to the corresponding VLAN>",
           "mac_address": "<vNIC MAC Address>",
           "vlan_id": <VLAN ID>
        }
      ],
       "admin_state": "UP",
       "resource_type": "SegmentPort",
       "display_name": "<Name of the Child PORT>"
    }
    
    如果邏輯交換器沒有對應的區段,您可以進行下列 REST API 呼叫 (邏輯連接埠 Proton API):
    POST https://<nsx-mgr-ip>/api/v1/logical-ports/
    {
      "resource_type" : "LogicalPort",
      "display_name" : "<Name of the Child PORT>",   
      "attachment" : {
        "attachment_type" : "VIF",
        "context" : {
          "resource_type" : "VifAttachmentContext",
          "parent_vif_id" : "<UUID of the PARENT port from Step 1>",     
          "traffic_tag" : <VLAN ID>,    
          "app_id" : "<ID of the attachment>",  ==> display id(can give any string). Must be unique.
          "vif_type" : "CHILD"
        },
       "id" : "<ID of the CHILD port>"  
      },
      
      "logical_switch_id" : "<UUID of the Logical switch(not the PARENT PORT's logical switch) to which Child port would be connected to>",         
      "address_bindings" : [ { "mac_address" : "<vNIC MAC address>", "ip_address" : "<IP address to the corresponding VLAN>", "vlan" : <VLAN ID> } ],       
      "admin_state" : "UP"
    }

結果

NSX 會在虛擬機器上建立子介面。