Tungsten Fabric入門寶典丨關於服務鏈、BGPaaS及其它

TF中文社群發表於2020-06-03

Tungsten Fabric入門寶典系列文章 ,來自技術大牛傾囊相授的實踐經驗,由TF中文社群為您編譯呈現,旨在幫助新手深入理解TF的執行、安裝、整合、除錯等全流程。如果您有相關經驗或疑問,歡迎與我們互動,並與社群極客們進一步交流。更多TF技術文章,請點選公號底部按鈕>學習>文章合集。

作者:Tatsuya Naganawa  譯者:TF編譯組



   服務鏈

儘管有很多用例,但NFVI將成為Tungsten Fabric最突出的用例之一,這是由於NFVI許多獨特的功能,使其成為實現軟體的基礎。

其中最著名的功能就是服務鏈(service-chain),該功能可在不更改VNF IP的情況下管理流量,從而可以實時插入和刪除VNF。

由於vRouter可以在內部包含VRF,因此它可以在VNF的每個介面上都具有VRF,並且可以透過虛假的下一跳處理流量,例如傳送給下一個VNF。

Tungsten Fabric的服務鏈是透過這種方式實現的,因此一旦建立服務鏈,你將看到很多個VRF被建立,並且將插入下一跳,將流量傳送到服務鏈中的下一個VNF。

  • VRF(在control的術語中是routing-instance)被命名為domain-name:project-name:virtual-network-name:routing-instance-name。在大多數情況下,virtual-network-name和routing-instance-name是相同的,但是服務鏈是該規則的一個例外


要設定一個服務鏈示例,可以按照以下影片中的步驟進行操作:


之後,你可以看到左側virtual-network具有右側virtual-network的字首,並帶有更新的下一跳,該字首指向VNF的左側介面,對於右側virtual-network反之亦然。

注意:據我所知,在使用服務鏈v2時,僅使用“左”和“右”介面進行服務鏈計算,而“管理”和“其它”介面則被忽略

   L2, L3, NAT

有許多具有不同流量型別集的VNF,因此NFVI的SDN也需要支援多種流量型別。

為此,Tungsten Fabric服務鏈支援三種流量型別,即l2,l3,nat。

l2服務鏈(也稱為透明服務鏈)可以與透明VNF一起使用,透明VNF與網橋具有相似的功能,並基於arp響應傳送報文。

儘管vRouter始終使用相同的mac地址(00:01:00:5e:00:00),


但這種情況是該規則的例外,VNF左側的vRouter使用dest mac: 2:0:0:0:0:2傳送流量,而VNF右側的vRouter使用dest mac 1:0:0:0:0:1傳送流量。因此,bridge-type的VNF會將流量傳送到其介面的另一側。

請注意,即使使用l2 vnf,左側virtual-network和右側virtual-network也需要具有不同的子網。這可能有點反常,但是由於vRouter可以進行l3路由,因此可以使用vRouter - L2VNF - vRouter,就像router - L2VNF – router是可以接受的一樣。

另一方面,l3服務鏈(也稱為in-network服務鏈)將在不更改mac地址的情況下將流量傳送到VNF,因為在這種情況下,VNF將根據其目標IP進行路由(類似於路由器的行為)。除mac地址外,其行為與l2的情況幾乎相同。

Nat服務鏈類似於l3服務鏈,因為它希望VNF根據目標IP進行路由。一個很大的區別是,它將右側virtual-network的字首複製到左側virtual-network,但是不會將左側virtual-network的字首複製到右側virtual-network!

  • 因此左/右介面需要仔細選擇,因為在這種情況下它是不對稱的


這種服務鍊形式的典型用例是,在用於Internet訪問的SNAT等情況下,VNF的左側介面具有私網IP,而右側介面具有全域性IP。由於私網IP無法匯出到Internet,在這種情況下,左側virtual-network的字首無法複製到右側virtual-network。

   ECMP,多VNF

服務鏈功能還支援ECMP設定,用於規模化部署。

  • 配置基本相同,但需要將多個埠-元組分配給一個服務例項。


在這之後,你會發現,流量將根據5個資料包的5元組進行負載平衡。

多VNF也可以設定,如果將多個服務例項分配到一個網路策略上,則可以設定多VNF。

當使用l3服務鏈時,雖然可能會有反直覺,但需要將兩個VNF分配給同一個虛擬網路。

  • 因為所有來自VNF的資料包都會在服務鏈的獨立VRF中,所以它們可以有相同的子網。


也支援同時使用l2和l3,不過在這種情況下,需要將l2 vnf分配到不同的虛擬網路中,其中一個網路政策是附加的。

  • 在這篇博文中描述了設定示例: https://tungsten.io/building-and-testing-layer2-service-images-for-opencontrail/


   子介面

這也是NFVI中使用的功能,因此這裡我也要提一下。

VNF會基於各種原因傳送帶標籤的報文。在這種情況下,如果vlan標籤不同,則vRouter可以使用不同的VRF。

  • 類似於Junos術語“set routing-instances routing-interface-name interface xxx”中的子介面


這裡描述了具體操作:

   DPDK

vRouter具有使用DPDK與物理NIC互動的功能。

它將經常用於NFV型別的部署,因為基於純Linux kernel的網路堆疊,要獲得與典型VNF(本身可能使用DPDK或類似技術)相當的轉發效能仍然不容易。

  • https://blog.cloudflare.com/how-to-receive-a-million-packets/


要透過ansible-deployer啟用此功能,需要設定這些引數。

bms1:
  roles:
    vrouter:
      AGENT_MODE: dpdk
      CPU_CORE_MASK: “0xe”  ## coremask for forwarding core ( Note: please don't include first core in numa to reach optimal performance :( )
      SERVICE_CORE_MASK: “0x1”  ## this is for non-forwarding thread, so isolcpu for this core is not needed
      DPDK_CTRL_THREAD_MASK: “0x1”  ## same as SERVICE_CORE_MASK
      DPDK_UIO_DRIVER: uio_pci_generic  ## uio driver name
      HUGE_PAGES: 16000  ## number of 2MB hugepages, it can be smaller


當設定為AGENT_MODE: dpdk時,ansible-deployer將會安裝一些容器,例如vrouter-dpdk——這是一個針對物理NIC執行PMD的程式。因此在這種情況下,將基於DPDK實現從vRouter到物理NIC的轉發。

注意:

1. 由於vRouter連結到PMD的數量有限,因此要使用某些特定的NIC,可能需要重新構建vRouter


2. 對於某些NIC(例如XL710),不能使用uio_pci_generic。在這種情況下,需要改用vfio-pci


由於在這種情況下,vRouter的轉發平面不在kernel空間中,因此無法使用tap裝置從VM獲取報文。為此,QEMU具有“vhostuser”的功能,用於在使用者空間中將報文傳送到dpdk程式。當vRouter配置為AGENT_MODE: dpdk時,nova-vif-driver將自動建立vhostuser vif,而不是建立用於kernel vRouter的tap vif。

  • 從VM方面看,它看起來仍然像virtio,因此可以使用常規的virtio驅動程式與DPDK vRouter進行通訊。


一個警告是,當QEMU將要連線到vhostuser介面時,qemu還需要為此提供巨大的支援。使用OpenStack時,此knob將為每個VM分配大量頁面。



為了達到最佳效能,kernel和dpdk程式本身都有很多調整引數。對我來說,在kernel方面以下兩篇文章是最有幫助的。

  • https://www.redhat.com/en/blog/tuning-zero-packet-loss-red-hat-openstack-platform-part-1


  • https://www.redhat.com/en/blog/going-full-deterministic-using-real-time-openstack


  • cat /proc/sched_debug也可用於檢視核心隔離是否執行良好


而在vRouter方面,這一點可能需要注意。

1. vRouter將使用基於5-tuple的核心負載均衡,因此為了獲得最佳效能,可能需要增加流的數量


注意:當使用vrouter-dpdk時,使用untagged資料包可能會帶來更多的吞吐量(這意味著在不使用--vlan_tci的情況下提供vrouter-dpdk)

   BGPaaS

BGPaaS也是Tungsten Fabric中比較獨特的功能,該功能用於在VNF中插入VRF的路由。

  • 從某種意義上說,它有點類似於AWS VPN閘道器,因為它會自動從VPC路由表中獲取路由


從操作角度來看,使用vRouter的閘道器IP和服務IP,vRouter中的VNF將具有IPV4 bgp對等方。

一個值得注意的用例是設定ipsec VNF,它可以透過VPN閘道器連線到公共雲。在這種情況下,VPC的路由表將被複制到VNF,並將透過BGPaaS複製到vRouter的VRF,因此,當在公共雲的VPC中新新增修改的子網時,所有字首均會被正確分配。

   Service Mesh

Istio執行良好,多叢集也是其中很有趣的主題。






Tungsten Fabric入門寶典系列文章——


  1. 首次啟動和執行指南

  2. TF元件的七種“武器”

  3. 編排器整合

  4. 關於安裝的那些事(上)

  5. 關於安裝的那些事(下)

  6. 主流監控系統工具的整合

  7. 開始第二天的工作

  8. 8個典型故障及排查Tips

  9. 關於叢集更新的那些事

  10. 說說L3VPN及EVPN整合


 Tungsten Fabric 架構解析 系列文章——


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957171/viewspace-2695857/,如需轉載,請註明出處,否則將追究法律責任。

相關文章