kubernetes實踐之十三: 負載均衡機制Ingress

百聯達發表於2018-04-09
一:前言
Kubernetes在設計之初就充分考慮了針對容器的服務發現與負載均衡機制,提供了Service資源,並通過kube-proxy配合cloud provider來適應不同的應用場景。隨著kubernetes使用者戶的激增,使用者場景的不斷豐富,又產生了一些新的負載均衡機制。目前,kubernetes中的負載均衡?致可以分為以下幾種機制:

1.Service(NodePort): 直接用Service提供cluster內部的負載均衡,通過在叢集的每個node上暴露一個埠,然後將這個埠對映到某個具體的service來實現的,雖然每個node的埠有很多(預設的取值範圍是 30000-32767),但是由於安全性和易用性(服務多了就亂了,還有埠衝突問題)實際使用可能並不多。

2.Ingress Controller: 還是用Service提供cluster內部的負載均衡,但是通過自定義LB提供外部訪問。

3.Service Load Balancer:通過向底層雲平臺申請建立一個負載均衡器來向外暴露服務;目前LoadBlancer Service支援的雲平臺已經相對完善,比如國外的GCE、DigitalOcean,國內的 阿里雲,私有云 OpenStack 等等,由於LoadBlancer Service深度結合了雲平臺,所以只能在一些雲平臺上來使用。

4.Custom Load Balancer:自定義負載均衡,並替代kube-proxy,一般在物理部署Kubernetes時使用,方便接入公司已有的外部服務。

二:Service

Service是對一組提供相同功能的Pods的抽象,併為它們提供一個統一的入口。藉助Service,應用可以方便的實現服務發現與負載均衡,並實現應用的零當機升級。Service通過標籤來選取服務後端,一般配合Replication Controller或者Deployment 來保證後端容器的正常執行。
Service有三種型別:

1.Cluster Ip: 預設型別,自動分配一個僅cluster內部可以訪問的虛擬IP
2.NodePort : 在ClusterIp基礎上為Service在每臺機器上繫結一個埠,這樣可以通過<NodeIP>:NodePort來訪問該服務。
3.LoadBalancer:在NodePort的基礎上,藉助cloud provider建立一個外部的負載均衡器,並將請求轉發到<NodeIP>:NodePort

三:Ingress Controller

Service 雖然解決了服務發現和負載均衡的問題,但對外訪問的時候,NodePort型別需要在外部搭建額外的負載均衡,而LoadBalancer需要Kubernetes必須跑在支援的cloud provider上面。 Ingress就是為了解決這些限制的。

Ingress 是一個規則的集合,它允許叢集外的流量通過一定的規則到達叢集內的 Service 。 request--->ingress--->service.

Ingress由三個元件組成:

1.
反向代理負載均衡器:即常見的負載均衡軟體,如 nginx、Haproxy 等

2.
Ingress Controller: kubernetes API 進行互動,實時的感知後端 service、pod 等變化, Ingress Controller 再結合下文的 Ingress 生成配置,然後更新反向代理負載均衡器,並重新整理其配置,實現動態服務發現與更新

3.
Ingress:規則集合;定義了域名與Kubernetes的service的對應關係;這個規則將與 Ingress Controller 結合, Ingress Controller 將其動態寫入到負載均衡器配置中,從而實現整體的服務發現和負載均衡。

四:Service Load Balancer
在Ingress出現以前,Service Load Balancer誰推薦的解決Service侷限性的方式。Service Load Balancer將haproxy跑在容器中,並監控service和endpoint的變化,通過容器IP對外提供4層和7層負載均衡服務。

五:Custom Load Balancer
自定義元件,代替kube-proxy來做負載均衡。如nginx plus, kube2haproxy等。

六:Endpoints
有幾種情況需要用到沒有selector的service
1.使用kubernetes叢集外部的資料庫時。
2.service中用到了其它namespace或kubernetes叢集中的service
3.在kubernetes的工作負載與叢集外的後端之間互相遷移。

七: Traefik
Traefik是?款開源的反向代理與負載均衡?具。它最?的優點是能夠與常?的微服務系統直接整合,可以實現?動化動態配置。?前?持Docker,Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper,BoltDB, Rest API等等後端模型。




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2152716/,如需轉載,請註明出處,否則將追究法律責任。

相關文章