【摘要】此次重點講的是在深信服容器雲項目中的負載均衡方案的原理與實現。同時,因為我們投入的人力有限,人員的水平也有不足,但是藉助Docker與Kubernetes等開源技術的發展,我們基本上達到了容器雲平臺中應用服務的負載均衡。
首先介紹下背景,我們此次的重點講的是在我們容器雲項目中的負載均衡方案的原理與實現。
先說一下我們的雲平臺的基本情況,我們雲平臺基於Kubernetes,在Kubernetes集群上做了深度優化,形成超融合容器雲一體化方案。能做到一鍵部署、與超融合無縫融合。今天我們主要講我們容器雲平臺中,應用的負載均衡原理與實現。
1 . 容器雲負載均衡的功能介紹
負載均衡的原理,我相信在這裡不需要詳述了。我們直接介紹我們在容器雲平臺上實現的負載均衡有哪些功能,解決哪些客戶問題。
支持4層/7層應用負載
支持會話保持
配置簡單,無需關注k8s應用細節
高可用、高自愈能力
2 . Kubernetes負載均衡方案介紹
1)通過service實現負載
Services是Kubernetes的基本操作單元,是真實應用服務的抽象,每一個服務後面都有很多對應的容器來支持,通過Proxy的port和服務selector決定服務請求傳遞給後端提供服務的容器,對外表現為一個單一訪問接口,外部不需要了解後端如何運行,這給擴展或維護後端帶來很大的好處。
2)通過ingress實現負載
Service和Pod的IP地址只能在集群內部網絡中路由,所有到達“邊界路由器”(Edge Router)的網絡流量要麼被丟棄,要麼被轉發到別處
Ingress是對外(公網)服務到集群內的Service之間規則的集合:允許進入集群的請求被轉發至集群內。
3 . 深信服容器雲的負載均衡方案
我們的負載方案是基於HAProxy實現的負載, 以容器的形式部署在集群中:
解耦DNS-server配置,靜態配置DNS,動態綁定業務IP,支持故障遷移,IP高效利用率;
容器化多節點部署Haproxy,高可靠多節點進行負載均衡;
域名訪問支持會話保持,路徑分發等功能。
部署圖:
流程圖:
該方案的特點如下:
負載均衡器根據集群內API Server獲得服務信息,並生成balancer的配置。
外部路由以及外部負載與vip方案實現可以同時兼容存在。
可選HAProxy與Nginx,兩者都能實現4層&7層負載(HAProxy不支持4層UDP),兩者都支持cookie做會話保持,都支持SSL。
HAProxy與Nginx實現方案基本一致,不同的只是配置模板,可以互相切換,目前暫定了HAProxy。
4 . 端口映射的原理與實現
容器服務端口通過Docker映射到host主機上,主機端口和容器互通;
Kubernetes維護和不停的刷新每臺節點上的iptables規則;
訪問從任意節點進來是,通過主機上的iptables規則負載均衡到各個節點的服務端口。