溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Tungsten Fabric入門寶典丨關(guān)于服務(wù)鏈、BGPaaS及其它

發(fā)布時間:2020-08-19 05:33:02 來源:ITPUB博客 閱讀:214 作者:TF中文社區(qū) 欄目:互聯(lián)網(wǎng)科技

Tungsten Fabric入門寶典系列文章 ,來自技術(shù)大牛傾囊相授的實踐經(jīng)驗,由TF中文社區(qū)為您編譯呈現(xiàn),旨在幫助新手深入理解TF的運行、安裝、集成、調(diào)試等全流程。如果您有相關(guān)經(jīng)驗或疑問,歡迎與我們互動,并與社區(qū)極客們進(jìn)一步交流。更多TF技術(shù)文章,請點擊公號底部按鈕>學(xué)習(xí)>文章合集。

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



   服務(wù)鏈

盡管有很多用例,但NFVI將成為Tungsten Fabric最突出的用例之一,這是由于NFVI許多獨特的功能,使其成為實現(xiàn)軟件的基礎(chǔ)。

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

由于vRouter可以在內(nèi)部包含VRF,因此它可以在VNF的每個接口上都具有VRF,并且可以通過虛假的下一跳處理流量,例如發(fā)送給下一個VNF。

Tungsten Fabric的服務(wù)鏈?zhǔn)峭ㄟ^這種方式實現(xiàn)的,因此一旦創(chuàng)建服務(wù)鏈,你將看到很多個VRF被創(chuàng)建,并且將插入下一跳,將流量發(fā)送到服務(wù)鏈中的下一個VNF。

  • VRF(在control的術(shù)語中是routing-instance)被命名為domain-name:project-name:virtual-network-name:routing-instance-name。在大多數(shù)情況下,virtual-network-name和routing-instance-name是相同的,但是服務(wù)鏈?zhǔn)窃撘?guī)則的一個例外


要設(shè)置一個服務(wù)鏈?zhǔn)纠梢园凑找韵乱曨l中的步驟進(jìn)行操作:

  • https://www.youtube.com/watch?v=h6qOqsPtQ7M


之后,你可以看到左側(cè)virtual-network具有右側(cè)virtual-network的前綴,并帶有更新的下一跳,該前綴指向VNF的左側(cè)接口,對于右側(cè)virtual-network反之亦然。

注意:據(jù)我所知,在使用服務(wù)鏈v2時,僅使用“左”和“右”接口進(jìn)行服務(wù)鏈計算,而“管理”和“其它”接口則被忽略

   L2, L3, NAT

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

為此,Tungsten Fabric服務(wù)鏈支持三種流量類型,即l2,l3,nat。

l2服務(wù)鏈(也稱為透明服務(wù)鏈)可以與透明VNF一起使用,透明VNF與網(wǎng)橋具有相似的功能,并基于arp響應(yīng)發(fā)送報文。

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

  • https://github.com/Juniper/contrail-controller/wiki/Contrail-VRouter-ARP-Processing#vrouter-mac-address


但這種情況是該規(guī)則的例外,VNF左側(cè)的vRouter使用dest mac: 2:0:0:0:0:2發(fā)送流量,而VNF右側(cè)的vRouter使用dest mac 1:0:0:0:0:1發(fā)送流量。因此,bridge-type的VNF會將流量發(fā)送到其接口的另一側(cè)。

請注意,即使使用l2 vnf,左側(cè)virtual-network和右側(cè)virtual-network也需要具有不同的子網(wǎng)。這可能有點反常,但是由于vRouter可以進(jìn)行l(wèi)3路由,因此可以使用vRouter - L2VNF - vRouter,就像router - L2VNF – router是可以接受的一樣。

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

Nat服務(wù)鏈類似于l3服務(wù)鏈,因為它希望VNF根據(jù)目標(biāo)IP進(jìn)行路由。一個很大的區(qū)別是,它將右側(cè)virtual-network的前綴復(fù)制到左側(cè)virtual-network,但是不會將左側(cè)virtual-network的前綴復(fù)制到右側(cè)virtual-network!

  • 因此左/右接口需要仔細(xì)選擇,因為在這種情況下它是不對稱的


這種服務(wù)鏈形式的典型用例是,在用于Internet訪問的SNAT等情況下,VNF的左側(cè)接口具有私網(wǎng)IP,而右側(cè)接口具有全局IP。由于私網(wǎng)IP無法導(dǎo)出到Internet,在這種情況下,左側(cè)virtual-network的前綴無法復(fù)制到右側(cè)virtual-network。

   ECMP,多VNF

服務(wù)鏈功能還支持ECMP設(shè)置,用于規(guī)?;渴稹?/span>

  • 配置基本相同,但需要將多個端口-元組分配給一個服務(wù)實例。


在這之后,你會發(fā)現(xiàn),流量將根據(jù)5個數(shù)據(jù)包的5元組進(jìn)行負(fù)載平衡。

多VNF也可以設(shè)置,如果將多個服務(wù)實例分配到一個網(wǎng)絡(luò)策略上,則可以設(shè)置多VNF。

當(dāng)使用l3服務(wù)鏈時,雖然可能會有反直覺,但需要將兩個VNF分配給同一個虛擬網(wǎng)絡(luò)。

  • 因為所有來自VNF的數(shù)據(jù)包都會在服務(wù)鏈的獨立VRF中,所以它們可以有相同的子網(wǎng)。


也支持同時使用l2和l3,不過在這種情況下,需要將l2 vnf分配到不同的虛擬網(wǎng)絡(luò)中,其中一個網(wǎng)絡(luò)政策是附加的。

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


   子接口

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

VNF會基于各種原因發(fā)送帶標(biāo)簽的報文。在這種情況下,如果vlan標(biāo)簽不同,則vRouter可以使用不同的VRF。

  • 類似于Junos術(shù)語“set routing-instances routing-interface-name interface xxx”中的子接口


這里描述了具體操作:
https://www.youtube.com/watch?v=ANhBQe_DS2E

   DPDK

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

它將經(jīng)常用于NFV類型的部署,因為基于純Linux kernel的網(wǎng)絡(luò)堆棧,要獲得與典型VNF(本身可能使用DPDK或類似技術(shù))相當(dāng)?shù)霓D(zhuǎn)發(fā)性能仍然不容易。

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


要通過ansible-deployer啟用此功能,需要設(shè)置這些參數(shù)。

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


當(dāng)設(shè)置為AGENT_MODE: dpdk時,ansible-deployer將會安裝一些容器,例如vrouter-dpdk——這是一個針對物理NIC運行PMD的進(jìn)程。因此在這種情況下,將基于DPDK實現(xiàn)從vRouter到物理NIC的轉(zhuǎn)發(fā)。

注意:

1. 由于vRouter鏈接到PMD的數(shù)量有限,因此要使用某些特定的NIC,可能需要重新構(gòu)建vRouter

  • https://github.com/Juniper/contrail-vrouter/blob/master/SConscript#L321


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

  • https://doc.dpdk.org/guides-18.05/rel_notes/known_issues.html#uio-pci-generic-module-bind-failed-in-x710-xl710-xxv710


由于在這種情況下,vRouter的轉(zhuǎn)發(fā)平面不在kernel空間中,因此無法使用tap設(shè)備從VM獲取報文。為此,QEMU具有“vhostuser”的功能,用于在用戶空間中將報文發(fā)送到dpdk進(jìn)程。當(dāng)vRouter配置為AGENT_MODE: dpdk時,nova-vif-driver將自動創(chuàng)建vhostuser vif,而不是創(chuàng)建用于kernel vRouter的tap vif。

  • 從VM方面看,它看起來仍然像virtio,因此可以使用常規(guī)的virtio驅(qū)動程序與DPDK vRouter進(jìn)行通信。


一個警告是,當(dāng)QEMU將要連接到vhostuser界面時,qemu還需要為此提供巨大的支持。使用OpenStack時,此knob將為每個VM分配大量頁面。

Tungsten Fabric入門寶典丨關(guān)于服務(wù)鏈、BGPaaS及其它

為了達(dá)到最佳性能,kernel和dpdk進(jìn)程本身都有很多調(diào)整參數(shù)。對我來說,在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的核心負(fù)載均衡,因此為了獲得最佳性能,可能需要增加流的數(shù)量

  • https://www.openvswitch.org/support/ovscon2018/6/0940-yang.pptx


注意:當(dāng)使用vrouter-dpdk時,使用untagged數(shù)據(jù)包可能會帶來更多的吞吐量(這意味著在不使用--vlan_tci的情況下提供vrouter-dpdk)

   BGPaaS

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

  • 從某種意義上說,它有點類似于AWS VPN網(wǎng)關(guān),因為它會自動從VPC路由表中獲取路由


從操作角度來看,使用vRouter的網(wǎng)關(guān)IP和服務(wù)IP,vRouter中的VNF將具有IPV4 bgp對等方。

一個值得注意的用例是設(shè)置ipsec VNF,它可以通過VPN網(wǎng)關(guān)連接到公共云。在這種情況下,VPC的路由表將被復(fù)制到VNF,并將通過BGPaaS復(fù)制到vRouter的VRF,因此,當(dāng)在公共云的VPC中新添加修改的子網(wǎng)時,所有前綴均會被正確分配。

   Service Mesh

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

  • https://www.youtube.com/watch?v=VSNc9qd2poA


  • https://istio.io/docs/setup/kubernetes/install/multicluster/vpn/





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


  1. 首次啟動和運行指南

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

  3. 編排器集成

  4. 關(guān)于安裝的那些事(上)

  5. 關(guān)于安裝的那些事(下)

  6. 主流監(jiān)控系統(tǒng)工具的集成

  7. 開始第二天的工作

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

  9. 關(guān)于集群更新的那些事

  10. 說說L3VPN及EVPN集成


 Tungsten Fabric 架構(gòu)解析 系列文章——


  • 第一篇: TF主要特點和用例

  •   第二篇: TF怎么運作

  •    第三篇:詳解vRouter體系結(jié)構(gòu)

  •    第四篇: TF的服務(wù)鏈

  •   第五篇: vRouter的部署選項

  •    第六篇: TF如何收集、分析、部署?

  •    第七篇: TF如何編排

  •   第八篇: TF支持API一覽

  •   第九篇: TF如何連接到物理網(wǎng)絡(luò)

  •   第十篇: TF基于應(yīng)用程序的安全策略

Tungsten Fabric入門寶典丨關(guān)于服務(wù)鏈、BGPaaS及其它

Tungsten Fabric入門寶典丨關(guān)于服務(wù)鏈、BGPaaS及其它

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI