Chemmy's Blog

chengming0916@outlook.com

DEVICE

字段 类型 说明
ID int 自增ID
SN varchar(20) 设备唯一编码
NAME varchar(20) 设备名称
MARKED BOOL 设备是否标记
IP varchar(15) 设备IP地址
LOCATION varchar(200) 设备安装位置

DEVICE_ATTR

字段 类型 说明
ID int 自增ID
KEY varchar(20) 属性名
CHANNEL
VALUE int 属性值
DEVICE_ID int 属性所属设备ID
SCALE int 缩放倍率,当数值有小数时可用倍率缩放
UNIT varchar(20) 数值单位

DEVICE_STATE

字段 类型 说明
ID int 自增ID
DEVICE_ID int 属性所属设备ID
PORT int 设备接收端口
VALUE int 数值
UNIT varchar(20) 数值单位

DEVICE_LINKAGE

字段 类型 说明
ID int 自增ID
CAT
DEVICE_ID int 属性所属设备ID
PORT int 设备接收端口
TARGET 联动目标
TRIGGER 联动触发器
TRIGGER_ALARM 联动触发告警
ACTION 联动动作
PARAM 参数

DEVICE_ALARM

字段 类型 说明
ID 自增ID
APP_ID 固件ID
CAT
REPORTER
PORT 端口
CODE 编码
MSG 消息
ALARM_TYPE 告警类型
SEVERITY
STATUS 状态

Traefik 作为一款云原生反向代理与负载均衡工具,是 K3s 集群默认集成的 Ingress 控制器。凭借动态配置、服务自动发现等核心特性,它无需重启服务即可实时更新路由规则,成为 Kubernetes 生态中轻量级 Ingress 方案的首选,尤其适配 K3s 轻量化部署的核心需求。本文将详细拆解 K3s 中 Traefik 的完整配置流程,涵盖 Dashboard 启用、Service 与路由规则配置、HTTP/HTTPS 访问实现及 TCP/UDP 服务代理等核心操作,助力运维人员快速上手、高效落地。

一、启用 Traefik Dashboard

K3s 集群(版本 ≥1.21)默认集成 Traefik,但未启用其 Dashboard 功能。需注意的是,直接修改 /var/lib/rancher/k3s/server/manifests/traefik.yaml 配置文件,会在 K3s 重启后被系统自动覆盖,因此推荐通过 HelmChartConfig 自定义配置的方式,安全稳定地启用 Dashboard。

1. 创建 HelmChartConfig 配置文件

/var/lib/rancher/k3s/server/manifests 目录下创建 traefik-config.yaml 文件,写入以下配置(直接复制执行即可生效):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat >> /var/lib/rancher/k3s/server/manifests/traefik-config.yaml << EOF
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: traefik
namespace: kube-system
spec:
valuesContent: |-
dashboard:
enabled: true
ports:
traefik:
expose: true
logs:
access:
enabled: true
EOF

2. (K8s 通用)通过 Helm 升级配置

若部署环境为标准 Kubernetes 集群(非 K3s),可直接修改 traefik-values.yaml 配置文件后,执行以下 Helm 命令升级 Traefik 配置,启用 Dashboard:

1
2
helm upgrade traefik traefik/traefik \
--namespace traefik -f traefik-values.yaml

二、配置 Service 及路由规则

成功启用 Dashboard 后,需进一步配置 Service 暴露端口,并通过 Traefik 专属的 IngressRoute 自定义路由规则,实现 Dashboard 的外部访问。相比传统 Ingress,IngressRoute作为 Traefik 的 CRD 资源,提供了更灵活的路由配置能力和更清晰的结构层次。

1. 编写 Service 与 IngressRoute 配置文件

创建 traefik-dashboard.yaml 文件,整合 Service 端口暴露与 IngressRoute 路由规则,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
cat >> traefik-dashboard.yaml << EOF
apiVersion: v1
kind: Service
metadata:
name: traefik
namespace: kube-system
spec:
allocateLoadBalancerNodePorts: true
ports:
- name: web
nodePort: 80
port: 80
protocol: TCP
targetPort: web
- name: websecure
nodePort: 443
port: 443
protocol: TCP
targetPort: websecure
selector:
app.kubernetes.io/instance: traefik-kube-system
app.kubernetes.io/name: traefik
type: LoadBalancer

---

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard-web
spec:
entryPoints:
- web
routes:
- kind: Rule
match: PathPrefix(`/dashboard`) || PathPrefix(`/api`)
services:
- name: api@internal
kind: TraefikService

---

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard-websecure
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: PathPrefix(`/dashboard`) || PathPrefix(`/api`)
services:
- name: api@internal
kind: TraefikService
tls:
secretName: traefik-dashboard-tls
EOF

2. 应用配置

执行以下命令,将配置应用到 K3s 集群,使 Service 与路由规则生效:

1
kubectl apply -f traefik-dashboard.yaml

注意:访问 Dashboard 时,URL 末尾必须添加 /(例如http://<节点IP>/dashboard/),否则会出现 page not found 错误,这是 Traefik Dashboard 路由匹配的常见注意点。

三、配置 IngressRoute 实现服务代理

Traefik 的核心优势的在于通过 IngressRoute 自定义路由规则,全面支持 HTTP、HTTPS、TCP/UDP 等多种协议,可灵活适配不同类型服务的暴露需求。以下将以 whoami 测试服务为例,详细演示各类路由的配置方法,帮助快速掌握 IngressRoute 的使用逻辑。

1. 搭建测试环境

首先创建 whoami 部署和对应的 Service,作为路由代理的测试目标,执行以下命令:

1
2
kubectl create deploy whoami --image=traefik/whoami --replicas=2
kubectl expose deploy whoami --port=80

2. HTTP 路由配置

创建 whoami-no-tls-ingress-route.yaml 文件,定义 HTTP 协议的路由规则,实现通过指定路径访问 whoami 服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#whoami-no-tls-ingress-route.yaml 
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: whoami-ingress-web
namespace: default
spec:
entryPoints:
- web
routes:
- match: Host(`192.168.0.2`) && PathPrefix(`/notls`)
kind: Rule
services:
- name: whoami
port: 80

3. HTTPS 路由配置

HTTPS 路由需先配置 TLS 证书(可使用自签名证书用于测试,生产环境推荐通过 cert-manager 实现证书自动化管理),再通过 IngressRoute 绑定证书,实现加密访问。Traefik 结合 Let’s Encrypt 可进一步实现 TLS 证书的自动签发与续期,简化 HTTPS 配置流程。

(1)生成自签名证书

执行以下命令生成自签名 TLS 证书,并将其存储为 Kubernetes Secret,供 Traefik 调用(关于自签名证书的详细使用场景、安全注意事项及生产环境替代方案,将在后续文章中详细讲解):

1
2
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=domain.example.com"
kubectl create secret tls whoami-tls --cert=tls.crt --key=tls.key

(2)编写 HTTPS 路由配置

创建 whoami-tls-ingress-route.yaml 文件,配置 HTTPS 路由规则,绑定上述生成的 TLS 证书:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# whoami-tls-ingress-route.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: whoami-ingress-websecure
namespace: default
spec:
entryPoints:
- websecure
routes:
- match: Host(`192.168.0.2`) && PathPrefix(`/tls`)
kind: Rule
services:
- name: whoami
port: 80
tls:
secretName: whoami-tls

4. TCP/UDP 路由配置

Traefik 默认仅开放 traefik(9000)web(80)websecure(443)metrics(9100) 四个入口点,若需代理 MySQL、Redis 等 TCP/UDP 类型服务,需通过 IngressRouteTCP(TCP 服务)或 IngressRouteUDP(UDP 服务)自定义路由规则,这也是 Traefik 相比传统 Ingress 的核心优势之一,可实现全协议流量代理。

以 Redis(TCP 服务)为例,其 Traefik 路由配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP #IngressRouteUDP 适用于UDP服务
metadata:
name: redis
namespace: devops
spec:
entryPoints:
- redis
routes:
- match: HostSNI(`*`)
services:
- name: redis
port: 6379

TCP 与 HTTP 路由核心差异:

  1. TCP 路由的 match 字段需使用 HostSNI(`*`),而 HTTP 路由可直接通过 Host 匹配域名或 IP;

  2. TCP 路由仅支持代理 TCP 协议服务,无法处理 HTTP 请求,二者路由规则不可混用;

  3. 若 TCP 和 HTTP 路由监听同一入口点,TCP 路由优先级更高,未匹配到 TCP 规则时,才会触发 HTTP 路由匹配。

四、常见问题与参考资料

1. Dashboard 无法访问排查

若配置完成后,Traefik Dashboard 无法正常访问,可参考以下权威文档定位并解决问题,覆盖配置错误、端口暴露、路由匹配等常见排查场景:

2. 扩展参考

为帮助大家深入掌握 Traefik 在 K3s 中的应用,整理以下扩展参考资料,涵盖进阶配置、实战踩坑、证书管理等内容:

总结

本文基于 K3s 内置的 Traefik 2.x 版本,从 Dashboard 启用、基础路由配置,到 HTTPS 证书部署、TCP/UDP 服务代理,全面覆盖了 Traefik 在 K3s 环境中的核心使用场景。其中,通过 HelmChartConfig 自定义配置,可有效避免 K3s 重启后配置被覆盖的问题,保障配置的稳定性;而 IngressRoute 灵活的路由规则,能够满足不同协议、不同场景的服务暴露需求,充分发挥 Traefik 动态配置、自动发现的优势。

实际生产环境中,可结合 cert-manager 实现 TLS 证书的自动化签发与续期,进一步简化配置流程、提升服务安全性;同时,可借助 Traefik 的中间件功能,实现路径重写、请求转发、流量控制等进阶操作,构建更贴合企业需求的云原生流量入口架构。

0%