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

也能使用客户端进行连接

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. 【cartogarpher_ros】二: 官方Demo的介绍与演示

    上一节我们介绍了在linux中快速安装集成ros环境的cartographer. 本节我们会来跑一些官方demo,用于测试cartographer是否正确安装,顺便看看cartographer的建图与 ...

  2. mesi--cpu内存一致性协议

    目录 cpu缓存一致性问题 mesi协议 mesi协议4种状态,及状态转换 模拟工具演示 cpu缓存一致性问题 一个服务器中有多个核,每个核中有多个cpu,每个cpu有多个线程.缓存最少分为3级,1级 ...

  3. SpringBoot接口 - 如何优雅的写Controller并统一异常处理?

    SpringBoot接口如何对异常进行统一封装,并统一返回呢?以上文的参数校验为例,如何优雅的将参数校验的错误信息统一处理并封装返回呢?@pdai 为什么要优雅的处理异常 如果我们不统一的处理异常,经 ...

  4. 网络营销谁在行?PHP小哥打个样

    PHP -ゞ 阿白同学的学习笔记 PHP学习笔记 - 01 - web2.0 - 网络营销 @ 目录 一. 前言 二. 开始(借助菜鸟教程平台练习) 1. Hello World -- 第一个案例 2 ...

  5. Tomcat介绍和配置使用

    目录 JavaWeb 的概念 什么是 JavaWeb? 什么是请求? 什么是响应? 请求和响应的关系 Web 资源的分类 常用的 Web 服务器 Tomcat 服务器和 Servlet 版本的对应关系 ...

  6. 2022-07-11 第六组 润土 JavaScript01学习笔记

    1.JS的数据类型: 数字 字符串 布尔型 空(null) unefined(未定义) 2.定义变量 var let(不可重复) const(常量不可更改) 3.复杂的数据类型: 数组:一个变量对应多 ...

  7. Scala学习第一天(Hello world)

    一.Scala介绍 1. Scala概念 Scala 是 Scalable Language 的简写,是一门多范式的编程语言 联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于 ...

  8. 2506-nginx的配置-域名分发与负载均衡(只有配置无原理)

    nginx的安装 Windows7:官网下载,是一个压缩包,运行解压缩后的exe文件即启动了nginx,需注意的是,Windows(win7)的80端口默认被微软的IIS占用,需改成别的端口,例如80 ...

  9. Odoo14 一些好用的开源的模块

    # odoo14中一些好用的开源的模块 1.intero_reload_form 刷新按钮(页面数据刷新,而不是按F5刷新整个页面) 2.ms_magic_button 弹框下拉选项 3.sessio ...

  10. Spring源码 11 IOC refresh方法6

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...