近日,KubeSphere 社區子項目面向物理機環境的負載均衡器 Porter 正式進入 CNCF Landscape。CNCF Landscape 在雲原生實踐過程中的每個環節幫助用戶瞭解有哪些具體的軟體和產品選擇,Porter 進入 CNCF Landscape,意味著 Porter 正式成為了 ...
近日,KubeSphere 社區子項目面向物理機環境的負載均衡器 Porter 正式進入 CNCF Landscape。CNCF Landscape 在雲原生實踐過程中的每個環節幫助用戶瞭解有哪些具體的軟體和產品選擇,Porter 進入 CNCF Landscape,意味著 Porter 正式成為了 CNCF 認可的構建雲原生最佳實踐中的一環。
雲原生計算基金會(CNCF, Cloud Native Computing Foundation)致力於雲原生技術的普及和可持續發展。在每年的 CNCF 年度報告中都會提及 CNCF Landscape,CNCF Landscape 是 CNCF 中的一個重要項目,幫助企業和開發人員快速瞭解雲原生體系的全貌,同時,也受到廣大開發者和使用者對該項目的關註和重視。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 是最方便的暴露服務的方式,缺點也很明顯:
- 基於 SNAT 進行訪問,Pod 無法看到真正的 IP。
- NodePort 是將集群中的一個主機作為跳板訪問後端服務,所有的流量都會經過跳板機,很容易造成性能瓶頸和單點故障,難以用於生產環境。
- NodePort 埠號一般都是用大埠,不容易記憶。
NodePort 設計之初就不是用於生產環境暴露服務的方式,所以預設埠都是一些大埠。
LoadBalancer
LoadBalancer 是 Kubernetes 提倡的將服務暴露給外部的一種方式。但是這種方式需要藉助於雲廠商提供的負載均衡器才能實現,這也要求了 Kubernetes 集群必須在雲廠商上部署。在物理機部署的 Kubernetes 環境則需要 Porter 來解決服務暴露的問題。
LoadBalancer 的原理如下:
LoadBalancer 通過雲廠商的 LB 插件實現,LB 插件基於 Kubernetes.io/cloud-provider 這個包實現,這個包會自動選擇合適的後端暴露給 LB 插件,然後 LB 插件由此創建對應的負載均衡器,網路流量在雲服務端就會被分流,就能夠避免 NodePort 方式的單點故障和性能瓶頸。LoadBalancer 是 Kubernetes 設計的對外暴露服務的推薦方式,但是這種方式僅僅限於雲廠商提供的 Kubernetes 服務上,對於物理部署或者非雲環境下部署的 Kubernetes 集群,這一機制就存在局限性而無法使用。
Ingress
Ingress 並不是 Kubernetes 服務本身提供的暴露方式,而是藉助於軟體實現的同時暴露多個服務的一種類似路由器的插件。Ingress 通過功能變數名稱來區分不同服務,並且通過 annotation 的方式控制服務對外暴露的方式。其原理如下圖:
快速部署和體驗 Porter
完全開源
Porter 的所有代碼和文檔已在 Github 開源,歡迎大家關註 (Star) 和貢獻:https://github.com/kubesphere/porter
快速部署
Porter 目前已在如下三種環境下進行過部署和測試,並將部署測試與使用步驟的詳細文檔記錄在 GitHub,可以通過以下鏈接查看和部署實踐:
- 使用 Helm Chart 在 Kubernetes 部署 Porter:https://github.com/kubesphere/porter/blob/master/doc/zh/porter-chart.md
- 在物理機部署的 Kubernetes 部署 Porter:https://github.com/kubesphere/porter/blob/master/doc/zh/deploy_baremetal.md
- 在雲平臺用模擬路由器的方式測試:https://github.com/kubesphere/porter/blob/master/doc/zh/simulate_with_bird.md
最新動態
Porter 將在本月中旬發佈新版本 v0.3.0,新版本由青雲QingCloud、本來生活和北京吉恆科技三家公司聯合開發,由社區定義與貢獻,非常感謝非青雲的社區貢獻者 @k0ngk0ng 和 @chinazj。新版本的主要功能已在文中 Porter 介紹中標註,歡迎大家安裝體驗!
延伸閱讀
- Porter-面向物理機環境的 Kubernetes 開源負載均衡器:https://kubesphere.com.cn/conferences/porter/
- Porter 如何幫助本來生活在 K8s 物理環境暴露集群服務:https://mp.weixin.qq.com/s/Us6DZbf_GhRT69-dL1GD4g
- Porter 官網:https://porterlb.io/
關於 KubeSphere
KubeSphere 是在 Kubernetes 之上構建的以應用為中心的開源容器平臺,提供全棧的 IT 自動化運維的能力,簡化企業的 DevOps 工作流。
KubeSphere 已被 Aqara 智能家居、本來生活、新浪、安暢網路、華夏銀行、極視角、雲智匯、微眾銀行、VNG Corporation、Radore 等海內外數千家企業採用。KubeSphere 提供了運維友好的嚮導式操作界面和豐富的企業級功能,包括 Kubernetes 資源管理、DevOps (CI/CD)、應用生命周期管理、微服務治理 (Service Mesh)、多租戶管理、監控日誌、告警通知、存儲與網路管理、GPU support 等功能,幫助企業快速構建一個強大和功能豐富的容器雲平臺。
KubeSphere 官網:https://kubesphere.io/
KubeSphere GitHub:https://github.com/kubesphere/kubesphere
本文由博客一文多發平臺 OpenWrite 發佈!