Skip to content

Ingress 与域名路由体系

本文是「域名部署实战系列」的总览,说明 *.ljdou.cn 所有域名如何统一接入、路由与暴露,以及各组件之间的职责划分。

背景

ljdou.cn 体系下有多个服务,各自需要独立的域名入口:

域名用途后端形态
ljdou.cn / www.ljdou.cn个人主页Docker 容器(Nginx + Vue)
api.ljdou.cn后端 APIDocker 容器(Go/Gin)
docs.ljdou.cn技术文档站Docker 容器(Nginx + VitePress)
airflow.ljdou.cnAirflow 调度平台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 访问

核心原则

  1. 所有公网域名统一进入 Traefik,不再各自监听公网端口
  2. 普通服务使用标准 Ingress,高级需求(特殊 Middleware、复杂 TLS)才用 IngressRoute
  3. TLS 统一交给 cert-manager,不手工维护证书
  4. Docker + Endpoints 只是过渡方案,新应用优先部署到 K3s
  5. 公网只开放 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 → 后端
层级检查命令
DNSdig +short xxx.ljdou.cn
路由规则kubectl get ingress,ingressroute -A
Servicekubectl get svc -A
Endpointkubectl get endpoints -A
Podkubectl get pods -A
Traefik 日志kubectl logs -n kube-system deploy/traefik --tail=100

系列文章

基于 VitePress 构建