Traefik 2.0 暴露 Redis(TCP) 服务
本文是来演示如何在 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) 服务的更多相关文章
- Traefik 2.0 tcp 路由试用
对于tcp 的路由是基于sni (需要tls)但是可以通过统配(*) 解决不试用tls的,当然也可以让Traefik 自动生成tls 证书 以下是测试http 以及mysql 的tcp 路由配置(de ...
- redis-5.0.3 redis.conf详解
# Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...
- C#高性能TCP服务的多种实现方式
哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...
- C#高性能TCP服务
C#高性能TCP服务 哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!& ...
- C# 高性能 TCP 服务的多种实现方式
哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C# 编写 TCP 服务的花样姿势!>. 本篇文 ...
- Redis 缓存服务配置与使用
缓存服务器Couchbase另外一种选择Redis documentation http://redis.io/documentation http://redis.cn/documentation. ...
- Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转
原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过 ...
- 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布
作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...
- PHP Swoole-Demo TCP服务端简单实现
tcp 服务端简单demo与client . <?php /** * author : rookiejin <mrjnamei@gmail.com> * createTime : 2 ...
随机推荐
- JSON: JavaScript Object Notation
JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式.1) JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言 ...
- C++ delete后的指针在不同编译器下的状态差异
今天看到小伙伴分享的一个问题,小伙伴用的MSVC2019编译器,在对delete后的指针进行取值操作时触发了访问冲突. #include<iostream> using namespace ...
- springboot connecting to :mongodb://127.0..0.1:27017/test authentication failed
账号的权限不够,可能是insert进去的脚本的角色有问题 use admin db.createUser({user:'账号',pwd:'密码',roles:[{role:'userAdminAnyD ...
- 4 zookeeper集群和基本命令
4 zookeeper集群和基本命令 集群思路:先搞定一台服务器,再克隆出两台,形成集群! 1 安装zookeeper 我们的zookeeper是安装在/opt目录下 2 配置服务器编号 在/opt/ ...
- 5-18 Nacos配置中心 | RestTemplate
配置中心 什么是配置中心 所谓配置中心:将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具 我们可以将部分yml文件的内容保存在配置中心 一个微服务项目有很多子 ...
- Java学习day09—-封装和继承
封装 1.封装 1.1 封装的概念和实现 封装: 属性私有:将属性使用private修饰,表示此属性只能在本类中访问,不让外部直接访问 方法公开:针对每一个属性编写一对公开的方法 get set 分别 ...
- 循环数组%操作下的一些解释(对于4.4UVA133的一些解释)
1.循环数组一般不推荐通过建立相同的数组不断叠加来实现,虽然理论上是可行的,但是会浪费极大的空间,特别是对于大数据的情况下,程序一般会马上挂掉 2.循环数组的结构表示中的一种常用形式就是通过取余操作来 ...
- Menci的序列
题目大意 一个长度为n的字符串s,只包含+和×. 选出一个子序列,然后你有一个ret,初始为0,按顺序扫你选出的这个子序列. 如果碰到的是+,ret+1,否则ret*2. 最大化ret%2^k. 首先 ...
- Go语言基础五:引用类型-切片和映射
切片 Go的数组长度不可以改变,在某些特定的场景中就不太适用了.对于这种情况Go语言提供了一种由数组建立的.更加灵活方便且功能强大的包装(Wapper),也就是切片.与数组相比切片的长度不是固定的,可 ...
- 论文解读(GSAT)《Interpretable and Generalizable Graph Learning via Stochastic Attention Mechanism》
论文信息 论文标题:Interpretable and Generalizable Graph Learning via Stochastic Attention Mechanism论文作者:Siqi ...