隨着微服務的興起,行業里出現了非常多優秀的微服務網關框架,今天教大家搭建一套國人,用Golang寫的微服務網關框架。
這里啰嗦一句,可能到今天還有人不理解什么是微服務,為什么要用微服務。目前網上相對比較模糊,沒有精確的定義,但大家的意思都差不多,這里個人通俗描述,就是小項目發展到大項目過程中,出於已維護,與穩定性等考慮,將一個整體項目分為多個微小服務。
微服務網關的作用是在用戶第一個網關服務器,你按照業務服務相關需求,給網關分流,相比雲主機廠商提供的負載均衡器,強大在於你可以根據自己業務去分流,同時還以可以實現鑒權、校驗、聚合、緩存等自定義服務,而雲主機的負載均衡器只是一個簡單按照流量給你負載均衡請求,不具有自定義編程性質。
接下來教如何安裝,以及注意事項。
地址:
https://github.com/fagongzi/gateway
功能:
- 流量控制
- 熔斷
- 負載均衡
- 服務發現
- 插件機制
- 路由(分流,復制流量)
- API 聚合
- API 參數校驗
- API 訪問控制(黑白名單)
- API 默認返回值
- API 定制返回值
- API 結果Cache
- JWT Authorization
- API Metric導入Prometheus
- API 失敗重試
- 后端server的健康檢查
- 開放管理API(GRPC、Restful)
- 支持websocket
- 支持在線遷移數據
1.下載
2.編譯
cd $GOPATH/src/github.com/fagongzi/gateway/cmd/proxy go build -o proxy ./... cd $GOPATH/src/github.com/fagongzi/gateway/cmd/api go build -o apiserver ./...
3.ECTD安裝
Etcd是一個高可用的 Key/Value 存儲系統,主要用於分享配置和服務發現。
etcd github地址:
https://github.com/etcd-io/etcd
當然,你也可以用命令行安裝
1、安裝
yum install etcd
2、修改配置文件,主要是地址,如果不是很懂,可以看下etcd官方文檔
vim /etc/etcd/etcd.conf # [member] ETCD_NAME="k8s_master_ip_name" #范例: etcd1 ETCD_DATA_DIR="/work/etcd" ETCD_LISTEN_PEER_URLS="http://k8s_master_ip:2380" ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://k8s_master_ip:2379"
3、啟動
systemctl daemon-reload
systemctl enable etcd.service
systemctl start etcd.service
4、測試
IP與端口改為配置的ip地址,如果沒有使用,建議不要隨意變動端口
curl http://127.0.0.1:2379/version
如果返回{"etcdserver":"3.3.2","etcdcluster":"3.3.0"} 就是安裝成功了
基礎軟件都安裝好了,我們就准備最低三台機器。
運行環境
我們以三台etcd、一台ApiServer,三台Proxy的環境為例
環境信息
組件 | 環境 | 說明 |
---|---|---|
etcd集群環境 | 192.168.1.12 | 配置服務器 |
Proxy | 192.168.1.13 | 代理服務器 |
ApiServer | 192.168.1.14 | 路由配置接口服務器 |
1.啟動 ApiServer服務
啟動ApiServer服務,看到以下截圖就對了。

2.啟動代理服務
看到以下截圖就對了

3.添加配置
服務都啟動后,我們添加配置路由。
啟動Proxy
./proxy --addr=192.168.1.200:80 --addr-rpc=192.168.1.200:9091 --addr-store=etcd://192.168.1.100:2379,192.168.1.101:2379,192.168.1.102:2379 --namespace=test ./proxy --addr=192.168.1.201:80 --addr-rpc=192.168.1.201:9091 --addr-store=etcd://192.168.1.100:2379,192.168.1.101:2379,192.168.1.102:2379 --namespace=test ./proxy --addr=192.168.1.202:80 --addr-rpc=192.168.1.202:9091 --addr-store=etcd://192.168.1.100:2379,192.168.1.101:2379,192.168.1.102:2379 --namespace=test
用戶的API接入地址可以為:192.168.1.201:80、192.168.1.201:80、192.168.1.202:80其中任意一個
如果能訪問下你后面代理的接口內容,表示成功。
如果覺得配置服務器API,命令行麻煩,可以下載WEB UI的管理控制台。
下載地址: