KubeSphere 社區開源負載均衡器 Porter進入 CNCF 云原生全景圖
正文:
近日,KubeSphere 社區子專案面向物理機環境中的負載均衡器 Porter (https://porterlb.io) 正式進入 CNCF Landscape,CNCF Landscape 在云原生實踐程序中的每個環節幫助用戶了解有哪些具體的軟體和產品選擇,Porter 進入 CNCF Landscape,意味著 Porter 正式成為了 CNCF 認可的構建云原生最佳實踐中的一環,

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

CNCF Landscape 全景圖
新晉 CNCF Landscape 的 Porter,解決什么問題?
在 Kubernetes 集群中可以使用 Load Balancer 型別的服務將后端作業負載暴露在外部,云廠商通常為 Kubernetes 提供云上的 Load Balancer 插件,但這需要將集群部署在特定 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 的方式控制服務對外暴露的方式,其原理如下圖:

KubeSphere 開源實踐
作為云原生領域的生態平臺,KubeSphere 堅持完全開源和開放的迭代思路,聯合國內、國際企業與開源社區,共同打造了以 KubeSphere 容器平臺為核心的開源專案,
除了將 Porter 貢獻到 CNCF 云原生全景圖之外,KubeSphere 還開源了 OpenPitrix 多云應用管理、KubeKey 安裝向導包、Kube-events、Fluent-bit Operator、Notification Manager、CSI 插件等 80 余個開源專案,
快速部署和體驗 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、本來生活和北京吉恒科技三家公司聯合開發,由社區定義與貢獻,新版本的主要功能已在文中 Porter 介紹中標注,歡迎大家安裝體驗!
延伸閱讀
- Porter-面向物理機環境的 Kubernetes 開源負載均衡器:https://kubesphere.com.cn/conferences/porter/
- Porter 如何幫助本來生活在 K8s 物理環境暴露集群服務:https://mp.weixin.qq.com/s/Us6DZbf_GhRT69-dL1GD4g
- Porter 官網:https://porterlb.io/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/79624.html
標籤:其他
上一篇:僅需4步,輕松升級K3s集群!
