traefik单独端口转发

2020-09-29 • 预计阅读时间 2 分钟

为什么要这么做

traefik支持两种的端口转发,一种是基于backend的端口转发,如docker或者k8s这样的。另外一种是直接针对某个端口做转发负载均衡。这种在某些情况下也是需要的,如我遇到了个容器中安装的gitea如何暴露ssh端口的问题。这个其实有挺多的实现方式的,通过防火墙,nginx这些。

之前都是通过nginxstream来做的。这样的好处是配置文件都在一处了。换成traefik之后,这个属于一个重要的指标了。还好也是支持的,只是官方的文档写的太绕了

怎么做

为了实现这个需求,需要明白traefik的配置是分为两种的,静态和动态。这类端口转发是放在静态配置中来实现的。动态配置文件需要在静态配置文件中指定一个文件夹。程序启动以后就会扫描该文件夹下面的配置,如果发生修改也能够动态的加载。

下面就是将/etc/traefik/config下面的文件做为动态配置。

providers:
  file:
    directory: /etc/traefik/config
    watch: true

然后在/etc/traefik/config下创建一个tcp.yaml的配置文件。在其中增加如下的内容

tcp:
  routers:
    Router-1:
      entryPoints:
        - "other"
      rule: "HostSNI(`*`)"
      service: "tcps1"
  services:
    tcps1:
      loadBalancer:
        servers:
        - address: "10.0.0.2:x0xx"
        - address: "10.0.0.2:x022"

这样就实现了TCP的端口转发、具体使用的端口是在entryPoints里面定义,在动态配置里面指定使用那个就可以了。

devtraefik

wentao

写点代码,解决点问题。

Nginx搭配RTMP

从nginx转向traefik