乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      熱門技術(shù)中的應(yīng)用-云計(jì)算中的網(wǎng)絡(luò)2-軟件定義網(wǎng)絡(luò)

       行者花雕 2022-10-12 發(fā)布于北京

      上一節(jié)我們說到,使用原生的 VLAN 和 Linux 網(wǎng)橋的方式來進(jìn)行云平臺的管理,但是這樣在靈活性、隔離性方面都顯得不足,而且整個網(wǎng)絡(luò)缺少統(tǒng)一的視圖、統(tǒng)一的管理。

      可以這樣比喻,云計(jì)算就像大家一起住公寓,要共享小區(qū)里面的基礎(chǔ)設(shè)施,其中網(wǎng)絡(luò)就相當(dāng)于小區(qū)里面的電梯、樓道、路、大門等,大家都走,往往會常出現(xiàn)問題,尤其在上班高峰期,出門的人太多,對小區(qū)的物業(yè)管理就帶來了挑戰(zhàn)。

      物業(yè)可以派自己的物業(yè)管理人員,到每個單元的樓梯那里,將電梯的上下行速度調(diào)快一點(diǎn),可以派人將隔離健身區(qū)、景色區(qū)的柵欄門暫時打開,讓大家可以橫穿小區(qū),直接上地鐵,還可以派人將多個小區(qū)出入口,改成出口多、入口少等等。等過了十點(diǎn)半,上班高峰過去,再派人都改回來。

      軟件定義網(wǎng)絡(luò)(SDN)

      這種模式就像傳統(tǒng)的網(wǎng)絡(luò)設(shè)備和普通的 Linux 網(wǎng)橋的模式,配置整個云平臺的網(wǎng)絡(luò)通路,你需要登錄到這臺機(jī)器上配置這個,再登錄到另外一個設(shè)備配置那個,才能成功。

      如果物業(yè)管理人員有一套智能的控制系統(tǒng),在物業(yè)監(jiān)控室里就能看到小區(qū)里每個單元、每個電梯的人流情況,然后在監(jiān)控室里面,只要通過遠(yuǎn)程控制的方式,撥弄一個手柄,電梯的速度就調(diào)整了,柵欄門就打開了,某個入口就改出口了。

      這就是軟件定義網(wǎng)絡(luò)(SDN)software define network。它主要有以下三個特點(diǎn)。

       

       

      • 控制與轉(zhuǎn)發(fā)分離:轉(zhuǎn)發(fā)平面就是一個個虛擬或者物理的網(wǎng)絡(luò)設(shè)備,就像小區(qū)里面的一條條路。控制平面就是統(tǒng)一的控制中心,就像小區(qū)物業(yè)的監(jiān)控室。它們原來是一起的,物業(yè)管理員要從監(jiān)控室出來,到路上去管理設(shè)備,現(xiàn)在是分離的,路就是走人的,控制都在監(jiān)控室。
      • 控制平面與轉(zhuǎn)發(fā)平面之間的開放接口:控制器向上提供接口,被應(yīng)用層調(diào)用,就像總控室提供按鈕,讓物業(yè)管理員使用。控制器向下調(diào)用接口,來控制網(wǎng)絡(luò)設(shè)備,就像總控室會遠(yuǎn)程控制電梯的速度。這里經(jīng)常使用兩個名詞,前面這個接口稱為北向接口,后面這個接口稱為南向接口,上北下南嘛。
      • 邏輯上的集中控制:邏輯上集中的控制平面可以控制多個轉(zhuǎn)發(fā)面設(shè)備,也就是控制整個物理網(wǎng)絡(luò),因而可以獲得全局的網(wǎng)絡(luò)狀態(tài)視圖,并根據(jù)該全局網(wǎng)絡(luò)狀態(tài)視圖實(shí)現(xiàn)對網(wǎng)絡(luò)的優(yōu)化控制,就像物業(yè)管理員在監(jiān)控室能夠看到整個小區(qū)的情況,并根據(jù)情況優(yōu)化出入方案。

      OpenFlow 和 OpenvSwitch

      SDN 有很多種實(shí)現(xiàn)方式,我們來看一種開源的實(shí)現(xiàn)方式。

      OpenFlow 是 SDN 控制器和網(wǎng)絡(luò)設(shè)備之間互通的南向接口協(xié)議,OpenvSwitch 用于創(chuàng)建軟件的虛擬交換機(jī)。OpenvSwitch 是支持 OpenFlow 協(xié)議的,當(dāng)然也有一些硬件交換機(jī)也支持 OpenFlow 協(xié)議。它們都可以被統(tǒng)一的 SDN 控制器管理,從而實(shí)現(xiàn)物理機(jī)和虛擬機(jī)的網(wǎng)絡(luò)連通。

       

       

       SDN 控制器是如何通過 OpenFlow 協(xié)議控制網(wǎng)絡(luò)的呢?

       

       

       在 OpenvSwitch 里面,有一個流表規(guī)則,任何通過這個交換機(jī)的包,都會經(jīng)過這些規(guī)則進(jìn)行處理,從而接收、轉(zhuǎn)發(fā)、放棄。

      那流表長啥樣呢?其實(shí)就是一個個表格,每個表格好多行,每行都是一條規(guī)則。每條規(guī)則都有優(yōu)先級,先看高優(yōu)先級的規(guī)則,再看低優(yōu)先級的規(guī)則。

       

       

      對于每一條規(guī)則,要看是否滿足匹配條件。這些條件包括,從哪個端口進(jìn)來的,網(wǎng)絡(luò)包頭里面有什么等等。滿足了條件的網(wǎng)絡(luò)包,就要執(zhí)行一個動作,對這個網(wǎng)絡(luò)包進(jìn)行處理??梢孕薷陌^里的內(nèi)容,可以跳到任何一個表格,可以轉(zhuǎn)發(fā)到某個網(wǎng)口出去,也可以丟棄。 

      通過這些表格,可以對收到的網(wǎng)絡(luò)包隨意處理。

       

       

       

       具體都能做什么處理呢?通過上面的表格可以看出,簡直是想怎么處理怎么處理,可以覆蓋 TCP/IP 協(xié)議棧的四層。

      對于物理層:

      • 匹配規(guī)則包括從哪個口進(jìn)來;
      • 執(zhí)行動作包括從哪個口出去。

      對于 MAC 層:

      • 匹配規(guī)則包括:源 MAC 地址是多少?(dl_src),目標(biāo) MAC 是多少?(dl_dst),所屬 vlan 是多少?(dl_vlan);
      • 執(zhí)行動作包括:修改源 MAC(mod_dl_src),修改目標(biāo) MAC(mod_dl_dst),修改 VLAN(mod_vlan_vid),刪除 VLAN(strip_vlan),MAC 地址學(xué)習(xí)(learn)。

      對于網(wǎng)絡(luò)層:

      • 匹配規(guī)則包括:源 IP 地址是多少?(nw_src),目標(biāo) IP 是多少?(nw_dst)。
      • 執(zhí)行動作包括:修改源 IP 地址(mod_nw_src),修改目標(biāo) IP 地址(mod_nw_dst)。

      對于傳輸層:

      • 匹配規(guī)則包括:源端口是多少?(tp_src),目標(biāo)端口是多少?(tp_dst)。
      • 執(zhí)行動作包括:修改源端口(mod_tp_src),修改目標(biāo)端口(mod_tp_dst)。

      總而言之,對于 OpenvSwitch 來講,網(wǎng)絡(luò)包到了我手里,就是一個 Buffer,我想怎么改怎么改,想發(fā)到哪個端口就發(fā)送到哪個端口。

      OpenvSwitch 有本地的命令行可以進(jìn)行配置,能夠?qū)嶒?yàn)咱們前面講過的一些功能。我們可以通過 OpenvSwitch 的命令創(chuàng)建一個虛擬交換機(jī)。然后可以將多個虛擬端口 port 添加到這個虛擬交換機(jī)上。

      ovs-vsctl add-br ubuntu_br
      

       

      實(shí)驗(yàn)一:用 OpenvSwitch 實(shí)現(xiàn) VLAN 的功能

      下面我們實(shí)驗(yàn)一下通過 OpenvSwitch 實(shí)現(xiàn) VLAN 的功能,在 OpenvSwitch 中端口 port 分兩種。

      第一類是 access port:

      • 這個端口配置 tag,從這個端口進(jìn)來的包會被打上這個 tag;
      • 如果網(wǎng)絡(luò)包本身帶有的 VLAN ID 等于 tag,則會從這個 port 發(fā)出;
      • 從 access port 發(fā)出的包不帶 VLAN ID。

      第二類是 trunk port:

      • 這個 port 不配置 tag,配置 trunks;
      • 如果 trunks 為空,則所有的 VLAN 都 trunk,也就意味著對于所有 VLAN 的包,本身帶什么 VLAN ID,就是攜帶著什么 VLAN ID,如果沒有設(shè)置 VLAN,就屬于 VLAN 0,全部允許通過;
      • 如果 trunks 不為空,則僅僅帶著這些 VLAN ID 的包通過。

      我們通過以下命令創(chuàng)建如下的環(huán)境:

      ovs-vsctl add-port ubuntu_br first_br
      ovs-vsctl add-port ubuntu_br second_br
      ovs-vsctl add-port ubuntu_br third_br
      ovs-vsctl set Port vnet0 tag=101
      ovs-vsctl set Port vnet1 tag=102
      ovs-vsctl set Port vnet2 tag=103
      ovs-vsctl set Port first_br tag=103
      ovs-vsctl clear Port second_br tag
      ovs-vsctl set Port third_br trunks=101,102
      

      另外要配置禁止 MAC 地址學(xué)習(xí)。

      ovs-vsctl set bridge ubuntu_br flood-vlans=101,102,103

       

       創(chuàng)建好了環(huán)境以后,我們來做這個實(shí)驗(yàn)。

      1. 從 192.168.100.102 來 ping 192.168.100.103,然后用 tcpdump 進(jìn)行抓包。first_if 收到包了,從 first_br 出來的包頭是沒有 VLAN ID 的。second_if 也收到包了,由于 second_br 是 trunk port,因而出來的包頭是有 VLAN ID 的,third_if 收不到包。
      2. 從 192.168.100.100 來 ping 192.168.100.105, 則 second_if 和 third_if 可以收到包,當(dāng)然 ping 不通,因?yàn)?third_if 不屬于某個 VLAN。first_if 是收不到包的。second_if 能夠收到包,而且包頭里面是 VLAN ID=101。third_if 也能收到包,而且包頭里面是 VLAN ID=101。
      3. 從 192.168.100.101 來 ping 192.168.100.104, 則 second_if 和 third_if 可以收到包。first_if 是收不到包的。second_br 能夠收到包,而且包頭里面是 VLAN ID=102。third_if 也能收到包,而且包頭里面是 VLAN ID=102。

      通過這個例子,我們可以看到,通過 OpenvSwitch,不用買一個支持 VLAN 的交換機(jī),你也能學(xué)習(xí) VLAN 的工作模式了。

      實(shí)驗(yàn)二:用 OpenvSwitch 模擬網(wǎng)卡綁定,連接交換機(jī)

      接下來,我們來做另一個實(shí)驗(yàn)。在前面,我們還說過,為了高可用,可以使用網(wǎng)卡綁定,連接到交換機(jī),OpenvSwitch 也可以模擬這一點(diǎn)。

      在 OpenvSwitch 里面,有個 bond_mode,可以設(shè)置為以下三個值:

      • active-backup:一個連接是 active,其他的是 backup,當(dāng) active 失效的時候,backup 頂上;
      • balance-slb:流量安裝源 MAC 和 output VLAN 進(jìn)行負(fù)載均衡;
      • balance-tcp:必須在支持 LACP 協(xié)議的情況下才可以,可根據(jù) L2, L3, L4 進(jìn)行負(fù)載均衡。

      我們搭建一個測試環(huán)境。

       

       我們使用下面的命令,建立 bond 連接。

      ovs-vsctl add-bond br0 bond0 first_br second_br
      ovs-vsctl add-bond br1 bond1 first_if second_if
      ovs-vsctl set Port bond0 lacp=active
      ovs-vsctl set Port bond1 lacp=active
      

      默認(rèn)情況下 bond_mode 是 active-backup 模式,一開始 active 的是 first_br 和 first_if。

      這個時候我們從 192.168.100.100 ping 192.168.100.102,以及從 192.168.100.101 ping 192.168.100.103 的時候,tcpdump 可以看到所有的包都是從 first_if 通過。

      如果把 first_if 設(shè)成 down,則包的走向會變,發(fā)現(xiàn) second_if 開始有流量,對于 192.168.100.100 和 192.168.100.101 似乎沒有收到影響。

      如果我們通過以下命令,把 bond_mode 設(shè)為 balance-slb。然后我們同時在 192.168.100.100 ping 192.168.100.102,在 192.168.100.101 ping 192.168.100.103,我們通過 tcpdump 發(fā)現(xiàn)包已經(jīng)被分流了。

      ovs-vsctl set Port bond0 bond_mode=balance-slb
      ovs-vsctl set Port bond1 bond_mode=balance-slb
      

      通過這個例子,我們可以看到,通過 OpenvSwitch,你不用買兩臺支持 bond 的交換機(jī),也能看到 bond 的效果。

      那 OpenvSwitch 是怎么做到這些的呢?我們來看 OpenvSwitch 的架構(gòu)圖。

       

       OpenvSwitch 包含很多的模塊,在用戶態(tài)有兩個重要的進(jìn)程,也有兩個重要的命令行工具。

      • 第一個進(jìn)程是 OVSDB 進(jìn)程。ovs-vsctl 命令行會和這個進(jìn)程通信,去創(chuàng)建虛擬交換機(jī),創(chuàng)建端口,將端口添加到虛擬交換機(jī)上,OVSDB 會將這些拓?fù)湫畔⒈4嬖谝粋€本地的文件中。
      • 第一個進(jìn)程是 vswitchd 進(jìn)程。ovs-ofctl 命令行會和這個進(jìn)程通信,去下發(fā)流表規(guī)則,規(guī)則里面會規(guī)定如何對網(wǎng)絡(luò)包進(jìn)行處理,vswitchd 會將流表放在用戶態(tài) Flow Table 中。

      在內(nèi)核態(tài),OpenvSwitch 有內(nèi)核模塊 OpenvSwitch.ko,對應(yīng)圖中的 Datapath 部分。在網(wǎng)卡上注冊一個函數(shù),每當(dāng)有網(wǎng)絡(luò)包到達(dá)網(wǎng)卡的時候,這個函數(shù)就會被調(diào)用。

      在內(nèi)核的這個函數(shù)里面,會拿到網(wǎng)絡(luò)包,將各個層次的重要信息拿出來,例如:

      • 在物理層,in_port 即包進(jìn)入的網(wǎng)口的 ID;
      • 在 MAC 層,源和目的 MAC 地址;
      • 在 IP 層,源和目的 IP 地址;
      • 在傳輸層,源和目的端口號。

      在內(nèi)核中,有一個內(nèi)核態(tài) Flow Table。接下來內(nèi)核模塊在這個內(nèi)核流表中匹配規(guī)則,如果匹配上了,則執(zhí)行操作、修改包,或者轉(zhuǎn)發(fā)或者放棄。如果內(nèi)核沒有匹配上,則需要進(jìn)入用戶態(tài),用戶態(tài)和內(nèi)核態(tài)之間通過 Linux 的一個機(jī)制 Netlink 相互通信。

      內(nèi)核通過 upcall,告知用戶態(tài)進(jìn)程 vswitchd 在用戶態(tài) Flow Table 里面去匹配規(guī)則,這里面的規(guī)則是全量的流表規(guī)則,而內(nèi)核 Flow Table 里面的只是為了快速處理,保留了部分規(guī)則,內(nèi)核里面的規(guī)則過一陣就會過期。

      當(dāng)在用戶態(tài)匹配到了流表規(guī)則之后,就在用戶態(tài)執(zhí)行操作,同時將這個匹配成功的流表通過 reinject 下發(fā)到內(nèi)核,從而接下來的包都能在內(nèi)核找到這個規(guī)則。

      這里調(diào)用 openflow 協(xié)議的,是本地的命令行工具,也可以是遠(yuǎn)程的 SDN 控制器,一個重要的 SDN 控制器是 OpenDaylight。

      下面這個圖就是 OpenDaylight 中看到的拓?fù)鋱D。是不是有種物業(yè)管理員在監(jiān)控室里的感覺?

       

       我們可以通過在 OpenDaylight 里,將兩個交換機(jī)之間配置通,也可以配置不通,還可以配置一個虛擬 IP 地址 VIP,在不同的機(jī)器之間實(shí)現(xiàn)負(fù)載均衡等等,所有的策略都可以靈活配置。

      如何在云計(jì)算中使用 OpenvSwitch?

      OpenvSwitch 這么牛,如何用在云計(jì)算中呢?

       

       我們還是討論 VLAN 的場景。

      在沒有 OpenvSwitch 的時候,如果一個新的用戶要使用一個新的 VLAN,還需要創(chuàng)建一個屬于新的 VLAN 的虛擬網(wǎng)卡,并且為這個租戶創(chuàng)建一個單獨(dú)的虛擬網(wǎng)橋,這樣用戶越來越多的時候,虛擬網(wǎng)卡和虛擬網(wǎng)橋會越來越多,管理非常復(fù)雜。

      另一個問題是虛擬機(jī)的 VLAN 和物理環(huán)境的 VLAN 是透傳的,也即從一開始規(guī)劃的時候,就需要匹配起來,將物理環(huán)境和虛擬環(huán)境強(qiáng)綁定,本來就不靈活。

      而引入了 OpenvSwitch,狀態(tài)就得到了改觀。

      首先,由于 OpenvSwitch 本身就是支持 VLAN 的,所有的虛擬機(jī)都可以放在一個網(wǎng)橋 br0 上,通過不同的用戶配置不同的 tag,就能夠?qū)崿F(xiàn)隔離。例如上面的圖,用戶 A 的虛擬機(jī)都在 br0 上,用戶 B 的虛擬機(jī)都在 br1 上,有了 OpenvSwitch,就可以都放在 br0 上,只是設(shè)置了不同的 tag。

      另外,還可以創(chuàng)建一個虛擬交換機(jī) br1,將物理網(wǎng)絡(luò)和虛擬網(wǎng)絡(luò)進(jìn)行隔離。物理網(wǎng)絡(luò)有物理網(wǎng)絡(luò)的 VLAN 規(guī)劃,虛擬機(jī)在一臺物理機(jī)上,所有的 VLAN 都是從 1 開始的。由于一臺機(jī)器上的虛擬機(jī)不會超過 4096 個,所以 VLAN 在一臺物理機(jī)上如果從 1 開始,肯定夠用了。

      例如在圖中,上面的物理機(jī)里面,用戶 A 被分配的 tag 是 1,用戶 B 被分配的 tag 是 2,而在下面的物理機(jī)里面,用戶 A 被分配的 tag 是 7,用戶 B 被分配的 tag 是 6。

      如果物理機(jī)之間的通信和隔離還是通過 VLAN 的話,需要將虛擬機(jī)的 VLAN 和物理環(huán)境的 VLAN 對應(yīng)起來,但為了靈活性,不一定一致,這樣可以實(shí)現(xiàn)分別管理物理機(jī)的網(wǎng)絡(luò)和虛擬機(jī)的網(wǎng)絡(luò)。好在 OpenvSwitch 可以對包的內(nèi)容進(jìn)行修改。例如通過匹配 dl_vlan,然后執(zhí)行 mod_vlan_vid 來改進(jìn)進(jìn)出出物理機(jī)的網(wǎng)絡(luò)包。

      盡管租戶多了,物理環(huán)境的 VLAN 還是不夠用,但是有了 OpenvSwitch 的映射,將物理和虛擬解耦,從而可以讓物理環(huán)境使用其他技術(shù),而不影響虛擬機(jī)環(huán)境,這個我們后面再講。

       

      小結(jié)

      • 用 SDN 控制整個云里面的網(wǎng)絡(luò),就像小區(qū)保安從總控室管理整個物業(yè)是一樣的,將控制面和數(shù)據(jù)面進(jìn)行了分離;
      • 一種開源的虛擬交換機(jī)的實(shí)現(xiàn) OpenvSwitch,它能對經(jīng)過自己的包做任意修改,從而使得云對網(wǎng)絡(luò)的控制十分靈活;
      • 將 OpenvSwitch 引入了云之后,可以使得配置簡單而靈活,并且可以解耦物理網(wǎng)絡(luò)和虛擬網(wǎng)絡(luò)。

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多