qikqiak.com
qikqiak.com copied to clipboard
Traefik 2.0 暴露 Redis(TCP) 服务
https://www.qikqiak.com/post/expose-redis-by-traefik2/
前面我们已经提到了 Traefik2.0 已经正式发布了,Traefik2.0 已经支持了 TCP 服务的,但是 Traefik 的官方文档实在是有点混乱,特别是在 Kubernetes 下面的使用更不详细,我在业余时间已经在尝试对官方文档进行翻译,地址:https://www.qikqiak.com/traefik-book,去掉了一些多余的文档,增加一些在 Kubernetes 下面的使用案例。
这么部署还是后很大问题的,用 * 匹配所有,所有的域名只要用 6379 端口,就都能匹配上 Redis,感觉这像是能够勉强用 TCP 方式能连接上 Redis 而已。
@my-dlq 嗯,这是因为这里没有指定证书,所以用的*
,如果你指定一个固定的域名,然后指定上 TLS 证书就可以固定在一个域名上面了。
请教下题主,添加自定义entrypoint 还需要额外添加什么参数么?我按照文章写的并没有添加成功自定义entrypoint..
不需要啊,k8s 里面用hostPort
就可以了,然后需要更新下 Pod。
@cnych 不需要啊,k8s 里面用
hostPort
就可以了,然后需要更新下 Pod。
感谢题主回答我,我再去试试,也许上次没认真.........
题主好,如果我想再起一个端口是6380的redis, 是不是还要在Traefik的静态配置中增加一个redis6380的entryPoints? 以后增加tcp的服务,都需要去改traefik的静态配置么? 这个有像nginx tcp的随机端口用法吗?
@llussy 如果你SNI用的*
的话就需用用静态的方式来添加端口了,但是你可以通过配置指定的域名共用一个端口去匹配不同的Service服务。
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 在 tls 里面加上 passthrough=true
试看看
@cnych @zyuyou 在 tls 里面加上
passthrough=true
试看看
我试过了, passthrough是当请求转给backend的时候解不解密, 设置为true的话是不解密, 但是我的backend服务postgres是不需要tls加密的数据, 所以tls只是traefik路由使用的, 我是这么理解的
@zyuyou 嗯,我去测试下~
@cnych @zyuyou 嗯,我去测试下~
您好, 测试能实现TCP路由吗
我自己测试使用tcp代理后端nginx服务失败了,dashboard里看tcp路由里service所关联的pod's endpoints状态检测失败。但是在这之前我用http模式、https 代理后端的nginx是完全没问题的.
@zyuyou
@cnych @zyuyou 嗯,我去测试下~
您好, 测试能实现TCP路由吗
同问,我理解TLS应该是到traefik层面,Backend Service本身不需要TLS。但是一直都没有成功配置起来过。。。
@zyuyou
@cnych @zyuyou 嗯,我去测试下~
您好, 测试能实现TCP路由吗
同问,我理解TLS应该是到traefik层面,Backend Service本身不需要TLS。但是一直都没有成功配置起来过。。。 我也配置tcp 没有成功 ,traefik官网的tcp都是片段式说明,也没有示例,确实不方便使用。
@zyuyou
@cnych @zyuyou 嗯,我去测试下~
您好, 测试能实现TCP路由吗
同问,我理解TLS应该是到traefik层面,Backend Service本身不需要TLS。但是一直都没有成功配置起来过。。。
加我一个微信 互相交流下吧 :easonak185
Mongo 用 HostSNI 的形式测试是可以的,redis 这个用域名的确有问题,得要再测试下~
Mongo 用 HostSNI 的形式测试是可以的,redis 这个用域名的确有问题,得要再测试下~
redis-cli 5 版本不支持 tls,6.0 rc 目前支持 tls 但不支持 SNI 扩展,所以 traefik 找不到对应 tcp 路由。
update:
6 rc 版本支持 sni,但需要手动设置:--sni redis.example.com