Tungsten Fabric與K8s整合指南丨建立隔離名稱空間

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

作者: 吳明秘                                                            

Hi!歡迎來到Tungsten Fabric與Kubernetes整合指南系列,本文介紹如何建立隔離的命令空間,並對其網路連通性進行驗證。Tungsten Fabric與K8s整合指南系列文章,由TF中文社群為您呈現,旨在幫助大家瞭解Tungsten Fabric與K8s整合的基礎知識。大家在相關部署中有什麼經驗,或者遇到的問題,歡迎與我們聯絡。

 

K8s與Tungsten Fabric整合後有四種配置模式,分別為:預設模式、自定義隔離模式、名稱空間隔離模式、巢狀模式。

預設模式: Tungsten Fabric建立一個由所有名稱空間共享的虛擬網路,並從中分配service和pod的IP地址,在Kubernetes叢集中產生的所有名稱空間中的所有pod都能夠彼此通訊。

自定義隔離模式: 管理員和應用程式開發人員可以新增註釋("opencontrail.org/network: <fq_network_name>")來指定虛擬網路。在這個虛擬網路中,一個命令空間中的一個或所有pod將在這個虛擬網路中被啟動。如果該註釋是在pod上配置的,那麼pod將在該網路中啟動;如果註釋是在名稱空間中配置的,那麼名稱空間中的所有pod都將在該網路中啟動。

名稱空間隔離模式: 叢集管理員可以在建立新的命令空間時,新增註釋("opencontrail.org/isolation : true")以啟用命令空間隔離。因此,該名稱空間中的服務不能從其他名稱空間訪問,除非明確定義了安全組或網路策略以允許訪問,或者啟動註釋("opencontrail.org/isolation.service : false")單獨允許該名稱空間的service可以被其他命令空間的pod訪問。

巢狀模式: Tungsten Fabric支援與基於OpenStack虛擬機器部署的Kubernetes叢集整合。Tungsten Fabric提供了一個可摺疊的控制和資料平面,一個TF控制平面和一個網路堆疊管理和服務同時在OpenStack和Kubernetes兩個叢集中。有了統一的控制和資料平面,可以無縫地互動和配置這些叢集,不需要單獨為每個叢集部署TF。
 
在本系列的第二篇文章中 ,建立的名稱空間為預設模式,而建立的網路是自定義模式的虛擬網路,在本章節中將會建立隔離的命令空間,並驗證其網路連通性。
 

建立隔離名稱空間


在此將會建立一個隔離的名稱空間,名為isolated-ns,具體配置檔案如下:
 

執行kubectl的建立命令之後,對應的名稱空間隨即被建立。
 

而在TF上也會有對應的policy和虛擬網路被建立出來,分別為:

TF policy: k8s-isolated-ns-pod-service-np

這條TF policy的作用,是允許附加了該條策略的虛擬網路能夠訪問命令空間isolated-ns中的service clusterip。

TF network: k8s-isolated-ns-pod-network , k8s-isolated-ns-service-network

這兩個網路分別使用了名稱空間default裡面的IPAM,所以在這個命令空間isolated-ns中預設建立出來的pod和service所分配的IP所屬的IP池,與名稱空間default中的一樣,即pod(10.32.0.0/12)和service(10.96.0.0/12)。
 


驗證與非隔離命令空間的網路連通性


接下來在隔離的命令空間isolated-ns中建立pod和service,驗證isolated-ns與其他命令空間的連通性。

首先在default和isolated-ns兩個命令空間中分別建立兩個pod和一個service。
 

所以目前的資源為:

2個名稱空間:default,isolated-ns

2個service:nginx-default (10.105.147.31),nginx-isolated (10.97.162.157)

4個pod:
nginx-default-test01 (10.47.255.251)
nginx-default-test02 (10.47.255.250)
nginx-isolated-test01 (10.47.255.249)
nginx-isolated-test02 (10.47.255.247)
 
網路連通性驗證流程:

1. 從名稱空間default中的pod nginx-default-test01去ping其他三個pod,結果是pod nginx-default-test01只能連通同一名稱空間中pod,而無法連通隔離名稱空間中的pod。
    

2. 從名稱空間isolated-ns中的pod nginx-isolated-test01去ping其他三個pod,結果是pod nginx-isolated-test01只能連通同一名稱空間中pod,而無法連通其他名稱空間中的pod。
 

3. 從名稱空間default中的pod nginx-default-test01去curl分別在兩個命令空間中的service,結果是pod nginx-default-test01只能請求default和kube-system這些非隔離名稱空間中的service,而無法請求隔離名稱空間中的service。
 

4. 從名稱空間isolated-ns中的pod nginx-isolated-test01去curl分別在兩個命令空間中的service,結果是pod nginx-isolated-test01只能請求default和kube-system這些非隔離名稱空間中的service,而無法請求隔離名稱空間中的service,即便該service在自己所在的名稱空間。
 

所有驗證結果綜合起來就是,非隔離名稱空間和隔離名稱空間之後建的pod預設無法互訪——即便在相同的IPAM中,並且非隔離命名的service可以被任何pod訪問,而隔離名稱空間的service預設無法被訪問。

現在需要新增TF policy讓pod之間,pod和service之間能夠連通。

對於pod之間的訪問,需要新增如下TF policy,該條policy是連線兩個網路,k8s-default-pod-network與k8s-isolated-ns-pod-network。
 

建立完成,分別將這條Policy附加到隔離名稱空間和非隔離命令空間的pod網路上,k8s-default-pod-network與k8s-isolated-ns-pod-network。
 

 
此時再進行pod之間的網路連線驗證,結果是兩個名稱空間的pod之間已經能夠通訊。
 

對於pod與service之間的訪問,需要新增如下TF policy,該條policy是允許指定網路能夠訪問isolated-ns的service。
 

建立完成後,再將這條Policy附加到隔離名稱空間和非隔離命令空間的pod網路上,k8s-default-pod-network與k8s-isolated-ns-pod-network,以及隔離名稱空間的service網路k8s-isolated-ns-service-network上。
 

 

此時再進行pod與service之間的網路連線驗證,結果是兩個名稱空間的pod都可以訪問到隔離名稱空間中的service。
 
在隔離名稱空間和非隔離名稱空間的流量全通之後,還可以透過安全策略去做進一步的流量控制。
 
(作者來自深圳市天源景雲科技有限公司)




 “Tungsten Fabric+K8s整合指南”系列文章——

第一篇: 部署準備與初始狀態

第二篇:建立虛擬網路

第三篇:建立安全策略

 “Tungsten Fabric+K8s輕鬆上手”系列文章——

第一篇: TF Carbide 評估指南--準備篇
第二篇:透過Kubernetes的服務進行基本應用程式連線
第三篇:透過Kubernetes Ingress進行高階外部應用程式連線
第四篇:透過Kubernetes名稱空間實現初步的應用程式隔離
第五篇: 透過Kubernetes網路策略進行應用程式微分段


關注微信:TF中文社群

Tungsten Fabric技術群招募中


歡迎對Tungsten Fabric社群、多雲互聯、SDN、SD-WAN有興趣的夥伴關注社群,與我們共同建設社群,解決雲網路建設過程中遇到的技術問題。


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

相關文章