本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

使用基於策略的網路擴充套件 Kubernetes 部署

儘管 Kubernetes 1.0 釋出至今僅有十八個月,但我們已經看到 Kubernetes 成為部署分散式應用程式的領先容器編排平臺。其中一個最重要的原因是圍繞它發展起來的充滿活力的開源社群。大量的 Kubernetes 貢獻者來自不同的背景,這意味著我們和使用者社群可以確信我們正在投資一個開放平臺。Google(Container Engine)、Red Hat(OpenShift)和 CoreOS(Tectonic)等公司正在開發基於 Kubernetes 的商業產品。這是一件好事,因為它將帶來更多的標準化併為使用者提供選擇。

Kubernetes 應用程式的網路要求

對於在 Kubernetes 上部署應用程式的公司來說,最大的問題之一是如何大規模部署和編排容器。他們意識到底層基礎設施(包括網路和儲存)需要支援分散式應用程式。軟體定義網路 (SDN) 非常適合此類應用程式,因為網路基礎設施的靈活性和敏捷性可以與應用程式本身相匹配。此類應用程式的網路要求包括:

  • 網路自動化
  • 分散式負載均衡和服務發現
  • 具有細粒度策略的分散式安全
  • QoS 策略
  • 可擴充套件的即時監控
  • 服務跨容器、虛擬機器和裸金屬伺服器分佈的混合應用環境
  • 服務插入(例如防火牆)
  • 支援私有云和公共雲部署

Kubernetes 網路

Kubernetes 透過 API 提供一套核心平臺服務。該平臺可以透過擴充套件 API、外掛和標籤以多種方式進行擴充套件。這使得為 Kubernetes 開發了各種各樣的整合和工具。Kubernetes 認識到每個部署中的網路都將是獨特的。Kubernetes 沒有試圖讓核心系統處理所有這些用例,而是選擇使網路可插拔。

透過 Nuage Networks,我們提供了一個可擴充套件的基於策略的 SDN 平臺。該平臺由一個網路策略引擎管理,該引擎抽象了與配置系統相關的複雜性。此外,還有一個獨立的 SDN 控制器,它具有非常豐富的路由功能集,並且設計為可橫向擴充套件。Nuage 使用開源 Open vSwitch (OVS) 作為資料平面,並在 OVS 使用者空間進行了一些增強。就像 Kubernetes 一樣,Nuage 將開放性作為其平臺的核心宗旨。Nuage 提供開放 API,允許使用者編排其網路並整合防火牆、負載均衡器、IPAM 工具等網路服務。Nuage 在 OpenStack 和 VMware 等各種雲平臺以及 Kubernetes 等容器平臺中都受支援。

Nuage 平臺實現了一個 Kubernetes 網路外掛,它建立 VXLAN 覆蓋網路,以在 Kubernetes Pods 和非 Kubernetes 環境(虛擬機器和裸金屬伺服器)之間提供無縫的基於策略的網路。每個 Pod 都從屬於 名稱空間 且不與 Kubernetes 節點繫結的網路中獲得一個 IP 地址。

隨著雲應用程式採用微服務構建,控制這些微服務之間的流量成為一項基本要求。重要的是要指出,這些網路策略還需要控制進出外部網路和服務的流量。Nuage 的策略抽象模型使得為應用程式宣告細粒度的入站/出站策略變得容易。Kubernetes 有一個使用 Kubernetes 擴充套件 API 實現的測試版 網路策略 API。Nuage 實現了這個網路策略 API,以解決各種策略用例,例如:

  • Kubernetes 名稱空間隔離
  • 名稱空間間策略
  • 針對同一或不同名稱空間中的 Pod 組(策略組)的策略
  • Kubernetes Pods/名稱空間與外部網路/服務之間的策略

使用者需要考慮的一個關鍵問題是策略實現的伸縮性。有些網路設定需要建立訪問控制列表(ACL)條目,告訴 Pods 如何相互互動。在大多數情況下,這最終會導致 ACL 條目呈 n 平方堆積。Nuage 平臺避免了這個問題,可以快速分配適用於整個 Pod 組的策略。Nuage 平臺使用基於 OVS 的完全分散式有狀態防火牆來實現這些策略。

能夠監控 Kubernetes Pods 之間流動的流量對開發和運維團隊都非常有用。Nuage 平臺的即時分析引擎為 Kubernetes 應用程式提供可見性和安全監控。使用者可以獲得 Pods 組之間流量流動的視覺化表示,從而輕鬆檢視網路策略如何生效。使用者還可以獲得豐富的流量和策略統計資料。此外,使用者可以設定基於策略事件閾值觸發的警報。

結論

儘管我們一年多前就開始了與 Kubernetes 的整合工作,但感覺我們才剛剛開始。我們一直認為這是一個真正開放的社群,我們希望成為其中不可或缺的一部分。您可以在我們的 GitHub 頁面上找到更多關於我們 Kubernetes 整合的資訊。