如何通過Kubernetes網(wǎng)絡策略進行應用程序微分段,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設、網(wǎng)站制作與策劃設計,瑤海網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設10年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:瑤海等地區(qū)。瑤海做網(wǎng)站價格咨詢:18982081108
在大多數(shù)生產(chǎn)環(huán)境中,需要實施網(wǎng)絡訪問控制。Kubernetes提供了一種方法來描述Pod 組應該如何通過使用NetworkPolicy資源進行通信。與Kubernetes中的大多數(shù)事情一樣,要使網(wǎng)絡策略正常運行,您需要一個支持它們的Kubernetes CNI插件。在幾乎所有環(huán)境中,為應用程序需要通信的組件建立明確的規(guī)則,都是一個好主意。Kubernetes網(wǎng)絡策略規(guī)范是一種直接的方法,可讓您將NetworkPolicy直接與應用程序清單集成在一起。NetworkPolicy定義資源的方式,使您可以精確地指定哪些網(wǎng)絡通信是被允許的,而哪些則不允許,同時使用podSelector定義處理在Kubernetes上運行的應用程序的動態(tài)屬性。這意味著您的策略可以針對單個Pod或Pod組,從而將安全范圍“縮小”到Pod的大小。嚴格定義的網(wǎng)絡策略與default-deny配置相結合,可以避免由于惡意應用程序入侵,和/或行為不當,或者配置錯誤而造成的麻煩。例如,一個應用程序組件可能具有滯留的緩存DNS條目或錯誤的配置參數(shù),導致它與錯誤的后端進行通信?;蛘邞贸绦蚩赡軙还ハ莶⒈挥米魈?,執(zhí)行偵查,嘗試橫向滲透,或者只是使用Pod對Kubernetes API的訪問權限來啟動一些加密貨幣挖礦Pod,以竊取您的計算資源。網(wǎng)絡策略設計的主題比本指南中允許的空間要大得多。在此示例中,我們將執(zhí)行以下操作:首先,我們需要提醒自己,應用程序的各個組件應該如何通信。為此,我們將回到在簡介中看到的應用程序圖:1. 外界需要到達yelb-ui的TCP端口80-(1)和(2)2. yelb-ui需要到達yelb-appserver的TCP端口45673. yelb-appserver反過來將需要到達yelb-db的TCP端口5432,以及4. .. yelb-cache的TCP端口6379。請記住,NetworkPolicy資源使用選擇器來識別策略適用于哪個Pod,以及該策略將要控制的流量的源和目的地是什么。在本演示中,我們將使用podSelectror方法,因此需要獲取應用到應用程序Pod的標簽列表。讓我們查看cnawebapp-loadbalancer.yaml示例應用程序的清單,并收集標簽:現(xiàn)在準備編寫我們的策略。
部署后,這些策略將以以下方式控制應用程序組件之間的通信:確保您位于沙箱控制節(jié)點上,以root用戶身份登錄,并且位于正確的目錄中:whoami | grep root || sudo -s
cd /home/centos/yelb/deployments/platformdeployment/Kubernetes/yaml
在此步驟中,我們將創(chuàng)建一個策略,該策略將阻止所有未明確允許的網(wǎng)絡通信。在這一演示中,我們將只限制Ingress流量;但實際上,您也可以控制Egress流量(但是這樣做時要注意這可能會阻止DNS查詢?。?/p>
該策略基本上說:“對于任何Pod,都應用一個沒有規(guī)則的Ingress策略”,這將導致應用這個策略的,所有流向這個命名空間Pods的傳入流量被丟棄掉。該yelb-ui和其他組件在某種意義上說有一些不同,因為它是唯一一個可以被從外部訪問的組件。因此,其ingress:定義將使用ipBlock的0.0.0.0/0,以表示“每個人”:該策略表示:“對于具有應用標簽app: yelb-ui和tier: frontend的Pods,允許傳入來自任何源IP的流量,只要它去往Pod的TCP端口80”。我們示例應用程序中的其他3個Pod僅會看到來自其他Pod的流量,因此其策略將使用帶有允許發(fā)送流量的Pod標簽的podSelector參數(shù):為了能有一個“前后”對比,讓我們部署示例應用程序并獲取基線: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的輸出;在網(wǎng)絡瀏覽器中打開它;樣本應用程序應當加載了。
接下來,我們知道所有Pod通信都是不受限制的,因此我們應該能夠從yelb-ui ping 到y(tǒng)elb-db——這是在應用程序正常運行且我們不進行故障排除動作的情況下,本來不應該發(fā)生的活動:# 獲得"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命令正在接收響應;因此存在不受限制的網(wǎng)絡連接。按^ C停止命令。kubectl create -f yelb-policy.yaml
運行上面的命令后,請等待幾秒鐘以穩(wěn)定下來。Tungsten Fabric將在后臺生成適當?shù)陌踩M,并進行安裝。讓我們測試一下我們曾經(jīng)可以正常運行的ping命令是否仍然有效:# 從"yelb-ui" ping "yelb-db" again:
kubectl exec -it ${src_pod} ping ${db_pod_ip}
這次,我們看到?jīng)]有響應,因為該通信現(xiàn)在已被該策略阻止。接下來,測試是否仍可以通過網(wǎng)絡瀏覽器訪問該應用——應該可以!步驟8:探索Tungsten Fabric的安全流量組可視化
Tungsten Fabric包含一個功能,可在“項目”中實現(xiàn)流量可視化,在我們的案例中,該項目對應于Kubernetes Namespace。要訪問它,請訪問Carbide Evaluation Page鏈接,用于獲取訪問沙箱控制節(jié)點——在頂部有一個名為Contrail UI的鏈接,完成login和password的輸入。單擊鏈接,然后在左上角單擊“Monitor”圖標,然后在菜單中單擊“Security” -> “Traffic Groups”。然后在頂部的標簽鏈,在其末尾選擇“k8s-default”:繼續(xù)測試。您看到的流,代表示例應用程序在做的事情,包括無法從 yelb-uiping到y(tǒng)elb-db,以及yelb-appserver的出站請求(如果我們去查看,將轉到y(tǒng)elb-db的DNS查詢)。kubectl delete -f yelb-policy.yaml
kubectl delete -f cnawebapp-loadbalancer.yaml
對于許多(即使不是全部)生產(chǎn)部署,控制應用程序的網(wǎng)絡通信能力至關重要。在Kubernetes上運行的應用程序實現(xiàn)此類控件的方法是通過NetwokPolicy資源。但是,要使這些資源真正起作用,您需要一個支持它們的CNI插件。Tungsten Fabric提供了完整的NetworkPolicy支持,無論集成Tungsten Fabric的Kubernetes在哪里運行,是在私有數(shù)據(jù)中心,還是在公共云中。網(wǎng)絡策略可以變得非常簡單或非常復雜,而找出最適合您的應用程序的最佳方法,就是在我們提供的用例和示例基礎上更深入地研究。關于如何通過Kubernetes網(wǎng)絡策略進行應用程序微分段問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。
本文標題:如何通過Kubernetes網(wǎng)絡策略進行應用程序微分段
文章來源:
http://weahome.cn/article/jsejpo.html