Ingress 与域名路由体系
本文是「域名部署实战系列」的总览,说明 *.ljdou.cn 所有域名如何统一接入、路由与暴露,以及各组件之间的职责划分。
背景
ljdou.cn 体系下有多个服务,各自需要独立的域名入口:
| 域名 | 用途 | 后端形态 |
|---|---|---|
ljdou.cn / www.ljdou.cn | 个人主页 | Docker 容器(Nginx + Vue) |
api.ljdou.cn | 后端 API | Docker 容器(Go/Gin) |
docs.ljdou.cn | 技术文档站 | Docker 容器(Nginx + VitePress) |
airflow.ljdou.cn | Airflow 调度平台 | K3s Deployment |
bt.ljdou.cn | 宝塔面板 | 宿主机进程 |
如果每个服务各自监听公网端口,会导致端口碎片化、证书管理混乱。因此统一由 Traefik 作为唯一公网入口。
整体架构
Internet
│
*.ljdou.cn
│
▼
┌──────────────┐
│ Traefik │ ← 唯一公网入口
│ :80/:443 │
└──────┬───────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
Ingress IngressRoute Middleware
│ │ │
└────────────────┼────────────────┘
│
▼
K8s Service
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
Pod Docker 容器 宿主机进程组件清单
| 组件 | 角色 | 说明 |
|---|---|---|
| Traefik | 统一入口 | K3s 内置 Ingress Controller,监听 80/443 |
| K3s | 编排平台 | 单节点集群,承载 Traefik、Airflow 等 |
| Docker | 容器运行时 | 承载 ljdou-home、docs 等服务 |
| cert-manager | 证书管理 | Let's Encrypt 自动申请与续期 |
| 宝塔面板 | 服务器运维 | 通过 bt.ljdou.cn 经 Traefik 访问 |
核心原则
- 所有公网域名统一进入 Traefik,不再各自监听公网端口
- 普通服务使用标准 Ingress,高级需求(特殊 Middleware、复杂 TLS)才用 IngressRoute
- TLS 统一交给 cert-manager,不手工维护证书
- Docker + Endpoints 只是过渡方案,新应用优先部署到 K3s
- 公网只开放 80 / 443 / 122,业务端口一律绑定
127.0.0.1
统一接入流程
新增 xxx.ljdou.cn 的标准步骤:
1. DNS 解析 → xxx.ljdou.cn 指向服务器公网 IP
2. 部署后端 → K8s Deployment / Docker 容器 / 宿主机进程
3. 创建 Service → 暴露后端端口
4. 创建 Ingress → 绑定域名 + 路由规则
5. 配置 TLS → cert-manager 注解自动签发证书
6. 验证 → HTTP 301 跳转 HTTPS,证书有效故障排查路径
按数据流方向逐层排查:
DNS → Traefik → Ingress/IngressRoute → Service → Endpoint → 后端| 层级 | 检查命令 |
|---|---|
| DNS | dig +short xxx.ljdou.cn |
| 路由规则 | kubectl get ingress,ingressroute -A |
| Service | kubectl get svc -A |
| Endpoint | kubectl get endpoints -A |
| Pod | kubectl get pods -A |
| Traefik 日志 | kubectl logs -n kube-system deploy/traefik --tail=100 |