文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484452&idx=1&sn=0a17b907b4b214b498eb99bacfefec0d&chksm=fdb90b39cace822fdd48a8e9499ccd53d4c53a11a464ad0be63235176e509342da0d5ec48a22&scene=178&cur_album_id=1319287026209947648#rd

本文是来演示如何在 Kubernetes 下面通过 Traefik 暴露一个 TCP 服务的,这里我们以 Redis 为例。

UDP的服务看这篇文章:https://www.cnblogs.com/sanduzxcvbnm/p/15749641.html

或者这篇:https://www.cnblogs.com/sanduzxcvbnm/p/15749677.html

参考转载的文章内容经过实践操作

k8s版本:1.20.12

traefik版本:2.4.8

部署 Redis

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

  1. # redis.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: redis
  6. namespace: test
  7. spec:
  8. selector:
  9. matchLabels:
  10. app: redis
  11. template:
  12. metadata:
  13. labels:
  14. app: redis
  15. spec:
  16. containers:
  17. - name: redis
  18. image: redis:6.2.6
  19. ports:
  20. - containerPort: 6379
  21. protocol: TCP
  22. ---
  23. apiVersion: v1
  24. kind: Service
  25. metadata:
  26. name: redis
  27. namespace: test
  28. spec:
  29. ports:
  30. - port: 6379
  31. targetPort: 6379
  32. selector:
  33. app: redis

直接创建即可:

  1. $ kubectl apply -f redis.yaml

暴露 TCP 服务

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

  1. # cat ingressroute-redis.yaml
  2. apiVersion: traefik.containo.us/v1alpha1
  3. kind: IngressRouteTCP
  4. metadata:
  5. name: redis
  6. namespace: test
  7. spec:
  8. entryPoints:
  9. - redis
  10. routes:
  11. - kind: Rule
  12. match: HostSNI(`*`)
  13. services:
  14. - name: redis
  15. port: 6379

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

  1. # 这个文档内容做参考,不实际执行
  2. containers:
  3. - image: traefik:v2.0
  4. name: traefik-ingress-lb
  5. ports:
  6. - name: web
  7. containerPort: 80
  8. hostPort: 80
  9. - name: websecure
  10. containerPort: 443
  11. hostPort: 443
  12. # 如下三行是新增
  13. - name: redis
  14. containerPort: 6379
  15. hostPort: 6379
  16. - name: admin
  17. containerPort: 8080
  18. args:
  19. - --entrypoints.web.Address=:80
  20. - --entrypoints.websecure.Address=:443
  21. - --entrypoints.redis.Address=:6379 # 新增
  22. - --api.insecure=true
  23. - --providers.kubernetescrd
  24. - --api
  25. - --api.dashboard=true
  26. - --accesslog

这里给入口点添加 hostPort 是为了能够通过节点的端口访问到服务

我这里安装的traefik是使用kubeoperator安装k8s集群时选择的,对照上面的文件,修改步骤有两种,第一种是修改对应的yaml文件,第二种是通过kubepi进行修改

修改对应的yaml文件

通过kubepi进行修改





创建上面的 IngressRouteTCP 对象:

  1. $ kubectl apply -f ingressroute-redis.yaml

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





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

  1. $ redis-cli -h www.daniel.com -p 6379
  2. www.daniel.comm:6379> ping
  3. PONG
  4. www.daniel.com:6379> set hello world
  5. OK
  6. www.daniel.com:6379> get hello
  7. "world"
  8. www.daniel.com:6379>

也能使用客户端进行连接

Traefik 2.0 暴露 Redis(TCP) 服务的更多相关文章

  1. Traefik 2.0 tcp 路由试用

    对于tcp 的路由是基于sni (需要tls)但是可以通过统配(*) 解决不试用tls的,当然也可以让Traefik 自动生成tls 证书 以下是测试http 以及mysql 的tcp 路由配置(de ...

  2. redis-5.0.3 redis.conf详解

    # Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...

  3. C#高性能TCP服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...

  4. C#高性能TCP服务

    C#高性能TCP服务 哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!& ...

  5. C# 高性能 TCP 服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C# 编写 TCP 服务的花样姿势!>. 本篇文 ...

  6. Redis 缓存服务配置与使用

    缓存服务器Couchbase另外一种选择Redis documentation http://redis.io/documentation http://redis.cn/documentation. ...

  7. Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转

    原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过 ...

  8. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布

    作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...

  9. PHP Swoole-Demo TCP服务端简单实现

    tcp 服务端简单demo与client . <?php /** * author : rookiejin <mrjnamei@gmail.com> * createTime : 2 ...

随机推荐

  1. centos7 yum error yum doesn't have enough cached data

    1.vi /etc/resolv.conf,添加下面一行 nameserver 114.114.114.114 修改完成后service network restart进行重启,试一下yum upda ...

  2. 简单状压dp的思考 - 最大独立集问题和最大团问题 - 贰

    接着上文 题目链接:最大独立集问题 上次说到,一种用状压DP解决任意无向图最大团问题(MCP)的方程是: 注:此处popcountmax代表按照二进制位下1的个数作为关键字比较,即选择二进制位下1的个 ...

  3. 浏览器中的原生base64方法

    在web开发中,经常涉及到对文本.文件等进行base64编码处理,在之前的开发中,使用js-base64来进行处理,但其实浏览器已经原生包含了处理方法.性能更好,兼容性也更高. atob() - AS ...

  4. 从编译器对指令集的要求看API设计原则

    摘要:最近看<计算机体系结构:量化研究方法(第五版)>,发现指令集设计中的一些原则,对API设计也同样适用,给大家分享一下. 本文中的所有内容来自工作和学习过程中的心得整理,如需转载请注明 ...

  5. 请问为啥计算器16进制FFFFFFFFFFFF时10进制是-1?

    请问为啥计算器16进制FFFFFFFFFFFF时10进制是-1?

  6. RabbitMQ细说之开篇

    前言 关于消息中间件的应用场景,小伙伴们应该都耳熟能详了吧,比如经常提到的削峰填谷.分布式事务.异步业务处理.大数据分析等等,分布式消息队列成为其中比较关键的桥梁,也就意味着小伙伴们得掌握相关技能:当 ...

  7. 图的存储结构大赏------数据结构C语言(图)

    图的存储结构大赏------数据结构C语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...

  8. 万答#19,MySQL可以禁用MyISAM引擎吗?

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MyISAM的适用场景越来越少了. 随着MySQL 8.0的推出,系统表已经全面采用InnoDB引擎,不再需要MyISAM ...

  9. (防坑)Alphafold 非docker 安装指南

    本指南适用于Linux系统.Alphafold官方也强调尽量使用Linux系统!官方提供了docker版安装步骤. Alphafold简介: 强大的蛋白质结构预测. 开源地址:https://gith ...

  10. RocketMQ保姆级教程

    大家好,我是三友~~ 上周花了一点时间从头到尾.从无到有地搭建了一套RocketMQ的环境,觉得还挺easy的,所以就写篇文章分享给大家. 整篇文章可以大致分为三个部分,第一部分属于一些核心概念和工作 ...