Kubernetes Ingress 控制器的技術選型技巧
在 Kubernetes 的實踐、部署中,為了解決 Pod 遷移、Node Pod 埠、域名動態分配等問題,需要開發人員選擇合適的 Ingress 解決方案。面對市場上眾多Ingress產品,開發者該如何分辨它們的優缺點?又該如何結合自身的技術棧選擇合適的技術方案呢?在本文中,騰訊雲中介軟體核心研發工程師厲輝將為你介紹如何進行 Kubernates Ingress 控制器的技術選型。
叢集:是指容器執行所需雲資源的集合,包含了若干臺雲伺服器、負載均衡器等雲資源。 例項(Pod):由相關的一個或多個容器構成一個例項,這些容器共享相同的儲存和網路空間。 工作負載(Node):Kubernetes 資源物件,用於管理 Pod 副本的建立、排程以及整個生命週期的自動控制。 服務(Service):由多個相同配置的例項(Pod)和訪問這些例項(Pod)的規則組成的微服務。 Ingress:Ingress 是用於將外部 HTTP(S)流量路由到服務(Service)的規則集合。
NodePort 的缺點是一個埠只能掛載一個 Service,而且為了更高的可用性,需要額外搭建一個負載均衡。
LoadBalancer 的缺點則是每個服務都必須要有一個自己的 IP,不論是內網 IP 或者外網 IP。更多情況下,為了保證 LoadBalancer 的能力,一般需要依賴於雲服務商。
第一個問題:Nginx Ingress用了一些 OpenResty 的特性,但最終配置載入還是依賴於原有的 Nginx config reload。當路由配置非常大時,Nginx reload 會耗時很久,時間長達幾秒甚至十幾秒,這樣就會嚴重影響業務,甚至造成業務中斷。
第二個問題:Nginx Ingress 的外掛開發非常困難。如果你認為 Nginx Ingress 本身外掛不夠用,需要使用一些定製化外掛,這個額外的開發任務對程式設計師來說是十分痛苦的。因為Nginx Ingress自身的外掛能力和可擴充套件性非常差。
選型原則
必須開源的,不開源的無法使用。 Kubernetes 中Pod 變化非常頻繁,服務發現非常重要。 現在 HTTPS 已經很普及了,TLS 或者 SSL 的能力也非常重要,比如證書管理的功能。 支援 WebSocket 等常見協議,在某些情況下,可能還需要支援 HTTP2 、QUIC 等協議。
2.基礎軟體
3.功能需求
協議:是否支援 HTTP2、HTTP3; 負載均衡演算法:最基本的WRR、一致性雜湊負載均衡演算法是否能夠滿足需求,還是需要更加複雜的類似EWMA負載均衡演算法。 鑑許可權流:僅需要簡單的鑑權,或更進階的鑑權方式。又或者需要整合,能夠快速的開發出像騰訊雲 IM 的鑑權功能。Kubernetes Ingress除了前面我們提到的存在Nginx reload 耗時長、外掛擴充套件能力差的問題,另外它還存在後端節點調整權重的能力不夠靈活的問題。
第一部分:需要將 Kubernetes 叢集中的配置、或 Kubernetes 叢集中的狀態同步到 APISIX 叢集。 第二部分:需要將 APISIX中 的一些概念,比如像服務、upstream 等概念定義為 Kubernetes 中的 CRD。
APISIX Ingress:APISIX Ingress 的優點前面也提到了,它具有非常強大的路由能力、靈活的外掛擴充能力,在效能上表現也非常優秀。同時,它的缺點也非常明顯,儘管APISIX開源後有非常多的功能,但是缺少落地案例,沒有相關的文件指引大家如何使用這些功能。
Kubernetes Ingress:即 Kubernetes 推薦預設使用的 Nginx Ingress。它的主要優點為簡單、易接入。缺點是Nginx reload耗時長的問題根本無法解決。另外,雖然可用外掛很多,但外掛擴充套件能力非常弱。
Nginx Ingress:主要優點是在於它完全支援 TCP 和 UDP 協議,但是缺失了鑑權方式、流量排程等其他功能。
Kong:其本身就是一個 API 閘道器,它也算是開創了先河,將 API 閘道器引入到 Kubernetes 中當 Ingress。另外相對邊緣閘道器,Kong 在鑑權、限流、灰度部署等方面做得非常好。Kong Ingress 還有一個很大的優點:提供了一些 API、服務的定義,可以抽象成 Kubernetes 的 CRD,透過K8S Ingress 配置便可完成同步狀態至 Kong 叢集。缺點就是部署特別困難,另外在高可用方面,與 APISIX 相比也是相形見絀。
Traefik :基於 Golang 的 Ingress,它本身是一個微服務閘道器,在 Ingress 的場景應用比較多。他的主要平臺基於 Golang,自身支援的協議也非常多,總體來說是沒有什麼缺點。如果大家熟悉 Golang 的話,也推薦一用。
HAproxy:是一個久負盛名的負載均衡器。它主要優點是具有非常強大的負載均衡能力,其他方面並不佔優勢。
Istio Ingress 和 Ambassador Ingress 都是基於非常流行的 Envoy。說實話,我認為這兩個 Ingress 沒有什麼缺點,可能唯一的缺點是他們基於 Envoy 平臺,大家對這個平臺都不是很熟悉,上手門檻會比較高。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559354/viewspace-2677027/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 技術選型的藝術
- 劍指Kubernetes 揭祕騰訊雲的PaaS技術選型策略
- 聊聊技術選型
- 技術選型指南
- 如何技術選型
- 關於技術的選型
- Blog 技術選型
- 技術選型的藝術---湖北技術價值分享會
- Kubernetes Ingress
- 技術選型的一點個人思考
- 電商網站的初期技術選型網站
- 關於技術選型的問題
- 混合應用技術選型
- 聊聊創業公司的技術選型--樸素的技術觀創業
- Redux 的困擾與如何技術選型Redux
- 實際技術選型的考慮因素
- 我們Pikacode公司的技術選型
- 技術選型之Docker容器引擎Docker
- SpringCloud微服務技術選型SpringGCCloud微服務
- 開發技術選型參考
- kubernetes物件之Ingress物件
- 如何進行合適的前端技術選型前端
- 淺談移動應用的技術選型
- 前端技術選型及背後思考前端
- .net專案技術選型總結
- 資料產品的前端技術選型的思考前端
- Kubernetes Ingress-nginx使用Nginx
- Kubernetes:Ingress總結(二)
- Kubernetes:Ingress總結(一)
- 淺談常見的NoSQL技術方案和選型SQL
- 關於單測技術選型,聊聊我的思考
- 如何做好企業/團隊的技術選型?
- 微服務 2.0 技術棧選型手冊微服務
- 熱更新技術探討,該如何選型
- 專案中怎樣做技術選型
- 統一配置中心技術選型對比
- 微信公眾號java sdk技術選型Java
- Android 技術選型(持續更新中...)Android