Porter 进入 CNCF 云原生全景图,新版本即将发布!
近日,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 發布!
總結
以上是生活随笔為你收集整理的Porter 进入 CNCF 云原生全景图,新版本即将发布!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 踩iviewui中Tabs 标签页数据绑
- 下一篇: set集合