printf去掉多余的0_Traefik 2.0 暴露 Redis(TCP) 服务

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

本文是来演示如何在 Kubernetes 下面通过 Traefik 暴露一个 TCP 服务的,这里我们以 Redis 为例。首先需要保证 Traefik 2.0 已经安装到了 Kubernetes 集群之中,可以参考之前我们提供的安装资源清单 https://github.com/cnych/kubeapp。

部署 Redis

为了演示方便,我们这里只部署单节点的 Redis,对于 Redis 集群模式并不是我们这里的重点,下面是我们部署使用的资源清单文件:(redis.yaml)

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: redisspec: template: metadata: labels: app: redis spec: containers: - name: redis image: redis:3.2.11 ports: - containerPort: 6379 protocol: TCP---apiVersion: v1kind: Servicemetadata: name: redisspec: ports: - port: 6379 targetPort: 6379 selector: app: redis

直接创建即可:

$ kubectl apply -f redis.yaml

暴露 TCP 服务

由于 Traefik 中使用 TCP 路由配置需要 SNI,而 SNI 有是依赖 TLS 的,所以我们需要配置证书才行,但是如果没有证书的话,我们可以使用通配符 * 进行配置,我们这里创建一个 IngressRouteTCP 类型的 CRD 对象(前面我们就已经安装了对应的 CRD 资源):(ingressroute-redis.yaml)

apiVersion: traefik.containo.us/v1alpha1kind: IngressRouteTCPmetadata: name: redisspec: entryPoints: - redis routes: - match: HostSNI(`*`) services: - name: redis port: 6379

要注意的是这里的entryPoints部分,是根据我们启动的 Traefik 的静态配置中的 entryPoints 来决定的,比如我们可以自己添加一个用于 Redis 的专门的入口点:

containers:- image: traefik:v2.0 name: traefik-ingress-lb ports: - name: web containerPort: 80 hostPort: 80 - name: websecure containerPort: 443 hostPort: 443 - name: redis containerPort: 6379 hostPort: 6379 - name: admin containerPort: 8080 args: - --entrypoints.web.Address=:80 - --entrypoints.websecure.Address=:443 - --entrypoints.redis.Address=:6379 - --api.insecure=true - --providers.kubernetescrd - --api - --api.dashboard=true - --accesslog

这里给入口点添加 hostPort 是为了能够通过节点的端口访问到服务,关于 entryPoints 入口点的更多信息,可以查看文档 entrypoints 了解更多信息。

然后直接创建上面的 IngressRouteTCP 对象:

$ kubectl apply -f ingressroute-redis.yaml

创建完成后,同样我们可以去 Traefik 的 Dashboard 页面上查看是否生效:

b071e4eb473bd42c2cf5281d4857dea7.png

traefik redis service

然后我们配置一个域名解析到 Traefik 所在的节点,然后通过 6379 端口来连接 Redis 服务:

$ redis-cli -h redis.youdianzhishi.com -p 6379redis.youdianzhishi.com:6379> pingPONGredis.youdianzhishi.com:6379> set hello worldOKredis.youdianzhishi.com:6379> get hello"world"redis.youdianzhishi.com:6379>

到这里我们就完成了将 Redis(TCP)服务暴露给外部用户了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值