NSX-t交換路由

1. 交換路由基本原理
1.1. 使用視角
1.1.1. 交換機/路由器
交換機用于二層通信(不跨網段),路由器用于三層通信(跨網段)。

我之前有過這樣的疑惑:交換機既然用于二層通信,發送方只要知道接收方的mac地址即可通信,為什么還要要求接收方的ip地址和自己在同一個網段?
后來想想,如上圖所示,PC1既然是使用ip地址訪問PC3,那就得遵守三層通信的規則,PC1發現自己和PC3不在一個網段,就會轉去和路由器二層通信,期望路由器到別的網段找到PC3,所以說PC1只是沒有和PC3二層通信,而不是不能和PC3二層通信。
1.1.2. 交換機級聯
多臺交換機的普通口或trunk口之間,通過網線直連在一起,等效于多臺交換機合并成了一臺交換機,稱為“級聯”,其中,通過trunk口級聯,每臺交換機上id相同的vlan,也會被合并。

1.1.3. Overlay二層通信
交換機之間,還可以通過TEP口(Tunnel EndPoint,隧道端點)級聯,合并成一臺Overlay交換機。TEP口之間是三層網絡,如圖所示,只要能理解,它是如何如同網線直連一樣,將PC1構造的報文,原封不動的發送到PC2,那么它就沒有什么神秘的:
① PC1構造“mac1 : 192.168.1.6 -> mac2 : 192.168.1.7”報文,發送到直連交換機;
② 直連交換機根據自己的mac表,找不到mac2,就將報文復制到TEP口;
③ TEP口將PC1構造的報文,作為負載,構造udp報文,發送到跟它相連的TEP口;
④ udp報文到達對方TEP口后,解析得到其負載,還原出“mac1 : 192.168.1.6 -> mac2 : 192.168.1.7”報文,并查詢mac表,將其發送給PC2。

從上面的過程可以看出,隧道兩端的封裝和解封裝過程,對于PC1與PC2之間的二層通信是透明的,它相比普通級聯,可以突破地域的限制,比如,相隔十萬八千里的2臺交換機,通過網線級聯是不現實的,只能通過隧道進行級聯。
1.2. 設計視角
1.2.1. 交換機
通信實質上就是,將數據從發送方復制到接收方,因此很容易理解,一臺設備要與多臺設備通信,就必須跟多臺設備之間存在傳輸介質(無線通信設備之間也不例外,只不過肉眼看不見而已),所以誕生了交換機,它提供一對多連接的功能,使得設備只要跟交換機相連,就能跟其它多臺設備相連。
1.2.2. mac地址
單臺交換機的端口數量是有限的,所以交換機與交換機之間必須支持級聯,才能將全世界的設備聯系在一起,所以,要指明一臺設備的位置,其實就是要指明“交換機:端口號”,比如“switch2:端口2”。

但是,ip報文中,使用的卻是“ip:mac”地址,因此可以推測,ip地址與交換機之間存在映射,先鎖定一個較大的范圍,mac地址與端口號之間存在映射,進一步鎖定精確位置。

交換機支持同一網段的設備通信,所以交換機地址其實等效于網段的地址,ip地址中的“網絡號,其實是非常直白的指明了交換機地址。關于個人對ip地址的理解,稍后再詳細介紹,暫且只關注mac地址:報文中為什么不直接寫明端口號,而是使用mac地址,非要由交換機查詢mac表,經過一次映射才能得到端口號?
根據個人理解,mac地址的設計意圖,包括2個方面:
(1) 跟最后一跳路由器連接的,可能不是單臺交換機,而是級聯在一起的多臺交換機,那么,就必須對這些交換機的所有端口,進行統一編號,保證每個口的編號都是唯一的;
(2) 讓設備具體連接在交換機的哪個端口,對通信對端透明,比如,將設備從一個端口拔掉,連接到另一個端口,只需要修改mac表,就可以保證它仍然對外可見。
想到這里就明白了,地址的分層緣于地址映射,ip地址在路由器層,映射到某個路由器端口(連接著目標交換機),mac地址在交換機層,映射到某個交換機端口(連接著目標設備)。相應也就能理解,具體的交換機端口其實就是一層地址,它是物理上存在,但對通信雙方透明的,因此報文中只有三層ip地址和二層mac地址,而沒有一層地址。
另外,mac地址跟設備必須是強綁定的,如果是可以修改的,就很難保證唯一性,就像ip沖突一樣,因此mac地址在設備出廠時,就固定設置好了,所以也很好理解,mac地址必須由專門的組織管理分配,從而保證每個已分配的地址都具備全球唯一性。其中,mac地址長度被設計為6字節,即地址空間大小為2^48,按每年消耗100億個計算,可以使用28000多年。
1.2.3. 路由器
根據1.1.2、1.1.3節可以知道,交換機之間可以通過普通口、trunk口、TEP口相連,這些連接方式,流量在連接口之間都是全量轉發,相比之下,個人習慣將路由器理解為交換機之間的另一種連接方式,并且它的作用是,使流量在連接口之間有選擇的轉發,而選擇的依據就是,各種路由協議在路由器中生成的路由表。

對比圖中的2種連接方式,并假設發送方在switch1交換機,接收方在switch2交換機,就可以很好的理解這一點:
(1) 網線直連(交換機級聯)
發送報文到達switch1之后,switch1在自己的mac表上找不到接收方mac地址,就會向switch2和switch3都轉發(這是因為switch1無法預知接收方到底在哪個交換機上),switch3在自己 mac表上沒找到,也會繼續向switchN轉發(因為它無法知道接收方會在switch2上被找到)。
(2) 通過路由器相連
從左圖可以看出,報文其實是沒有必要沿著紅色線路白走一圈的,而路由器有選擇的轉發,就可以避免這個情況。
個人理解,路由器的設計意圖僅此而已,對于“路由器可以隔離廣播域”的說法,曾經讓我誤以為,路由器就是為隔離廣播域而設計,確實,不管是鏈路層廣播報文,還是網絡層廣播報文,路由器都不會繼續轉發,效果上的確可以隔離廣播域,但是,“可以”和“設計意圖”是兩個概念,好比大炮的兩頭可以導電,并不代表設計大炮就是用于導電。
所以,不知道有沒有人和我一樣存在這個誤解,存在這個誤解,也會存在這樣的疑惑:既然廣播ARP請求包的目的,是查詢目的ip主機的mac地址,那么“廣播”和“ip地址”就是一對共生的概念,而“ip地址”又是伴隨“路由器”的概念產生,也就是說,沒有“路由器”也就不會有“廣播”,為什么反而說,路由器的作用是隔離廣播域?
1.2.4. ip地址
1.2.2節已經提到,ip地址包含網絡號,用于在路由器層穿梭,實際上,ip地址還包含主機號。很顯然,主機號必須跟mac地址之間存在映射關系,比如,通過ssh連接一個ip地址,其中的網絡號,只能找到目標設備所在的交換機,要進一步找到設備所在的端口,還需要mac地址。
個人猜測,這大概是針對使用體驗的一個設計,假設ip地址沒有設計成“網絡號+主機號”,而是“網絡號+mac地址”的話,一方面,ip地址會非常長,實際上,根據網絡號找到目標設備所在的交換機后,就已經將目標設備鎖定在一個很小的范圍了,也就是說,使用很小的地址空間,就可以對這些主機編碼,另一方面,ip作為三層地址,里面還摻和著mac地址的話,概念上也會相對混亂。
1.2.5. ARP
ip主機號與mac地址的映射關系,不是集中在一張表里,而是分散在每臺設備上,因此,如果發送方的ARP表找不到目的設備的mac地址,就要廣播ARP請求,詢問目標設備的mac地址,具體過程就不詳述了。
?
2. 虛擬化網絡
2.1. ESXi/KVM、vCenter、NSX-t

ESXi/KVM
虛擬化系統,提供虛假化能力和接口,支持安裝在物理機中,使得可以在物理機中創建設備,也支持嵌套,安裝到虛擬機中,使得虛擬宿主機中可以進一步創建虛擬機。
vCenter
一套封裝ESXi主機接口和資源的平臺,它可以添加多臺ESXi主機,然后間接提供給用戶,比如用戶通過vCenter創建VM,實際上在某臺ESXi主機中創建了VM。
NSX-t
一套封裝ESXi/KVM主機接口和資源的平臺,它側重于封裝通信虛擬設備的操作接口,比如交換機和路由器的創建、連接、刪除等,使主機中創建的VM,可以相互通信。并且,它支持和vCenter結合使用,vCenter注冊到NSX-t之后,其中添加的ESXi主機就會對NSX-t也可見,由于vCenter不支持添加KVM主機,所以KVM主機必須直接添加到NSX-t。
虛擬交換機
ESXi系統安裝后,默認會創建一臺VSS(虛擬標準交換機),因為將ESXi主機添加到vCenter的過程中,vCenter會在其中安插幾臺VM,從而可以對它進行管理,而這幾臺VM就是通過VSS接入管理網段,和vCenter進行通信的。另外,通過vCenter,可以創建VDS(vSphere分布式交換機),通過NSX-t,可以創建NVDS(NSX-t虛擬分布式交換機)。
虛擬路由器
通過NSX-t,可以創建T1(東西向路由器)和T0(南北向路由器)。
2.2. NSX-t二層通信
2.2.1. 概念
NSX-t虛擬交換機(NVDS)
通過NSX-t創建,它可以借助宿主機的通信能力,建立宿主機內部VM與宿主機外部通信的橋梁。
傳輸節點(Transport Node,簡稱:TN)
可以將NVDS與TN,理解為面向對象編程語言中“類-對象”的關系,NVDS只是一個概念,也可以將它理解為一種虛擬交換機類型,TN則是指一臺會被真實創建的NVDS實例。另外,目前查看到的資料,都將每臺ESXi/KVM主機看作一個TN,個人猜測,這可能跟NSX-t上支持“將主機添加到TZ”的操作有關,這容易讓用戶在直覺上,認為是將主機加入了TZ,從而認為主機就是TN,但是實際是在主機中創建了TN,然后主機隨著TN加入到了TZ,就是說主機與TN之間有對應關系,但是TN≠主機。
傳輸區域(Transport Zone,簡稱:TZ)
個人認為:TZ = 多臺TN的級聯交換機。
網段(Segment)
可以進行二層通信的一組交換機端口,所以也稱端口組(port group,簡稱:PG),有些資料也稱為vSwitch,比如一個vlan,或者基于vxlan隧道建立的Overlay交換機上,VNI相同的端口集合。

上行口(Uplink)

物理世界中,通信設備之間是通過物理介質相連,比如網線,然而虛擬通信設備上是沒有辦法插網線的,只能通過軟件模擬連接。在每個宿主機內部,VM要能和交換機連接,所以要實現進程間的數據共享,另外,宿主機中的任何通信程序,都要借助宿主機網卡收發流量,虛擬交換機組件也不例外,所以要實現交換機組件的網卡讀寫功能,使其邏輯上存在一個端口,即“上行口”,可以借助宿主機網卡跟外部通信。
2.2.2. 配置
理解了以上概念,就很容易理解NSX-t二層網絡的配置的過程了:
創建IP地址池
創建IP地址池|- NSX-t manager->Networking->IP Management->IP Address Pools->ADD |- Name: VTEP-IP-Pool |- Set Subnets |- IP Ranges: 172.20.11.151-172.20.11.170 |- CIDR: 172.20.11.0/24 |- Gateway IP: 172.20.11.10
目的:后續操作,在每臺主機中創建PROD-Overlay-NVDS交換機(TN)時,需要從VTEP-IP-Pool地址池,為交換機的TEP口分配ip地址。
創建TZ
創建PROD-Overlay-TZ|- NSX-t manager->System->Fabric->Transport Zones->ADD |- Name: PROD-Overlay-TZ |- Switch Name: PROD-Overlay-NVDS |- Traffic Type: Overlay創建PROD-VLAN-TZ|- NSX-t manager->System->Fabric->Transport Zones->ADD |- Name: PROD-VLAN-TZ |- Switch Name: PROD-VLAN-NVDS |- Traffic Type: VLAN
目的:描述TZ(多臺TN的級聯交換機),包括:TZ名稱、加入該TZ需要創建的TN名稱及Traffic Type。
Overlay主要優勢:
(1) 相比vlan-id最大值只有4094,VNI接近16M個,極大的增加了一個二層區域可以容納的設備數;
(2) 只要主機之間能三層通信,就可以將其中創建的VM放在同一個二層區域,二層區域不再限制于一個機房的范圍,極大的提高了VM部署和遷移的靈活性。
實驗環境中,如果所有ESXi/KVM主機,都在同一個二層區域,創建TZ的時候,無論選擇哪種Traffic Type,其實都可以滿足VM之間二層通信,但是如果不滿足這個條件,那就必須選擇Overlay,本文實驗中,選擇的是PROD-Overlay-TZ。而這里同時還創建了PROD-VLAN-TZ,是為了后續實現南北向三層通信時,將T0路由器和物理路由器接入同一個網段。
將ESXi/KVM主機加入TZ
主機加入TZ|- NSX-t manager->System->Fabric->Nodes->Host Transport Nodes->ADD |- 選擇主機 | |- sa-vcsa-01.vclass.local # 由vCenter管理的主機 | | |- ESXi04 | | |- ESXi05 | |- None: Standalone Hosts | |- kvm-01 | | |- Name: sa-kvm-01.vclass.local | | |- IP Address: 172.20.10.151 | | |- Username: ***** | | |- Password: ***** | |- kvm-02 | |- Name: sa-kvm-02.vclass.local | |- IP Address: 172.20.10.152 | |- Username: ***** | |- Password: ***** |- CONFIGURE NSX |- 選擇Transport Node Profile (沒有先創建) |- Name: ESXi-TN-Profile |- New Node Switch |- Type: N-VDS # N-VDS, VDS, VSS |- Mode: Standard # Enhanced Datapath需要uplink物理網卡支持,可以加速報文接收發送 |- Name: PROD-Overlay-NVDS |- Transport Zone: PROD-Overlay-TZ |- Uplink Profile: nsx-default-uplink-hostswitch-profile # Active-Standby |- IP Assignment: Use IP Pool |- IP Pool: VTEP-IP-Pool |- Teaming Policy Switch Mapping |- uplink-1 (active): vmnic4 / eth1
目的:在主機中創建TN,并級聯到現有的TZ中。
根據目的就不難理解,配置中除了指定TZ,為什么還要指定一堆TN描述信息,包括:Name、Type(N-VDS)、Mode、IP Pool(為PROD-Overlay-TZ的TEP口提供ip地址)、Uplink Profile(uplink策略,后續如果為TN設置2個上行口,則為主備模式)、uplink-1(由于是實驗環境,對高可用性要求不高,不配uplink-2可以理解為備用上行口天然就是壞的,主備只要有一個是好的,就不會影響通信)。
PROD-Overlay-TZ添加segment
添加Web-Segment|- NSX-t manager->Networking->Segments->ADD |- Segment Name: Web-Segment |- Connectivity: 暫時不選 (將來選擇T1-GW-01|Tier1) |- Transport Zone: PROD-Overlay-TZ |- subnets: 暫時不填 (將來填: 172.16.10.1/24)添加App-segment|- NSX-t manager->Networking->Segments->ADD |- Segment Name: App-Segment |- Connectivity: 暫時不選 (將來選擇T1-GW-01|Tier1) |- Transport Zone: PROD-Overlay-TZ |- subnets: 暫時不填 (將來填: 172.16.20.1/24)添加DB-segment|- NSX-t manager->Networking->Segments->ADD |- Segment Name: DB-Segment |- Connectivity: 暫時不選 (將來選擇T1-GW-01|Tier1) |- Transport Zone: PROD-Overlay-TZ |- subnets: 暫時不填 (將來填: 172.16.30.1/24)
目的:相當于在PROD-Overlay-TZ級聯交換機上,劃分了3個vlan:Web-Segment、App-Segment、DB-Segment。
VM接入segment
# vCenter支持添加ESXi主機,所以ESXi主機中的VM,可以通過vCenter接入SegmentESXi主機中的vm連接到segment (vcenter: 右鍵vm->Edit Settings)|- Network adapter: Web-Segment / App-Segment / DB-Segment# vCenter不支持添加KVM主機,KVM主機中的VM,通過以下方式接入SegmentKVM主機中的vm連接到segment|- ssh連接KVM主機| |- virsh list --all| |- virsh start T1-DB-01 # 如果vm為斷電狀態 (比如顯示: T1-DB-01 (shut off))| |- virsh dumpxml T1-DB-01 | grep interfaceid # 查看vm網卡的uuid并復制|- NSX-t manager->..->SEGMENTS |- 編譯Web-Segment / App-Segment / DB-Segment ->點擊Ports列中的Set |- ID: vm網卡的uuid
目的:將VM接入不同的Segment,不過以上只是描述了接入的方法,實驗環境中,具體連接見2.2.3節邏輯拓撲和物理拓撲:
(1) ESXi04主機中的T1-web-01(172.16.10.11/24)、ESXi05主機中的T1-web-02(172.16.10.12/24)、kvm-02主機中的T1-web-03(172.16.10.13/24),3臺VM接入Web-Segment;
(2) ESXi04主機中的T1-App-01(172.16.20.11/24),1臺VM接入App-Segment;
(3) kvm-01主機中的T1-DB-01(172.16.30.11/24),1臺VM接入DB-Segment。
2.2.3. 二層通信流程
邏輯拓撲

物理拓撲

報文傳送過程
比如:Web-Segment網段中,W1訪問W3,過程如下:
Step1:W1構造“W1 mac : W1 ip -> W3 mac : W3 ip”報文(忽略ARP獲取W3 mac地址的過程),發送到Overlay交換機;
Step1.5:交換機查詢“mac-VM ip-TEP ip”表(由NSX-t Controller集中收集、同步給每臺PROD-Overlay-TZ),確定W3所在Overlay交換機的TEP地址,即tep4地址;
Step2:Overlay交換機對W1構造的原始報文,進行geneve封裝(外層:”tep1 mac : tep1 ip -> tep4 mac : tep4 ip” + Geneve報頭(VNI: 5000) + udp報頭(目的端口6081),內層/udp負載:W1原始報文);
Step3:封裝報文經過隧道,發送到tep4;
Step4:目標Overlay交換機對報文進行解封裝,將W1原始報文發送給W3,通信完成。
實驗環境中,即使tep1與tep4在同一個網段,那也需要在兩端封裝和解封裝,因為它們雖然物理上在同一個網段,但是既然是通過ip地址訪問,邏輯上使用的就是三層通信。
2.3. NSX-t三層通信
2.3.1. 概念
T1(東西向)/ T0(南北向)路由器

T1和T0,都是指路由器,區別在于T1用于轉發單個租戶的內部流量(東西向),就是說,它的端口僅僅會跟單個租戶的不同segment相連,T0用于租戶內部跟外部網絡之間的流量(南北向),它一方面連接著多個租戶的T1,另一方面與通往外部網絡的物理路由器,連接在同一個網段。
比如,公司A的web服務器,要對外開放就必須跟T0路由器之間有連接,而DB服務器不希望暴露到外網,只要能與web服務器內部通信即可,那么它們之間僅用T1路由器連接即可。同理,假設公司B的2個部門使用不同的網段,僅通過T1路由器連接,就可以實現內部通信,如果還希望他們都能訪問公司A的web服務,就必須還要將T1接到T0上。
虛擬路由器和虛擬交換機一樣,也是由軟件實現,其中,T1與TN是一一對應存在的,但不同的是,交換機是級聯的關系,而路由器是重復的關系,理論上,在任意一臺TN所在主機中安裝T1路由器,就可以滿足單個租戶的東西向流量轉發。
比如,如下物理拓撲中,僅ESXi04主機中安裝了T1路由器,則:
(1) ESXi04內部,任意2個網段之間可以路由;
(2) ESXi04與ESXi05中的任意2個網段,也可以路由(ESXi04內部的Web-Segment網段與DB-Segment網段之間,可以通過T1路由器轉發,剩下的就是Overlay二層轉發過程,這已經在2.2.3節詳細介紹過);

(3) SXi05內部,任意2個網段之間,也可以路由。

但是,對于情況(3),即使W2和D2兩臺虛擬機在同一宿主機,相互發給對方的報文,卻要從外部繞一個大圈子,為此,在創建T1路由器時,NSX-t會在所有TN所在主機中安裝(路由表會由NSX-t Controller集中同步),一方面避免了繞圈的情況,另一方面也起到容錯的效果(比如情況(3), ESXi05主機會優先使用自己內部的T1,如果自己的T1出現故障,利用ESXi04中的T1,仍然可以路由)。
Edge Node
上述內容已經提到過,T0路由器需要連接的對象有2種:一是不同租戶希望連接到外網的T1路由器,二是通往外部網絡的物理路由器。根據這樣的連接需求,NSX-t要求,必須將T0安裝在一臺獨立的主機中,這種主機就是“Edge Node”,也就是說,“Edge Node”實際上就是一臺主機,通常也是某臺ESXi/KVM主機中的一臺VM,只不過它專門用于安裝T0路由器。
個人認為,這樣是為了將T0路由器及其需要連接的網段,與宿主機系統中的業務資源隔離開,否則,原本要在Edge Node中添加的物理路由器所在網段,就得直接在宿主機中添加,直接暴露給T1路由器。
DR(分布式路由器)/ SR(服務路由器)
T1/T0路由器,都可以再繼續細分為DR/SR路由器。
以上對T1的介紹,實際上只是T1-DR,NSX-t會為每臺TN對應創建一個T1-DR,每臺TN優先使用與自己在同一主機的T1-DR,進行三層轉發,這樣就不能對東西向流量進行集中的控制,比如像情況(2)那樣,可以讓所有東西向流量,只經過一臺路由器。因此,NSX-t還可以創建T1-SR,從而可以為租戶內部流量,提供負載均衡等服務,這也正是“服務路由器”這個名稱的由來,不過,它和情況(2)對應的拓撲不同,首先,T1-SR不直接接入網段,而是和T1-DR相連,另外,它也不是直接在ESXi/KVM主機中創建,而是在Edge Node中創建。
T1-DR、T1-SR(可選)、T0-DR、T0-SR的安裝位置:

建議對照這個規則,提前看一下2.3.5節中的物理拓撲圖,了解一下兩種實例場景中,4種路由器的具體安裝位置。
根據拓撲可以看出,T0-DR是T1與T0-SR之間的橋梁,如果沒有創建T1-SR,NSX-t會為每臺T1-DR對應創建一臺T0-DR,否則為每臺T1-SR對應創建一臺T0-DR,并且通過內部網段,建立它們到T0-SR的通信鏈路(我目前還沒理解T0-DR存在的意義,總覺得它是多余的,不知道T1直接跟T0-SR接在同一個網段,會有什么問題)。而T0-SR很好理解,就是一邊可以跟業務網段通信,一邊可以跟外部網絡通信。
最后需要特別了解的一點是,多臺實際的DR,邏輯上相當于一臺DR,所有端口的mac地址相同,每份路由表也是一樣的。
2.3.2. T1網關配置
創建T1網關
創建T1網關 (分布式的,直接存在于ESXi/KVM/Edge等主機中)|- NSX-t manager->Networking->Connectivity->Tier-1 Gateways->ADD TIER-1 GATEWAY |- Tier-1 Gateway Name: T1-GW-01 |- Linked Tier-0 Gateway: 暫時不選 (將來選擇T0-GW-01)
目的:用于東西向流量轉發。
T1路由器接入segment
T1路由器接入Web-Segment|- NSX-t manager->Networking->Connectivity->Segment |- Web-Segment->Edit |- Connectivity: T1-GW-01|Tier1 |- subnets: 172.16.10.1/24T1路由器接入App-segment|- NSX-t manager->Networking->Connectivity->Segment |- App-Segment->Edit |- Connectivity: T1-GW-01|Tier1 |- subnets: 172.16.20.1/24T1路由器接入DB-segment|- NSX-t manager->Networking->Connectivity->Segment |- DB-Segment->Edit |- Connectivity: T1-GW-01|Tier1 |- subnets: 172.16.30.1/24
目的:使Web-Segment、App-Segment、DB-Segment網段上的VM,可以跟T1二層通信。
2.3.3. 東西向三層通信流程
邏輯拓撲

物理拓撲

報文傳送過程
比如:Web-Segment網段中的W1,訪問App_Segment網段中的A1
Step1:W1發現A1和自己不在一個網段,所以構造“W1 mac : W1 ip -> T1 mac : A1 ip”報文(忽略ARP獲取T1 mac地址的過程),通過交換機發送到T1路由器;
Step1.5:T1路由器查找路由表,確定下一跳出口;
Step2:由于下一跳出口已經和A1在一個網段,所以路由器構造“T1 mac : W1 ip -> A1 mac : A1 ip”報文(忽略ARP獲取A1 mac地址的過程),通過交換機發送到A1。
理解了W1->A1(同一主機內部),再理解W1->W3(不同主機內部),就不難了:ESXi04主機內部,報文從Web-Segment網段,發送到App_Segment網段的過程,在兩種情況中是沒有區別的,報文最終再通過Overlay二層轉發到W3,這已經在2.2.3節詳細介紹過。
2.3.4. T0網關配置
創建Edge Node
創建Edge虛機|- NSX-t manager->System->Fabric->Nodes->Edge Transport Nodes->ADD EDGE VM |- Name and Description | |- Name: sa-nsxedge-01, sa-nsxedge-02 | |- Host name/FQDN: sa-nsxedge-01.vclass.local | |- Form Factor: Medium |- Credentials | |- CLI User Name: ***** | |- CLI Password: ***** | |- System Root Password: ***** |- Configure Deployment | |- Compute Manager: 選擇sa-vcsa-01.vclass.local | |- Cluster: 選擇SA-Management-Edge | |- Datastore: 選擇SA-Shared-02-Remote |- Configure Node Settings | |- IP Assignment: static | |- Management IP: 172.20.10.61/24 | |- Default Gateway: 172.20.10.10 | |- Select Interface | | |- pg-SA-Management | |- Search Domain Names: vclass.local | |- DNS Servers: 172.20.10.10 | |- NTP Servers: 172.20.10.10 |- Configure NSX |- New Node Switch | |- Edge Switch Name: PROD-Overlay-NVDS | |- Transport Zone: 選擇PROD-Overlay-TZ | |- Uplink Profile: 選擇nsx-edge-single-nic-uplink-profile | |- IP Assignment: 選擇Use IP Pool | |- IP Pool: 選擇VTEP-IP-Pool | |- Teaming Policy Switch Mapping | |- uplink-1 (active): 選擇pg-SA-Edge-Overlay |- New Node Switch (點擊ADD SWITCH) |- Edge Switch Name: PROD-VLAN-NVDS |- Transport Zone: 選擇PROD-VLAN-TZ |- Uplink Profile: 選擇nsx-edge-single-nic-uplink-profile |- Teaming Policy Switch Mapping |- uplink-1 (active): 選擇pg-SA-Edge-Uplinks
目的:為T0-SR提供安裝場所(T1-SR、T0-DR也有可能安裝在Edge Node中)。
創建Edge Node集群
創建Edge集群|- NSX-t manager->System->Fabric->Nodes->Edge Cluster->ADD |- Name: Edge-Cluster-01 |- Edge Cluster Profile: 選擇nsx-default-edge-high-availability-profile # 定義2個Edge之間的心跳監測信息 |- 選擇要添加到集群中的Edge |- sa-nsxedge-01 |- sa-nsxedge-02
目的:相當于將多個Edge Node“打包”在一起(實驗環境不考慮高可用,創建一個Edge Node即可,所以可以跳過這步操作)。
PROD-VLAN-TZ添加segment
添加T0-GW-01-Uplink-1|- NSX-t manager->Networking->Segments->ADD |- Segment Name: T0-GW-01-Uplink-1 |- Connectivity: 不填 |- Transport Zone: 選擇PROD-VLAN-TZ |- subnets: 不填 |- VLAN: 0添加T0-GW-01-Uplink-2|- NSX-t manager->Networking->Segments->ADD |- Segment Name: T0-GW-01-Uplink-2 |- Connectivity: 不填 |- Transport Zone: 選擇PROD-VLAN-TZ |- subnets: 不填 |- VLAN: 0
目的:相當于在PROD-VLAN-TZ交換機上,劃分了2個vlan:T0-GW-01-Uplink-1、T0-GW-01-Uplink-2(這兩個網段,最終會和物理路由器所在網段級聯,T0接入后,就可以和物理路由器二層通信)。
創建T0網關
創建T0網關 (集中式的,需要先創建Edge虛擬機)|- NSX-t manager->Networking->Connectivity->Tier-0 Gateways->ADD GATEWAY->Tier-0 |- Tier-0 Gateway Name: T0-GW-01 |- HA Mode: 選擇Active-Active |- Edge Cluster: 選擇Edge-Cluster-01 # 指定T0-GW-01路由器在哪個Edge虛擬機中創建
目的:用于南北向流量轉發。
連接T1路由器與T0路由器
T1路由器連接到T0路由器|- NSX-t manager->Networking->Connectivity->Tier-1 Gateways->Edit(T1-GW-01) |- Linked Tier-0 Gateway: T0-GW-01
目的:以T0路由器為橋梁,間接連接到物理路由器,或者其它T1路由器(T0與T1之間的接口連接、ip配置,由NSX-t自動完成)。
T0-SR路由器添加接口,并與物理路由器接入同一網段
給T0-SR添加int1接口|- NSX-t manager->Networking->Connectivity->Tier-1 Gateways->Edit (T1-GW-01) |- INTERFACES->External and Service Interfaces->Set->ADD INTERFACES |- Name: int1 |- IP Address / Mask: 192.168.100.2/24 # 配置ip |- Connected To(Segment): T0-GW-01-Uplink-1 # 跟物理路由器接入同一網段 |- Edge Node: sa-nsxedge-01給T0-SR添加int2接口|- NSX-t manager->Networking->Connectivity->Tier-1 Gateways->Edit (T1-GW-01) |- INTERFACES->External and Service Interfaces->Set->ADD INTERFACES |- Name: int2 |- IP Address / Mask: 192.168.110.2/24 # 配置ip |- Connected To(Segment): T0-GW-01-Uplink-2 # 跟物理路由器接入同一網段 |- Edge Node: sa-nsxedge-02
目的:使T0路由器,可以跟物理路由器二層通信。
同步路由表
將T1內部直連的業務網段路由通告給T0|- NSX-t manager->Networking->Connectivity->Tier-1 Gateways->Edit (T1-GW-01) |- Route advertisement |- All Connected Segment & Service Ports: 開啟T1路由器添加int1/int2接口設置鄰居|- NSX-t manager->Networking->Connectivity->Tier-0 Gateways->Edit (T0-GW-01) |- BGP |- Local AS: 100 |- BGP Neighbors->Set |- ADD BGP NEIGHBOR | |- IP Address: 192.168.100.1 | |- Remote AS number: 200 | |- Source Addresses: 192.168.100.2 |- ADD BGP NEIGHBOR |- IP Address: 192.168.110.1 |- Remote AS number: 200 |- Source Addresses: 192.168.110.2將T1內部的業務網段路由通告給物理路由器|- NSX-t manager->Networking->Connectivity->Tier-0 Gateways->Edit (T0-GW-01) |- ROUTE RE-DISTRIBUTION->Set->ADD ROUTE RE-DISTRIBUTION |- Nmae: 123 |- Set |- Connected Interfaces & Segment: 選中
目的:更新T1、T0、物理路由器中的路由表。
2.3.5. 南北向三層通信流程
邏輯拓撲

AA:active-active
AS:active-standby
T1-DR與T1-SR、T1-DR與T0-DR、T1-SR與T0-DR、T0-DR與T0-SR之間,路由接口的創建、連接、ip分配,由NSX-t自動完成。
物理拓撲
2.3.4節的配置過程,沒有包含:
(1) Edge-Overlay和Edge-uplink網段的創建(參照2.2.2節:PROD-Overlay-TZ添加segment);
(2) Edge Node的pg-SA-Edge-Overlay和pg-SA-Edge-Uplinks網卡的創建(Edge Node也是VM,右鍵選擇“編輯虛擬機”,即可設置);
(3) pg-SA-Edge-Overlay和pg-SA-Edge-Uplinks網卡,分別連接到Edge-Overlay和Edge-uplink網段(參考2.2.2節:VM接入segment)。
實例1:T1-DR + T0-DR + T0-SR

實例2:T1-DR + T1-SR + T0-DR + T0-SR

路由表
實例1中各個路由器中的路由表如下(實例2略):

2.3.5.4. 報文傳送過程
假設:W1(172.16.10.11)-> PC(172.20.10.80)
這里僅以實例1拓撲舉例,實例2相比實例1,僅僅是三層轉發過程中,多經過一下T1-SR(active-standby)路由器。
Step1:W1發現PC和自己不在一個網段,所以構造“W1 mac : 172.16.10.11 -> T1-DR mac : 172.20.10.80”報文(忽略ARP獲取T1-DR mac地址的過程),通過交換機發送到T1-DR;
Step1.5:T1-DR查找路由表,命中“0.0.0.0/0 -> 100.64.32.1”,并根據ARP表或發送ARP請求,查詢100.64.32.1的mac(AA);
Step2:T1-DR構造“T1-DR mac : 172.16.10.11 -> AA : 172.20.10.80”報文,發送到T0-DR;
Step2.5:T0-DR查找路由表,命中“0.0.0.0/0 -> 169.254.0.2 / 169.254.0.3”等價路徑,假設本次選擇169.254.0.2,并根據ARP表或發送ARP請求,查詢其mac(BB);
Step3:T0-DR構造“AA : 172.16.10.11 -> BB : 172.20.10.80”報文;
Step4:T0-DR構造的報文穿過Overlay隧道,轉發Edge Node中的交換機;
Step5:“AA : 172.16.10.11 -> BB : 172.20.10.80”報文,到達T0-SR1路由器;
Step5.5:T0-SR1查找路由表,命中“172.20.10.0/24 -> 192.168.100.1”,并根據ARP表或發送ARP請求,查詢192.168.100.1的mac為CC;
Step6:T0-SR1構造“BB : 172.16.10.11 -> CC : 172.20.10.80”報文,發送到物理路由器;
Step7:物理路由器轉發給外部PC。