一、阿里云安装K3S
1 | curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh - |
1.1 k3s自带traefik
1 | [root@hmk /var/lib/rancher/k3s/server/manifests ]# ll |
二、内网穿透服务端frps
2.1 创建frp配置的ConfigMap
1 | [root@hmk /etc/frp ]# cat frps.toml |
1 | mkdir -p /etc/frp/ |
2.2 frps deploy
1 | [root@hmk /etc/frp ]# cat deploy-frp.yaml |
三、安装Helm4
3.1 下载Helm二进制程序
1 | root@hmk:~# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4 | bash |
四、实现证书自签
4.1 创建用于证书续签的AK.SK 创建secret
1 | kubectl create secret generic hmk-alidns-secrets -n kube-system \ |
4.2 traefik配置
1 | [root@hmk /etc/frp ]# cat traefik-config.yaml |
4.3 traefik 路由规则
1 | [root@hmk /etc/frp ]# cat frps-bindport.yaml |
路由规则
1 | [root@hmk /etc/frp ]# cat frps-casaos.yaml |
五、frpc配置
1 | root@CasaOS:~/frp_0.67.0_linux_amd64# cat frpc.toml |
访问,通过traefik svc的端口对外服务
1 | [root@hmk /etc/frp ]# kubectl get svc -A |
外部 80/443
↓
┌──────────────────────┐
│ traefik Service │
│ (LoadBalancer) │
│ 10.46.193.53 │
│ 172.16.109.44 │
└──────────────────────┘
↓ ↓
port:80 ↓ port:443
target:web ↓ target:websecure
↓ ↓
┌──────────────────────┐
│ Traefik Pod │
│ :8000 (web) │
│ :8443 (websecure) │
└──────────────────────┘
↓
IngressRoute 匹配
Host(`frp.hmkcloud.cn`)
↓
┌──────────────────────┐
│ frps Service │
│ :10080 │
└──────────────────────┘
↓
┌──────────────────────┐
│ frps Pod │
│ :10080 │
└──────────────────────┘
- ✅ Service 做端口转换:外部 80/443 → Pod 8000/8443
- ✅ Traefik 监听这些端口:web(8000) 和 websecure(8443)
- ✅ IngressRoute 处理请求:根据域名路由到后端服务
六、traefik-dashboard 对外访问
1 | [root@hmk ~ ]# cat traefik-dashboard.yaml |
api@internal 的本质
api@internal 是一个虚拟服务,它不是真实的 Kubernetes Service,而是 Traefik 内部暴露的一个特殊端点。
它提供了什么?
当你访问 api@internal 时,可以获取:
- Dashboard UI:
/dashboard/ - Raw Data API:
/api/rawdata- 所有路由配置的 JSON 数据 - HTTP Metrics:
/api/http/metrics- HTTP 指标 - Overview API:
/api/overview- 概览信息 - EntryPoints 信息:
/api/entrypoints
什么时候使用 api@internal?
✅ 必须使用的场景
1. 访问 Traefik Dashboard
1 | services: |
这是官方唯一推荐的 Dashboard 访问方式(从 Traefik v2.5+ 开始)。
2. 需要查看 Traefik 运行状态
1 | # 获取所有路由配置 |
3. 集成 Prometheus 监控(非 metrics 端点)
虽然 Traefik 有独立的 metrics 端点,但有些高级指标需要通过 api@internal 获取。
4. 调试和排查问题
1 | # 临时开启调试端点 |
❌ 不应该使用的场景
1. 转发业务流量
1 | # 错误示例 - 业务应用不应该用 api@internal |
2. 访问外部服务
1 | # 错误示例 |
3. TCP/UDP 路由
1 | # 错误示例 - api@internal 不支持 TCP |
kind: TraefikService 的作用
kind: TraefikService 告诉 Traefik:这个 service 名称不是 Kubernetes Service,而是 Traefik 内部定义的服务类型。
TraefikService 的其他类型
除了 api@internal,还有:
1. Weighted Round Robin
1 | apiVersion: traefik.io/v1alpha1 |
在 IngressRoute 中使用:
1 | services: |
2. Mirroring
1 | apiVersion: traefik.io/v1alpha1 |
实际对比示例
普通 Kubernetes Service(业务流量)
1 | # 部署你的应用 |
Traefik 内部服务(管理流量)
1 | # 访问 Dashboard |
核心规则总结
| Service 类型 | 何时使用 | 是否需要 kind: TraefikService |
|---|---|---|
| 普通 K8s Service | 业务应用、数据库、API 等 | ❌ 不需要(或写 kind: Service) |
api@internal |
Dashboard、管理 API、调试 | ✅ 必须 |
| 自定义 TraefikService | 权重路由、流量镜像 | ✅ 必须 |
快速判断方法
问自己一个问题:这个服务是 Traefik 自身的功能,还是我的业务应用?
- 如果是业务应用 → 使用普通 Service
- 如果是 Traefik Dashboard/API → 使用
api@internal+kind: TraefikService - 如果是其他特殊路由(权重、镜像)→ 先定义
TraefikService,再用kind: TraefikService引用
希望这个解释能帮你彻底理解 api@internal 和 TraefikService 的使用场景!