Porter 進入 CNCF 雲原生全景圖,新版本即將釋出!

kubesphere發表於2020-07-17

近日,KubeSphere 社群子專案面向物理機環境的負載均衡器 Porter 正式進入 CNCF Landscape。CNCF Landscape 在雲原生實踐過程中的每個環節幫助使用者瞭解有哪些具體的軟體和產品選擇,Porter 進入 CNCF Landscape,意味著 Porter 正式成為了 CNCF 認可的構建雲原生最佳實踐中的一環。

Porter 加入 CNCF Landscape

雲原生計算基金會(CNCF, Cloud Native Computing Foundation)致力於雲原生技術的普及和可持續發展。在每年的 CNCF 年度報告中都會提及 CNCF Landscape,CNCF Landscape 是 CNCF 中的一個重要專案,幫助企業和開發人員快速瞭解雲原生體系的全貌,同時,也受到廣大開發者和使用者對該專案的關注和重視。CNCF Landscape 意圖從雲原生的層次結構,以及不同的功能組成上,讓使用者瞭解雲原生體系的全貌,並幫助使用者在不同元件層次去選擇恰當的軟體和工具進行支援。

CNCF Landscape

新晉 CNCF Landscape 的 Porter,解決什麼問題?

在 Kubernetes 叢集中可以使用 “LoadBalancer” 型別的服務將後端工作負載暴露在外部。雲廠商通常為 Kubernetes 提供雲上的 LoadBalancer 外掛,但這需要將叢集部署在特定 IaaS 平臺上。然而,許多企業使用者通常都將 Kubernetes 叢集部署在物理機上,尤其是用於生產環境或資料敏感的環境。而且對於本地物理機叢集,Kubernetes 不提供 LoadBalancer 的解決方案。Porter 是 KubeSphere 社群開源的專為物理機 Kubernetes 叢集暴露服務而設計的開源的負載均衡器,為使用者提供在物理環境暴露服務和在雲上暴露服務一致性體驗的外掛。

Porter 主要特性

面向物理機環境的 Kubernetes 開源負載均衡器 Porter 主要特性有:

  • 基於路由器 ECMP 的負載均衡
  • 基於 Layer 2 的負載均衡
  • 基於 BGP 路由動態配置
  • 支援 VIP 管理
  • 支援在 Kubernetes Service 中指定 LoadBalancerIP (v0.3.0)
  • 支援通過 Helm Chart 安裝(v0.3.0)
  • 支援通過 CRD 動態配置 BGP 服務端(v0.3.0)
  • 支援通過 CRD 動態配置 BGP 對等體(v0.3.0)

與 MetalLB 的區別

優點

  • 對 Kubernetes 使用者友好。基於 CRD-Controller 模式,使用 kubectl 控制 Porter 的一切
  • 配置檔案動態更新,無需重啟,自動更新 BGP 配置。根據網路環境靈活配置 BGP,動態啟用各種 BGP 特性
  • 更友好地處理與 Calico 的衝突,提供 Passive 模式和埠轉發模式

缺點

  • 無法跨平臺,目前僅支援 Linux

Kubernetes 服務

在 Kubernetes 叢集中,網路是非常重要的基礎設施。對於大規模的節點和容器來說,要保證網路的連通性、網路轉發的高效,同時能做的 IP 和 Port 自動化分配和管理,並提供給使用者非常直觀和簡單的方式來訪問需要的應用,這是非常複雜且細緻的設計。

Kubernetes 本身在這方面下了很大的功夫,它通過 CNI、Service、DNS、Ingress 等一系列概念,解決了服務發現、負載均衡的問題,也大大簡化了使用者的使用和配置。其中的 Service 是 Kubernetes 微服務的基礎,Kubernetes 是通過 kube-proxy 這個元件來實現服務的。kube-proxy 執行在每個節點上,監聽 API Server 中服務物件的變化,通過管理 iptables 來實現網路的轉發。使用者可以建立多種形式的 Service,比如基於 Label Selector 、Headless 或者 ExternalName 的 Service,kube-proxy 會為 Service 建立一個虛擬的 IP(即 Cluster IP),用於叢集內部訪問服務。

暴露服務的三種方式

如果需要從叢集外部訪問服務,即將服務暴露給使用者使用,Kubernetes Service 本身提供了兩種方式,一種是 NodePort,另外一種是 LoadBalancer。另外 Ingress 也是一種常用的暴露服務的方式。

NodePort

如果將服務的型別設定為 NodePort,kube-proxy 就會為這個服務申請一個 30000 以上的埠號(預設情況下),然後在叢集所有主機上配置 IPtables 規則,這樣使用者就能通過叢集中的任意節點加上這個分配的埠號訪問服務了,如下圖

NodePort

NodePort 是最方便的暴露服務的方式,缺點也很明顯:

  • 基於 SNAT 進行訪問,Pod 無法看到真正的 IP。
  • NodePort 是將叢集中的一個主機作為跳板訪問後端服務,所有的流量都會經過跳板機,很容易造成效能瓶頸和單點故障,難以用於生產環境。
  • NodePort 埠號一般都是用大埠,不容易記憶。

NodePort 設計之初就不是用於生產環境暴露服務的方式,所以預設埠都是一些大埠。

LoadBalancer

LoadBalancer 是 Kubernetes 提倡的將服務暴露給外部的一種方式。但是這種方式需要藉助於雲廠商提供的負載均衡器才能實現,這也要求了 Kubernetes 叢集必須在雲廠商上部署。在物理機部署的 Kubernetes 環境則需要 Porter 來解決服務暴露的問題。

LoadBalancer 的原理如下:

LoadBalancer

LoadBalancer 通過雲廠商的 LB 外掛實現,LB 外掛基於 Kubernetes.io/cloud-provider 這個包實現,這個包會自動選擇合適的後端暴露給 LB 外掛,然後 LB 外掛由此建立對應的負載均衡器,網路流量在雲服務端就會被分流,就能夠避免 NodePort 方式的單點故障和效能瓶頸。LoadBalancer 是 Kubernetes 設計的對外暴露服務的推薦方式,但是這種方式僅僅限於雲廠商提供的 Kubernetes 服務上,對於物理部署或者非雲環境下部署的 Kubernetes 叢集,這一機制就存在侷限性而無法使用。

Ingress

Ingress 並不是 Kubernetes 服務本身提供的暴露方式,而是藉助於軟體實現的同時暴露多個服務的一種類似路由器的外掛。Ingress 通過域名來區分不同服務,並且通過 annotation 的方式控制服務對外暴露的方式。其原理如下圖:

Ingress

快速部署和體驗 Porter

完全開源

Porter 的所有程式碼和文件已在 Github 開源,歡迎大家關注 (Star) 和貢獻:https://github.com/kubesphere/porter

快速部署

Porter 目前已在如下三種環境下進行過部署和測試,並將部署測試與使用步驟的詳細文件記錄在 GitHub,可以通過以下連結檢視和部署實踐:

最新動態

Porter 將在本月中旬釋出新版本 v0.3.0,新版本由青雲QingCloud、本來生活和北京吉恆科技三家公司聯合開發,由社群定義與貢獻,非常感謝非青雲的社群貢獻者 @k0ngk0ng 和 @chinazj。新版本的主要功能已在文中 Porter 介紹中標註,歡迎大家安裝體驗!

延伸閱讀

關於 KubeSphere

KubeSphere 是在 Kubernetes 之上構建的以應用為中心的開源容器平臺,提供全棧的 IT 自動化運維的能力,簡化企業的 DevOps 工作流。

KubeSphere 已被 Aqara 智慧家居、本來生活、新浪、安暢網路、華夏銀行、極視角、雲智匯、微眾銀行、VNG Corporation、Radore 等海內外數千家企業採用。KubeSphere 提供了運維友好的嚮導式操作介面和豐富的企業級功能,包括 Kubernetes 資源管理、DevOps (CI/CD)、應用生命週期管理、微服務治理 (Service Mesh)、多租戶管理、監控日誌、告警通知、儲存與網路管理、GPU support 等功能,幫助企業快速構建一個強大和功能豐富的容器雲平臺。

KubeSphere 官網https://kubesphere.io/
KubeSphere GitHubhttps://github.com/kubesphere/kubesphere

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章