天天看點

一文搞懂Kubernetes網絡政策(下)

從CNCF基金會的成立,到Kubernetes社群蓬勃發展,曆經6載,17年異軍突起,在mesos、swarm等項目角逐中,拔得頭籌,繼而一統容器編排,其成功的關鍵原因可概括為以下幾點:

  • 項目上司者們的堅守與遠見
  • 社群的良好的運作與社群文化
  • 社群與企業落地的正回報

今天zouyee為大家帶來《一文搞懂Kubernetes網絡政策(下)》,其中《kuberneter排程由淺入深:架構》正在編寫中,敬請期待,目前涉及版本均為​

​1.20.+​

​。

四、NetworkPolicy 開發

實作一個支援 Network Policy 的網絡擴充需要至少包含兩個元件

  • CNI 網絡插件:負責給 Pod 配置網絡接口
  • Policy controller:監聽 Network Policy 的變化,并将 Policy 應用到相應的網絡接口

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-LM10DPQi-1610629792292)(https://github.com/feiskyer/kubernetes-handbook/raw/master/plugins/images/policy-controller.jpg)]

性能測試

下圖基于Kubernetes 1.19版本測試了以下特性:

1)MTU auto config

2) 帶寬性能: Pod to Pod、Pod to Service(TCP、UDP)

3)資源消耗: Pod to Pod、Pod to Service(TCP、UDP)

4)安全特性:Network Policies、 Encryption等

一文搞懂Kubernetes網絡政策(下)

calico其他詳細的能力說明,可參看官網。

五、未來展望
a. SCTP特性

支援版本: ​

​Kubernetes v1.19 [beta]​

作為一個 Beta 特性,SCTP 預設是被啟用的。 要在叢集層面禁用 SCTP,需要為 ​

​kube-apiserver​

​​關閉特性​

​--feature-gates=SCTPSupport=false,...​

​​ 以禁用 ​

​SCTP​

​​ 。 啟用該特性後,使用者可以将 NetworkPolicy 的 ​

​protocol​

​​ 字段設定為 ​

​SCTP​

​。

⚠️ CNI插件需要支援SCTP協定

b. 待開發

截止Kubernetes v1.20 ,NetworkPolicy API 還不支援下述功能。

  • 強制叢集内部流量經過某公用網關(可通過服務網格或其他代理來實作)
  • 與 TLS 相關的場景(可使用服務網格或者 Ingress 控制器)
  • 實作适用于所有名字空間或 Pods 的預設政策(如calico)
  • 進階的政策查詢或者政策驗證相關工具(如calico)
  • 在同一政策聲明中選擇目标端口範圍的能力
  • 生成網絡安全事件日志的能力(例如,被阻塞或接收的連接配接請求)
  • 禁止本地回路或指向宿主的網絡流量(Pod 目前無法阻塞 localhost 通路, 它們也無法禁止來自所在節點的通路請求)。

上述需求可以通過作業系統元件(如 SELinux、OpenVSwitch、IPTables 等) 或者七層技術(Ingress 控制器、服務網格實作)及準入控制器進行功能增強,當然有興趣的可以參考calico及OPA項目。

六、參考文檔
  • ​​Kubernetes network policies​​
  • ​​Declare Network Policy​​
  • ​​Kubernetes Network Policy Recipes​​
  • ​​fesikyer network policy​​

繼續閱讀