Tungsten Fabric+K8s輕鬆上手丨經過Kubernetes網絡策略進行應用程序微分段

在這裏插入圖片描述
點擊下載文檔,查看本文全部相關連接https://tungstenfabric.org.cn/assets/uploads/files/tf-ceg-case4.pdfweb

在大多數生產環境中,須要實施網絡訪問控制。Kubernetes提供了一種方法來描述Pod 組應該如何經過使用NetworkPolicy資源進行通訊。
與Kubernetes中的大多數事情同樣,要使網絡策略正常運行,您須要一個支持它們的Kubernetes CNI插件。後端

使用場景

在幾乎全部環境中,爲應用程序須要通訊的組件創建明確的規則,都是一個好主意。Kubernetes網絡策略規範是一種直接的方法,可以讓您將NetworkPolicy直接與應用程序清單集成在一塊兒。centos

NetworkPolicy定義資源的方式,使您能夠精確地指定哪些網絡通訊是被容許的,而哪些則不容許,同時使用podSelector定義處理在Kubernetes上運行的應用程序的動態屬性。瀏覽器

這意味着您的策略能夠針對單個Pod或Pod組,從而將安全範圍「縮小」到Pod的大小。緩存

嚴格定義的網絡策略與default-deny配置相結合,能夠避免因爲惡意應用程序入侵,和/或行爲不當,或者配置錯誤而形成的麻煩。例如,一個應用程序組件可能具備滯留的緩存DNS條目或錯誤的配置參數,致使它與錯誤的後端進行通訊。或者應用程序可能會被攻陷並被用做跳板,執行偵查,嘗試橫向滲透,或者只是使用Pod對Kubernetes API的訪問權限來啓動一些加密貨幣挖礦Pod,以竊取您的計算資源。安全

使用網絡策略保護示例應用程序的安全

網絡策略設計的主題比本指南中容許的空間要大得多。在此示例中,咱們將執行如下操做:微信

  • 爲咱們的default命名空間建立一個default-deny
    Ingress策略。這意味着命名空間內的全部傳入Pods的鏈接必須明確被容許;
  • 爲每一個示例應用程序組件建立一個Ingress NetworkPolicy對象,僅容許那些咱們肯定的對象。

步驟1:明確哪些組件應當能夠相互通訊

首先,咱們須要提醒本身,應用程序的各個組件應該如何通訊。爲此,咱們將回到在簡介中看到的應用程序圖:
在這裏插入圖片描述網絡

從該圖中能夠看到:app

  1. 外界須要到達yelb-ui的TCP端口80-(1)和(2)
  2. yelb-ui須要到達yelb-appserver的TCP端口4567
  3. yelb-appserver反過來將須要到達yelb-db的TCP端口5432,以及
  4. … yelb-cache的TCP端口6379。

步驟2:如何識別組件?

請記住,NetworkPolicy資源使用選擇器來識別策略適用於哪一個Pod,以及該策略將要控制的流量的源和目的地是什麼。frontend

在本演示中,咱們將使用podSelectror方法,所以須要獲取應用到應用程序Pod的標籤列表。讓咱們查看cnawebapp-loadbalancer.yaml示例應用程序的清單,並收集標籤:
在這裏插入圖片描述
如今準備編寫咱們的策略。
部署後,這些策略將以如下方式控制應用程序組件之間的通訊:

步驟3:「default-deny」策略

確保您位於沙箱控制節點上,以root用戶身份登陸,而且位於正確的目錄中:
#確認您是root帳戶

whoami | grep root || sudo -s

#切換到清單目錄

cd /home/centos/yelb/deployments/platformdeployment/Kubernetes/yaml

在此步驟中,咱們將建立一個策略,該策略將阻止全部未明確容許的網絡通訊。在這一演示中,咱們將只限制Ingress流量;但實際上,您也能夠控制Egress流量(可是這樣作時要注意這可能會阻止DNS查詢!):
在這裏插入圖片描述
策略基本上說:「對於任何Pod,都應用一個沒有規則的Ingress策略」,這將致使應用這個策略的,全部流向這個命名空間Pods的傳入流量被丟棄掉。

步驟4:「yelb-ui」的策略

該yelb-ui和其餘組件在某種意義上說有一些不一樣,由於它是惟一一個能夠被從外部訪問的組件。所以,其ingress:定義將使用ipBlock的0.0.0.0/0,以表示「每一個人」:
在這裏插入圖片描述
該策略表示:「對於具備應用標籤app: yelb-ui和tier: frontend的Pods,容許傳入來自任何源IP的流量,只要它去往Pod的TCP端口80」。

步驟5:示例應用中其餘Pod的策略

咱們示例應用程序中的其餘3個Pod僅會看到來自其餘Pod的流量,所以其策略將使用帶有容許發送流量的Pod標籤的podSelector參數:
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

步驟6:在應用策略以前測試

爲了能有一個「先後」對比,讓咱們部署示例應用程序並獲取基線:
#部署咱們的應用

kubectl create -f cnawebapp-loadbalancer.yaml

等待應用啓動並在外部可用:
#得到咱們程序yelb-ui Service的外部DNS名字:

kubectl get svc -o wide | grep yelb-ui | awk '{print $4}'

咱們應該能夠看到相似a0b8dfc14916811e9b411026463a4a33-1258487840.us-west-1.elb.amazonaws.com的輸出;在網絡瀏覽器中打開它;樣本應用程序應當加載了。 接下來,咱們知道全部Pod通訊都是不受限制的,所以咱們應該可以從yelb-ui ping 到yelb-db——這是在應用程序正常運行且咱們不進行故障排除動做的狀況下,原本不該該發生的活動:
#得到"yelb-ui"的完整Pod名字

src_pod=$(kubectl get pods | grep yelb-ui | awk '{print $1}')

#得到"yelb-db"的IP:

db_pod_ip=$(kubectl get pods -o wide | grep yelb-db | awk '{print $6}')

#從"yelb-ui" ping"yelb-db":

kubectl exec -it ${src_pod} ping ${db_pod_ip}

咱們應該看到該ping命令正在接收響應;所以存在不受限制的網絡鏈接。按^ C中止命令。

步驟7:部署策略並測試結果

在最後一步,咱們將部署策略並觀察其效果:
#部署網絡策略

kubectl create -f yelb-policy.yaml

運行上面的命令後,請等待幾秒鐘以穩定下來。Tungsten Fabric將在後臺生成適當的安全組,並進行安裝。讓咱們測試一下咱們曾經能夠正常運行的ping命令是否仍然有效:
#從"yelb-ui" ping 「yelb-db」 again:

kubectl exec -it ${src_pod} ping ${db_pod_ip}

此次,咱們看到沒有響應,由於該通訊如今已被該策略阻止。接下來,測試是否仍能夠經過網絡瀏覽器訪問該應用——應該能夠!

步驟8:探索Tungsten Fabric的安全流量組可視化

Tungsten Fabric包含一個功能,可在「項目」中實現流量可視化,在咱們的案例中,該項目對應於Kubernetes Namespace。

要訪問它,請訪問Carbide Evaluation Page連接,用於獲取訪問沙箱控制節點——在頂部有一個名爲Contrail UI的連接,完成login和password的輸入。單擊連接,而後在左上角單擊「Monitor」圖標,而後在菜單中單擊「Security」 -> 「Traffic Groups」。而後在頂部的標籤鏈,在其末尾選擇「k8s-default」:
在這裏插入圖片描述
您應該看到相似於如下的圖表:
在這裏插入圖片描述
繼續測試。您看到的流,表明示例應用程序在作的事情,包括沒法從 yelb-uiping到yelb-db,以及yelb-appserver的出站請求(若是咱們去查看,將轉到yelb-db的DNS查詢)。

清理

一旦進行了足夠的探索,能夠隨時清理:
#卸載Network Policy

kubectl delete -f yelb-policy.yaml

#刪除咱們的示例應用程序:

kubectl delete -f cnawebapp-loadbalancer.yaml

#刪除策略清單:

rm -f yelb-policy.yaml

回顧和資源

對於許多(即便不是所有)生產部署,控制應用程序的網絡通訊能力相當重要。在Kubernetes上運行的應用程序實現此類控件的方法是經過NetwokPolicy資源。可是,要使這些資源真正起做用,您須要一個支持它們的CNI插件。

Tungsten Fabric提供了完整的NetworkPolicy支持,不管集成Tungsten Fabric的Kubernetes在哪裏運行,是在私有數據中心,仍是在公共雲中。

網絡策略能夠變得很是簡單或很是複雜,而找出最適合您的應用程序的最佳方法,就是在咱們提供的用例和示例基礎上更深刻地研究。這裏有一些資源可能會有所幫助:

  • 網絡策略的詳細介紹
  • 一個不錯的GitHub存儲庫,其中包含大量具備詳細文檔的網絡策略清單示例
  • 在2019Kubecon上的演講中有一個介紹網絡策略的很好的材料

(上述資源連接,可點擊下載文檔查看https://tungstenfabric.org.cn/assets/uploads/files/tf-ceg-case4.pdf)

號外
TF中文社區3月Meetup活動,將聚焦Tungsten Fabric與K8s的集成,由重量級嘉賓分享Tungsten Fabric與K8s的部署和實踐,詳細演示操做過程,並解答關於Tungsten Fabric和K8s的一切問題。關注「TF中文社區」公衆號,瞭解最新活動信息。

至此,Tungsten Fabric Carbide指南文章系列文章告一段落,往期回顧——
第一篇:TF Carbide 評估指南–準備篇
第二篇:經過Kubernetes的服務進行基本應用程序鏈接
第三篇:經過Kubernetes Ingress進行高級外部應用程序鏈接
第四篇:經過Kubernetes命名空間實現初步的應用程序隔離
在這裏插入圖片描述
關注微信:TF中文社區
郵箱:tfzw001@163.com
在這裏插入圖片描述