qikqiak.com icon indicating copy to clipboard operation
qikqiak.com copied to clipboard

Traefik 2.0 暴露 Redis(TCP) 服务

Open cnych opened this issue 5 years ago • 18 comments

https://www.qikqiak.com/post/expose-redis-by-traefik2/

前面我们已经提到了 Traefik2.0 已经正式发布了,Traefik2.0 已经支持了 TCP 服务的,但是 Traefik 的官方文档实在是有点混乱,特别是在 Kubernetes 下面的使用更不详细,我在业余时间已经在尝试对官方文档进行翻译,地址:https://www.qikqiak.com/traefik-book,去掉了一些多余的文档,增加一些在 Kubernetes 下面的使用案例。

cnych avatar Oct 14 '19 07:10 cnych

这么部署还是后很大问题的,用 * 匹配所有,所有的域名只要用 6379 端口,就都能匹配上 Redis,感觉这像是能够勉强用 TCP 方式能连接上 Redis 而已。

my-dlq avatar Oct 15 '19 06:10 my-dlq

@my-dlq 嗯,这是因为这里没有指定证书,所以用的*,如果你指定一个固定的域名,然后指定上 TLS 证书就可以固定在一个域名上面了。

cnych avatar Oct 15 '19 07:10 cnych

请教下题主,添加自定义entrypoint 还需要额外添加什么参数么?我按照文章写的并没有添加成功自定义entrypoint..

luojz1 avatar Oct 28 '19 08:10 luojz1

不需要啊,k8s 里面用hostPort就可以了,然后需要更新下 Pod。

cnych avatar Oct 28 '19 08:10 cnych

@cnych 不需要啊,k8s 里面用hostPort就可以了,然后需要更新下 Pod。

感谢题主回答我,我再去试试,也许上次没认真.........

luojz1 avatar Oct 28 '19 08:10 luojz1

题主好,如果我想再起一个端口是6380的redis, 是不是还要在Traefik的静态配置中增加一个redis6380的entryPoints? 以后增加tcp的服务,都需要去改traefik的静态配置么? 这个有像nginx tcp的随机端口用法吗?

llussy avatar Nov 13 '19 02:11 llussy

@llussy 如果你SNI用的*的话就需用用静态的方式来添加端口了,但是你可以通过配置指定的域名共用一个端口去匹配不同的Service服务。

cnych avatar Nov 13 '19 05:11 cnych

SNI配置TLS给TCP路由的可以给个例子吗?尝试很多种配置方式都不行

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
  name: postgres
spec:
  tls:
    secretName: postgres-xxxxx-tls
  entryPoints:
    - tcp
  routes:
  - match: HostSNI(`postgres.xxx.com`)
    services:
    - name: postgres
      port: 5432

我大概是这样配置的, 证书是通过cert-manager生成到secret的, 但是这样配置就会直接路由到http那边去,不知道是哪里有问题

zyuyou avatar Nov 13 '19 12:11 zyuyou

@zyuyou 在 tls 里面加上 passthrough=true 试看看

cnych avatar Nov 14 '19 02:11 cnych

@cnych @zyuyou 在 tls 里面加上 passthrough=true 试看看

我试过了, passthrough是当请求转给backend的时候解不解密, 设置为true的话是不解密, 但是我的backend服务postgres是不需要tls加密的数据, 所以tls只是traefik路由使用的, 我是这么理解的

zyuyou avatar Nov 14 '19 02:11 zyuyou

@zyuyou 嗯,我去测试下~

cnych avatar Nov 14 '19 02:11 cnych

@cnych @zyuyou 嗯,我去测试下~

您好, 测试能实现TCP路由吗

zyuyou avatar Nov 19 '19 00:11 zyuyou

我自己测试使用tcp代理后端nginx服务失败了,dashboard里看tcp路由里service所关联的pod's endpoints状态检测失败。但是在这之前我用http模式、https 代理后端的nginx是完全没问题的.

boldmanQ avatar Nov 22 '19 12:11 boldmanQ

@zyuyou

@cnych @zyuyou 嗯,我去测试下~

您好, 测试能实现TCP路由吗

同问,我理解TLS应该是到traefik层面,Backend Service本身不需要TLS。但是一直都没有成功配置起来过。。。

KevinWu0904 avatar Mar 15 '20 02:03 KevinWu0904

@zyuyou

@cnych @zyuyou 嗯,我去测试下~

您好, 测试能实现TCP路由吗

同问,我理解TLS应该是到traefik层面,Backend Service本身不需要TLS。但是一直都没有成功配置起来过。。。 我也配置tcp 没有成功 ,traefik官网的tcp都是片段式说明,也没有示例,确实不方便使用。

kuaiwenwu avatar Apr 07 '20 07:04 kuaiwenwu

@zyuyou

@cnych @zyuyou 嗯,我去测试下~

您好, 测试能实现TCP路由吗

同问,我理解TLS应该是到traefik层面,Backend Service本身不需要TLS。但是一直都没有成功配置起来过。。。

加我一个微信 互相交流下吧 :easonak185

kuaiwenwu avatar Apr 07 '20 07:04 kuaiwenwu

Mongo 用 HostSNI 的形式测试是可以的,redis 这个用域名的确有问题,得要再测试下~

cnych avatar Apr 22 '20 03:04 cnych

Mongo 用 HostSNI 的形式测试是可以的,redis 这个用域名的确有问题,得要再测试下~

redis-cli 5 版本不支持 tls,6.0 rc 目前支持 tls 但不支持 SNI 扩展,所以 traefik 找不到对应 tcp 路由。

update: 6 rc 版本支持 sni,但需要手动设置:--sni redis.example.com

cnbailian avatar Apr 24 '20 08:04 cnbailian