文章转载自: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)

# redis.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: test
spec:
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:6.2.6
ports:
- containerPort: 6379
protocol: TCP ---
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: test
spec:
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)

# cat ingressroute-redis.yaml

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: redis
namespace: test
spec:
entryPoints:
- redis
routes:
- kind: Rule
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 是为了能够通过节点的端口访问到服务

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

修改对应的yaml文件

通过kubepi进行修改





创建上面的 IngressRouteTCP 对象:

$ kubectl apply -f ingressroute-redis.yaml

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





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

$ redis-cli -h www.daniel.com -p 6379
www.daniel.comm:6379> ping
PONG
www.daniel.com:6379> set hello world
OK
www.daniel.com:6379> get hello
"world"
www.daniel.com:6379>

也能使用客户端进行连接

最新文章

  1. Alpha版本冲刺总结——曙光初现
  2. Sqlite注入测试
  3. Linux命令学习-mpstat
  4. jquery 父页面 子页面 同级页面 调用
  5. CentOS中实现Nginx负载均衡和反向代理
  6. js刷新页面方法
  7. 验证合法的url
  8. web开发中前后端传值
  9. Workflow相关表简单分析
  10. const成员函数和mutable关键字
  11. Spark RDD Transformation 简单用例(一)
  12. C和C指针小记(五)-指针类型
  13. 32.js 判断当前页面是否被浏览
  14. Qt & VS2013 报错:There's no Qt version assigned to this project for platform Win32
  15. 【转】[总结]vue开发常见知识点及问题资料整理(持续更新)
  16. BBbacktrace installation
  17. codevs & vijos 爱在心中 - Tarjan
  18. 浅谈DNS域名解析
  19. Linux新内核:提升系统性能 --Linux运维的博客
  20. angular学习笔记(十六) -- 过滤器(1)

热门文章

  1. 在eclipse配置javafx
  2. rust实战系列-base64编码
  3. 启动docker报错Failed to listen on Docker Socket for the API.
  4. Vue中关于this指向的问题
  5. websocket、socket、http对比
  6. 2019国家集训队论文《整点计数》命题报告 学习笔记/Min25
  7. 关于微信豆苹果(IOS)用户1比10充值方法
  8. 学习与尝试 --> 事件风暴
  9. 谈谈你对Promise的理解
  10. ArkUI 自定义组件