k8s与监控--引入traefik做后端服务的反代
前言
对于监控这块,我们基于prometheus实现,当然做了大量的优化,包括前面所讲到的配置接口化。我们整个监控的UI部分,没有采用社区流行的grafana,而是自己实现了一套。我们后端的服务按照功能拆分了几大块,例如拓扑,网 络流量,配置,元数据等等。拆分的好处就是可以解耦,各个模块功能的升级不影响其他模块。但是对于前端来说,只暴露一个入口,引入一个反代即可。
刚开始选用了nginx,后期由于要加入鉴权的功能,nginx就不能满足我们的需求了。这个时候基本上需求就变为选择一个可编程的反代。当然我在做电商的时候,我们经常采用openresty,结合nginx和lua,可以实现。而且社区基于openresty实现了kong和orange等api网关。
但是考虑我们的场景,整个项目并没有特别高的并发和性能要求,而且我们团队最熟悉的是golang和python。所以选择了traefik。我们可以在后期,可以写各种的插件来满足我们的需求。
traefik简介
Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。
- 官方测试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等之类是目前不支持的,但是实现起来很简单,增加一个中间件而已。
总结
没有最好的技术,只有合适的场景。
本文转自中文社区-k8s与监控--引入traefik做后端服务的反代

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
k8s与CICD--利用flux部署应用到kubernetes
前言 一直在思考部署应用到k8s的姿势,之前介绍过helm,个人感觉helm把记 录数据放到k8s中不是特别好。最近发现了weave的flux项目(A tool for deploying container images to Kubernetes services)。 flux简介和注意事项 flux简介 先上图,大致看一下flux的理念。 1:flux可以和任意你喜欢的CI工具搭配比如:Drone,CircleCI,gitlabCI等。实际上flux做了CD的环节。 2:flux可以帮助你安全地更新应用。一般会遇到更新过程出错的问题,在flux实现中,每个部署的应用的yaml文件存储在git仓库里,所以每次更改都可以追踪,所以也能精确回滚到任何一个历史版本。这点我是觉得非常好的。当应用需要更新镜像的时候,有以下几个步骤: Clone the repository Find the deployment files that use the image in question (there may be more than one, since we have e.g., side...
- 下一篇
k8s与各网络插件集成(flannel calico canal kube-router romana cni-genie)
通用说明 如果多次 换不同网络插件实验,每次实验 前先把/etc/cni/net.d/目录下文件清空 rm -rf /etc/cni/net.d/* 复制代码 flannel # 创建flannel目录下载相关文件 mkdir flannel && cd flannel wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 修改配置 # 此处的ip配置要与kubeadm的pod-network参数配置的一致 net-conf.json: | { "Network": "192.168.0.0/16", "Backend": { "Type": "vxlan" } } # 修改镜像 image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 # 如果Node有多个网卡的话,参考flannel issues 39701, # https://github.com...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题