容器雲網絡流入架構設計學習

使用使用gorouter+haproxy作爲流量入口,confd作爲配置更新

Gorouter

項目地址:https://github.com/cloudfoundry/gorouter/

Gorouter來源於CloudFoundry。是一個高性能、輕量級的路由器及負載,它是整個平臺的流量入口,負責分發所有的http請求到對應的instance。它在內存中維護了一張路由表,記錄了域名與實例的對應關係,所謂的實例自動遷移,靠得就是這張路由表,某實例宕掉了,就從路由表中剔除,新實例創建了,就加入路由表。

Gnatsd

Gnatsd來源cloudfoundry,是一個開源輕量高性能的消息系統,gorouter依賴它來作爲消息系統,進行PUB/SUB操作。
官方地址:http://nats.io/
項目地址:https://github.com/apcera/gnatsd

Confd

Confd是一個輕量級的配置管理工具。通過查詢Etcd,結合配置模板引擎,保持本地配置最新,同時具備定期探測機制,配置變更自動reload。其後端支持的數據類型有:etcd、consul、vault、environment variables、redis、zookeeper、dynamodb、stackengine、rancher。不過一般使用Confd和etcd的配合使用比較多。

項目地址:https://github.com/kelseyhightower/confd

HAProxy

HAProxy是一個免費的負載均衡軟件,可以運行於大部分主流的Linux操作系統上。HAProxy提供了L4(TCP)和L7(HTTP)兩種負載均衡能力,具備豐富的功能。HAProxy的社區非常活躍,版本更新快速,最關鍵的是,HAProxy具備媲美商用負載均衡器的性能和穩定性。

項目地址:https://github.com/haproxy/haproxy

etcd

etcd是Go編寫,是一個分佈式一致性鍵值存儲系統,用於共享配置和服務發現,專注於:· 簡單:良好定義的,面向用戶的API (gRPC)。· 安全:帶有可選客戶端證書認證的自動TLS。· 快速:測試驗證,每秒10000寫入。· 可靠:使用Raft適當分佈。項目地址:https://github.com/etcd-io/etcd

今天簡單分享下公司大規模容器應用中的數據流架構。

我們公司項目都是採用微服務架構設計,現服務對外訪問支持兩種模式如下:

  1. 使用的NodePort方式暴露應用端口至宿主機,上層通過配置nginx代理到這臺機器的端口,然後外網SLB在代理這個nginx。這種模式下帶來了一個麻煩,就是每次新上個應用都得去配置Nginx。:)

    流量走向: SLB->Nginx>node(kube-proxy)>pod

  2. 域名分發模式,使用gorouter+haproxy作爲流量的入口,域名通過泛解析到SLB上,SLB解析到內部的haproxy,haproxy代理gorouter,gorouter內部維護了一張應用的路由表,會進行匹配。這樣我們在平臺上一個應用創建好後,啥也不用做,就可以訪問。

架構示意

 

選擇兩個Node節點作爲流量節點,上面跑了confd,haproxy,gorouter容器,gorouter需要依賴nats(我們是部署在了另一個命名空間下)控制器使用的DaemonSet,開放了80,443端口。

其中原理就是

  1. 創建應用後如果使用域名分發模式,就會通過nats客戶端註冊一條消息到gorouter中,內容包含使用的域名+加上這應用的service IP

  2. confd監聽etcd中的key變化,如果有更新就同步修改haproxy配置規則並重新加載。

  3. SLB綁定到這流量節點上的80端口(haproxy開的端口)

  4. 泛域名解析到SLB,用戶通過域名test.a.com請求,會經過gorouter路由匹配,匹配成功進行代理,反之訪問會提示未註冊路由錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章