摘要:我們整個監(jiān)控的部分,沒有采用社區(qū)流行的,而是自己實(shí)現(xiàn)了一套。但是對于前端來說,只暴露一個入口,引入一個反代即可。簡介是一個為了讓部署微服務(wù)更加便捷而誕生的現(xiàn)代反向代理負(fù)載均衡工具。配置熱更新,支持多種后端。將請求轉(zhuǎn)發(fā)到統(tǒng)一認(rèn)證服務(wù)。
前言
對于監(jiān)控這塊,我們基于prometheus實(shí)現(xiàn),當(dāng)然做了大量的優(yōu)化,包括前面所講到的配置接口化。我們整個監(jiān)控的UI部分,沒有采用社區(qū)流行的grafana,而是自己實(shí)現(xiàn)了一套。我們后端的服務(wù)按照功能拆分了幾大塊,例如拓?fù)洌W(wǎng)絡(luò)流量,配置,元數(shù)據(jù)等等。拆分的好處就是可以解耦,各個模塊功能的升級不影響其他模塊。但是對于前端來說,只暴露一個入口,引入一個反代即可。
剛開始選用了nginx,后期由于要加入鑒權(quán)的功能,nginx就不能滿足我們的需求了。這個時候基本上需求就變?yōu)檫x擇一個可編程的反代。當(dāng)然我在做電商的時候,我們經(jīng)常采用openresty,結(jié)合nginx和lua,可以實(shí)現(xiàn)。而且社區(qū)基于openresty實(shí)現(xiàn)了kong和orange等api網(wǎng)關(guān)。
但是考慮我們的場景,整個項(xiàng)目并沒有特別高的并發(fā)和性能要求,而且我們團(tuán)隊(duì)最熟悉的是golang和python。所以選擇了traefik。我們可以在后期,可以寫各種的插件來滿足我們的需求。
Tr?f?k 是一個為了讓部署微服務(wù)更加便捷而誕生的現(xiàn)代HTTP反向代理、負(fù)載均衡工具。 它支持多種后臺 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 來自動化、動態(tài)的應(yīng)用它的配置文件設(shè)置。
簡單總結(jié)一下我認(rèn)為traefik的特點(diǎn):
官方測試traefik有nginx 85%的性能。這個性能對于一般項(xiàng)目足夠了,換來的是強(qiáng)大的編程能力,來從容應(yīng)對各種需求。而且golang編寫,無依賴。
配置熱更新,支持多種后端。
支持集群模式
提供了一個web UI
結(jié)合項(xiàng)目寫demo我們的項(xiàng)目目前基本兩個需求,鑒權(quán)和反代。
配置文件對于反代。主要講一些配置相關(guān)。我們采用的是file。traefik對這種靜態(tài)文件支持watcher。依舊無需重啟進(jìn)程。
主配置文件traefik.toml
################################################################ # Global configuration ################################################################ # Enable debug mode # # Optional # Default: false # # debug = true # Log level # # Optional # Default: "ERROR" # # logLevel = "ERROR" # Entrypoints to be used by frontends that do not specify any entrypoint. # Each frontend can specify its own entrypoints. # # Optional # Default: ["http"] # # defaultEntryPoints = ["http", "https"] # Entrypoints definition # # Optional # Default: [entryPoints] [entryPoints.http] address = ":8000" # Traefik logs # Enabled by default and log to stdout # # Optional # # [traefikLog] # Sets the filepath for the traefik log. If not specified, stdout will be used. # Intermediate directories are created if necessary. # # Optional # Default: os.Stdout # # filePath = "log/traefik.log" # Format is either "json" or "common". # # Optional # Default: "common" # # format = "common" # Enable access logs # By default it will write to stdout and produce logs in the textual # Common Log Format (CLF), extended with additional fields. # # Optional # # [accessLog] # Sets the file path for the access log. If not specified, stdout will be used. # Intermediate directories are created if necessary. # # Optional # Default: os.Stdout # # filePath = "/path/to/log/log.txt" # Format is either "json" or "common". # # Optional # Default: "common" # # format = "common" ################################################################ # Web configuration backend ################################################################ # Enable web configuration backend [web] # Web administration port # # Required # address = ":8080" ################################################################ # Docker configuration backend ################################################################ # Enable Docker configuration backend # [docker] # Docker server endpoint. Can be a tcp or a unix socket endpoint. # # Required # Default: "unix:///var/run/docker.sock" # # endpoint = "tcp://10.10.10.10:2375" # Default domain used. # Can be overridden by setting the "traefik.domain" label on a container. # # Optional # Default: "" # # domain = "docker.localhost" # Expose containers by default in traefik # # Optional # Default: true # # exposedbydefault = true ################################################################ # File configuration backend ################################################################ [file] filename = "rules.toml" watch = true
注意filename = "rules.toml",這個時候我把所有的代理規(guī)則寫到一個rules.toml文件中,也算一種解耦的思路。
當(dāng)然traefik也支持多文件。就是你可以指定一個路徑,然后會將該路徑下所有rule文件加載
[file] directory = "/path/to/config/"
下面是demo中的rules.toml
[backends] [backends.trend] [backends.trend.servers] [backends.trend.servers.server1] url = "http://api.domain.com:8812" weight = 1 [backends.trend.healthcheck] path = "/" interval = "10s" # Frontends [frontends] [frontends.trend] backend = "trend" [frontends.trend.routes.router1] rule = "PathPrefixStrip:/trend"啟動traefik
執(zhí)行
./traefik --c traefik.toml實(shí)際效果
訪問ui:
對于鑒權(quán):
traefik在中間件中支持了幾種auth
basic auth
forward
目前forward基本能滿足我們的需求。將請求轉(zhuǎn)發(fā)到統(tǒng)一認(rèn)證服務(wù)。
當(dāng)然oauth,jwt等之類是目前不支持的,但是實(shí)現(xiàn)起來很簡單,增加一個中間件而已。
沒有最好的技術(shù),只有合適的場景。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/32637.html
摘要:我們整個監(jiān)控的部分,沒有采用社區(qū)流行的,而是自己實(shí)現(xiàn)了一套。但是對于前端來說,只暴露一個入口,引入一個反代即可。簡介是一個為了讓部署微服務(wù)更加便捷而誕生的現(xiàn)代反向代理負(fù)載均衡工具。配置熱更新,支持多種后端。將請求轉(zhuǎn)發(fā)到統(tǒng)一認(rèn)證服務(wù)。 前言 對于監(jiān)控這塊,我們基于prometheus實(shí)現(xiàn),當(dāng)然做了大量的優(yōu)化,包括前面所講到的配置接口化。我們整個監(jiān)控的UI部分,沒有采用社區(qū)流行的grafa...
摘要:我們整個監(jiān)控的部分,沒有采用社區(qū)流行的,而是自己實(shí)現(xiàn)了一套。但是對于前端來說,只暴露一個入口,引入一個反代即可。簡介是一個為了讓部署微服務(wù)更加便捷而誕生的現(xiàn)代反向代理負(fù)載均衡工具。配置熱更新,支持多種后端。將請求轉(zhuǎn)發(fā)到統(tǒng)一認(rèn)證服務(wù)。 前言 對于監(jiān)控這塊,我們基于prometheus實(shí)現(xiàn),當(dāng)然做了大量的優(yōu)化,包括前面所講到的配置接口化。我們整個監(jiān)控的UI部分,沒有采用社區(qū)流行的grafa...
摘要:使用渲染評論列表,搭配的反代可以實(shí)現(xiàn)在網(wǎng)絡(luò)審查地區(qū)加載評論列表支持自動檢測訪客的可用性自動選擇加載原生評論完整模式和提供的評論基礎(chǔ)模式。簡介最早看到屈哥的上看到了屈哥用開發(fā)的評論基礎(chǔ)模式供無法訪問的訪客查看評論和發(fā)表評論。 https://github.com/SukkaW/Dis... 使用 Disqus API 渲染評論列表,搭配 Disqus API 的反代可以實(shí)現(xiàn)在網(wǎng)絡(luò)審查地區(qū)...
摘要:一個小服務(wù)器加本地一個閑置從機(jī)撐進(jìn)去這么多東西很顯然爆了,于是把拆出來,用上了公共的云服務(wù)容器鏡像服務(wù)。使用對集群外暴露服務(wù)這里使用的是在中部署有官方部署手冊,基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實(shí)踐 之前自己的項(xiàng)目開發(fā)就搭了個cicd的環(huán)境,那時候是在本就小的可憐的服務(wù)器上搭了一套 jenkins + docker...
摘要:一個小服務(wù)器加本地一個閑置從機(jī)撐進(jìn)去這么多東西很顯然爆了,于是把拆出來,用上了公共的云服務(wù)容器鏡像服務(wù)。使用對集群外暴露服務(wù)這里使用的是在中部署有官方部署手冊,基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實(shí)踐 之前自己的項(xiàng)目開發(fā)就搭了個cicd的環(huán)境,那時候是在本就小的可憐的服務(wù)器上搭了一套 jenkins + docker...
閱讀 3024·2021-09-22 15:52
閱讀 2903·2019-08-30 15:55
閱讀 2699·2019-08-30 15:53
閱讀 2454·2019-08-30 13:21
閱讀 1620·2019-08-30 13:10
閱讀 2481·2019-08-26 12:09
閱讀 2563·2019-08-26 10:33
閱讀 1802·2019-08-23 18:06