Top Menu

traefik 使用体验

阿里云的数据库服务到期不准备继续用了,准备把数据库迁移到物理机上,考虑灵活性在docker上部署数据库服务,但是发现一个问题,就是在不暴露端口到外网的情况下,官方的mysql镜像似乎没办法监听本地请求,但是container的内部ip从wireguard又没办法访问,遂只能将mysql服务部署成内网服务,所以需要一个方法来解决来自host的访问转发到container的路由问题。

早年曾经测试过treafik来做内网路由,但是配置略复杂,最后还是用的apache的反向代理。最后还是下决心,重新来研究一下treafik的部署。

在研究的路程中遇到了几个大坑,其实回过头来看,treafik的架构还是非常简单的,由entrypoints、routers、services组成,entrypoints定义入口,routers定义映射规则,services定义后端服务。

而通过providers提供自动配置刷新,可以直接通过监听自动热更新服务配置,这点是比apache强很多的部分。

这次使用到的providers是docker和file,docker用于自动配置services,file用于配置routers。

这样有任何变动就只需要修改file所在的配置文件就可以修改反代规则了,加上watch后修改可以实时生效。

经过实验,在使用http的Path规则后,不需要域名,直接可以通过ip+路径来进入不同的服务

这样配置后,也可以直接通过wireguard的内网ip来访问内网服务了,这样显著的减小了服务对外暴露的风险。

traefik的配置文件分成Dynamic和Static,entryPoints和providers只能在Static里设置,如果修改需要重启container。而Dynamic配置文件里配置routers和services,这样可以实现实时对routers和services配置修改的动态调整。

有一个大坑,如果traefik运行在container里,那么network_mode要设置为host,不然traefik无法在系统上创建entryPoints的端口映射。

另外如果用了ufw,还需要添加一个规则来允许wireguard访问内网端口,否则也是无法连接上内网服务,假设wireguard的网卡是wg0

另外如果不清楚哪些端口被docker开放到公网,可以用一下命令来查看docker直接透传到外网的端口,检查一下是否内网服务被错误的配置到可公网访问

 

There are no comments yet

  • Hello, guest

Powered by WordPress. Designed by WooThemes