Tungsten Fabric與K8s集成指南丨創建虛擬網絡

作者:吳明祕

Hi!歡迎來到Tungsten Fabric與Kubernetes集成指南系列,本文介紹通常創建虛擬網絡的五個步驟。 Tungsten Fabric與K8s集成指南系列文章,由TF中文社區爲您呈現,旨在幫助大家瞭解Tungsten
Fabric與K8s集成的基礎知識。大家在相關部署中有什麼經驗,或者遇到的問題,歡迎與我們聯繫。

在做好架構部署,並確認Tungsten Fabric和Kubernetes(K8s)集羣的初始狀態沒有問題後,就可以開始嘗試創建虛擬網絡了。

第1步:新建命名空間

在K8s中,大部分的資源都隸屬於一個命名空間,所以需要首先新建命名空間,然後再創建對應的pod,service,以及虛擬網絡。在此新建兩個命名空間,分別爲 test-ns1 和 test-ns2,登錄K8s的master節點執行以下命令:
在這裏插入圖片描述
創建成功後,在Tungsten Fabric管理界面可以看到對應的project被創建出來,k8s-test-ns1與k8s-test-ns2。
在這裏插入圖片描述

第2步:新建IPAM

你需要爲你的項目創建一個IP地址管理(IPAM),基於此來創建一個虛擬網絡。

在Tungsten Fabric管理界面選擇“Configure > Networking > IP Address Management”,並選擇project - k8s-test-ns1,然後單擊“創建”按鈕。
在這裏插入圖片描述
其中Name和Subnet Method爲必填項,Subnet Method有兩種方式,User Defined 是在綁定網絡的時候再去手工指定子網網段,Flat 是直接創建子網網段,兩者不同的是,User Defined可以指定IP池的範圍,Flat則是直接使用整個子網網段,默認是使用Flat。
在這裏插入圖片描述

第3步:新建虛擬網絡

在Tungsten Fabric管理界面選擇“Configure > Networking > Networks”,並選擇 k8s-test-ns1,然後單擊“創建”按鈕。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
如上圖所示,就是完成了一個虛擬網絡的創建,爲了方便測試,再以相同的方式創建另一個網絡 k8s-ns1-pod-net2 (10.10.20.0/24)。
在這裏插入圖片描述

第4步:創建pod

首先在名爲test-ns1的命名空間上創建一個pod,指定網絡爲 k8s-ns1-pod-net01,配置如下:
在這裏插入圖片描述
然後再創建一個基於虛擬網絡k8s-ns1-pod-net02的pod,配置如下:
在這裏插入圖片描述
執行kubectl的創建命令之後,兩個pod都創建成功,並且容器的IP地址分別爲:
屬於虛擬網絡 k8s-ns1-pod-net01 (10.10.10.0/24)的pod 10.10.10.1
屬於虛擬網絡 k8s-ns1-pod-net02 (10.10.20.0/24)的pod 10.10.20.1
在這裏插入圖片描述

第5步:網絡連通性驗證

1、驗證同一命名空間不通網絡pod之間網絡連通性

首先進行互ping,驗證連通性。測試結果如下截圖,同一命名空間下,默認情況兩個網絡無法通信。
在這裏插入圖片描述
需要通信則必須在Tungsten Fabric上添加一個路由器來連接網絡 k8s-ns1-pod-net01 和 k8s-ns1-pod-net02,如下所示:
在這裏插入圖片描述
在這裏插入圖片描述
路由器創建完成後再驗證兩個網絡的連通性,結果是兩個pod能夠互相通信。
在這裏插入圖片描述
2、驗證同一命名空間下pod到service之間的網絡連通性

默認情況下,除了 k8s-default-pod-network 之外,其他的虛擬網絡是無法連接到K8s的service網絡的,通過請求kube-system中的coredns服務來驗證,命令爲 nslookup kube-dns.kube-system,因爲是跨命名空間去解析域名,所以需要在域名中添加命名空間名稱後綴(如果pod是在kube-system中,那麼執行nslookup kube-dns即可),具體驗證情況如下:
在這裏插入圖片描述
若需要讓k8s-ns1-pod-net01 網段的pod可以訪問到K8s的service網絡,那麼就需要添加一條TF policy,k8s-default項目下的Policies – k8s-default-service-np,具體策略規則如下圖所示,意味着所有添加了此條規則的網絡都可以無限制的訪問到k8s的service網絡的所有端口。
在這裏插入圖片描述
現在需要給網絡 k8s-ns1-pod-net01添加 k8s-default-service-np 這條策略,讓它可以訪問k8s的service網絡。

Configure --> Networking --> Networks, 選擇k8s-test-ns1項目,編輯network k8s-ns1-pod-net01, 附加一條Network Policy – k8s-default-service-np,具體操作如下:
在這裏插入圖片描述
在這裏插入圖片描述
再次驗證pod到service之間的網絡連通性,此時處在網絡k8s-ns1-pod-net01的pod nginx01-ns1-net01 (10.10.10.1) 是可以直接通過請求service的ClusterIP:PORT(coredns服務)來解析域名,而k8s-ns1-pod-net02 沒有附加k8s-default-service-np,所以pod nginx01-ns1-net02 (10.10.20.1) 是仍然無法訪問service裏面的coredns服務。
在這裏插入圖片描述
3、驗證不同命名空間下pod之間的網絡連通性

同一命名空間下的兩個網絡之間的通信,跟不同命名空間下的兩個網絡之間的通信是有一些區別的,因爲不同命名空間的情況下,無法通過新建TF Router來連接兩個網絡,所以必須通過TF Policy 來實現不同命名空間下的兩個網絡之間的互通。

之前的步驟中已經創建了兩個命名空間 (test-ns1與test-ns2),並且test-ns1裏面已經有了兩個網絡,所以需要在test-ns2中去新建一個網絡。新建的網絡爲 k8s-ns2-pod-net01 (20.10.10.0/24)。
在這裏插入圖片描述
在這裏插入圖片描述
默認情況下,k8s-ns2-pod-net01 (20.10.10.0/24) 與 k8s-ns1-pod-net01 (10.10.10.0/24),k8s-ns1-pod-net02 (10.10.20.0/24) 都是無法通信的,現在需要在網絡k8s-ns2-pod-net01 (20.10.10.0/24)中新建兩個pod。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在此驗證pod nginx01-ns1-net01 與 nginx01-ns2-net01的網絡連通性,兩者在不同的命名空間,不同的network,驗證結果是無法通信,具體見下面截圖:
在這裏插入圖片描述
若需要讓這兩個不同命名空間不同network的pod能夠互相通信,則需要添加如下的TF Policies:
在這裏插入圖片描述
在這裏插入圖片描述
Contrial Network Policy 創建好之後,再分別將它附加到網絡 k8s-ns1-pod-net01和k8s-ns2-pod-net01。
在這裏插入圖片描述
在這裏插入圖片描述
再次驗證,此時兩個不同命名空間不同network的pod已經能夠互相通信。
在這裏插入圖片描述
(作者來自深圳市天源景雲科技有限公司)

Tungsten Fabric+K8s集成指南系列文章——
第一篇:部署準備與初始狀態

Tungsten Fabric+K8s輕鬆上手系列文章——
第一篇:TF Carbide 評估指南–準備篇
第二篇:通過Kubernetes的服務進行基本應用程序連接
第三篇:通過Kubernetes Ingress進行高級外部應用程序連接
第四篇:通過Kubernetes命名空間實現初步的應用程序隔離
第五篇:通過Kubernetes網絡策略進行應用程序微分段
在這裏插入圖片描述
關注微信:TF中文社區
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章