摘要:我們整個監控的部分,沒有采用社區流行的,而是自己實現了一套。但是對于前端來說,只暴露一個入口,引入一個反代即可。簡介是一個為了讓部署微服務更加便捷而誕生的現代反向代理負載均衡工具。配置熱更新,支持多種后端。將請求轉發到統一認證服務。
前言
對于監控這塊,我們基于prometheus實現,當然做了大量的優化,包括前面所講到的配置接口化。我們整個監控的UI部分,沒有采用社區流行的grafana,而是自己實現了一套。我們后端的服務按照功能拆分了幾大塊,例如拓撲,網絡流量,配置,元數據等等。拆分的好處就是可以解耦,各個模塊功能的升級不影響其他模塊。但是對于前端來說,只暴露一個入口,引入一個反代即可。
剛開始選用了nginx,后期由于要加入鑒權的功能,nginx就不能滿足我們的需求了。這個時候基本上需求就變為選擇一個可編程的反代。當然我在做電商的時候,我們經常采用openresty,結合nginx和lua,可以實現。而且社區基于openresty實現了kong和orange等api網關。
但是考慮我們的場景,整個項目并沒有特別高的并發和性能要求,而且我們團隊最熟悉的是golang和python。所以選擇了traefik。我們可以在后期,可以寫各種的插件來滿足我們的需求。
Tr?f?k 是一個為了讓部署微服務更加便捷而誕生的現代HTTP反向代理、負載均衡工具。 它支持多種后臺 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 來自動化、動態的應用它的配置文件設置。
簡單總結一下我認為traefik的特點:
官方測試traefik有nginx 85%的性能。這個性能對于一般項目足夠了,換來的是強大的編程能力,來從容應對各種需求。而且golang編寫,無依賴。
配置熱更新,支持多種后端。
支持集群模式
提供了一個web UI
結合項目寫demo我們的項目目前基本兩個需求,鑒權和反代。
配置文件對于反代。主要講一些配置相關。我們采用的是file。traefik對這種靜態文件支持watcher。依舊無需重啟進程。
主配置文件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",這個時候我把所有的代理規則寫到一個rules.toml文件中,也算一種解耦的思路。
當然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
執行
./traefik --c traefik.toml實際效果
訪問ui:
對于鑒權:
traefik在中間件中支持了幾種auth
basic auth
forward
目前forward基本能滿足我們的需求。將請求轉發到統一認證服務。
當然oauth,jwt等之類是目前不支持的,但是實現起來很簡單,增加一個中間件而已。
沒有最好的技術,只有合適的場景。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27213.html
摘要:我們整個監控的部分,沒有采用社區流行的,而是自己實現了一套。但是對于前端來說,只暴露一個入口,引入一個反代即可。簡介是一個為了讓部署微服務更加便捷而誕生的現代反向代理負載均衡工具。配置熱更新,支持多種后端。將請求轉發到統一認證服務。 前言 對于監控這塊,我們基于prometheus實現,當然做了大量的優化,包括前面所講到的配置接口化。我們整個監控的UI部分,沒有采用社區流行的grafa...
摘要:我們整個監控的部分,沒有采用社區流行的,而是自己實現了一套。但是對于前端來說,只暴露一個入口,引入一個反代即可。簡介是一個為了讓部署微服務更加便捷而誕生的現代反向代理負載均衡工具。配置熱更新,支持多種后端。將請求轉發到統一認證服務。 前言 對于監控這塊,我們基于prometheus實現,當然做了大量的優化,包括前面所講到的配置接口化。我們整個監控的UI部分,沒有采用社區流行的grafa...
摘要:使用渲染評論列表,搭配的反代可以實現在網絡審查地區加載評論列表支持自動檢測訪客的可用性自動選擇加載原生評論完整模式和提供的評論基礎模式。簡介最早看到屈哥的上看到了屈哥用開發的評論基礎模式供無法訪問的訪客查看評論和發表評論。 https://github.com/SukkaW/Dis... 使用 Disqus API 渲染評論列表,搭配 Disqus API 的反代可以實現在網絡審查地區...
摘要:一個小服務器加本地一個閑置從機撐進去這么多東西很顯然爆了,于是把拆出來,用上了公共的云服務容器鏡像服務。使用對集群外暴露服務這里使用的是在中部署有官方部署手冊,基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實踐 之前自己的項目開發就搭了個cicd的環境,那時候是在本就小的可憐的服務器上搭了一套 jenkins + docker...
摘要:一個小服務器加本地一個閑置從機撐進去這么多東西很顯然爆了,于是把拆出來,用上了公共的云服務容器鏡像服務。使用對集群外暴露服務這里使用的是在中部署有官方部署手冊,基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實踐 之前自己的項目開發就搭了個cicd的環境,那時候是在本就小的可憐的服務器上搭了一套 jenkins + docker...
閱讀 3316·2021-11-16 11:45
閱讀 4385·2021-09-22 15:38
閱讀 2841·2021-09-22 15:26
閱讀 3347·2021-09-01 10:48
閱讀 827·2019-08-30 15:56
閱讀 715·2019-08-29 13:58
閱讀 1487·2019-08-28 18:00
閱讀 2160·2019-08-27 10:53