国产化替代的浪潮下,不少单位把业务系统迁移到了中标麒麟(NeoKylin)服务器上。Web入口层的反向代理该怎么选、怎么配,是迁移过程中绕不开的问题。Nginx改一次配置就要reload一次,而后端节点一旦变化还容易漏改。Traefik作为一款云原生反向代理,天然支持动态配置,规则变了自动生效,不需要重启进程,非常适合在中标麒麟这类需要长期稳定运行的国产服务器上使用。本文就以实际部署经验为基础,完整讲一下Traefik在中标麒麟上的安装、动态配置的组织方式以及常见问题的排查思路。

一、静态配置与动态配置的区别
Traefik的配置分两层,理解这一点是用好它的前提。静态配置(Static Configuration)指的是入口点、提供器(Provider)、日志级别这类启动时确定的参数,改动后需要重启Traefik进程。动态配置(Dynamic Configuration)则包括路由规则、后端服务、中间件、证书等,这些内容可以在Traefik运行期间随时增删改,Traefik会监听变化并自动生成新的路由表,整个过程对线上请求几乎没有影响。
动态配置的来源叫提供器,常见的有三种:文件提供器、Docker提供器和标签提供器。在中标麒麟服务器上,如果业务是传统方式部署(systemd直接拉起的Java、Go进程),文件提供器最实用;如果业务跑在Docker容器里,标签提供器更省事。两种方式可以同时开启,互不冲突。
静态配置可以通过命令行参数、配置文件或者环境变量三种方式指定。推荐统一用一个配置文件管理,比如放在/etc/traefik/traefik.yml,后文示例都以这个路径为准。
二、在中标麒麟上安装Traefik并启用文件提供器
中标麒麟基于Linux内核,官方提供的二进制包可以直接运行,不需要额外依赖。到Traefik的官方发布页下载对应架构的包即可,麒麟服务器如果是飞腾或鲲鹏芯片,记得选ARM64版本,x86机型则选linux_amd64。下载后解压、赋权、放到PATH目录下就完成了安装。
下面是核心的静态配置文件,开启文件提供器并指定一个动态配置目录:
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
providers:
file:
directory: /etc/traefik/dynamic
watch: true
api:
dashboard: true
log:
level: INFO
注意watch: true这一项,它让Traefik持续监听目录下文件的变化。这样我们只需要在/etc/traefik/dynamic目录里新增或修改yml文件,路由就会自动更新。目录可以放多个文件,Traefik会把它们合并处理,建议按业务系统拆分,比如oa.yml、erp.yml,维护起来一目了然。
用systemd托管Traefik进程,服务单元文件如下:
[Unit] Description=Traefik Reverse Proxy After=network.target [Service] ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml Restart=always LimitNOFILE=65536 [Install] WantedBy=multi-user.target
写好后执行systemctl daemon-reload和systemctl enable --now traefik,服务即可开机自启。端口放行别忘了,麒麟默认启用防火墙,执行firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp再reload即可。
三、动态路由的实际配置示例
假设OA系统跑在内网192.168.10.20的8080端口,我们想通过oa.example.ipipp.com这个域名对外提供服务。只需在动态配置目录新建一个文件:
http:
routers:
oa-router:
rule: "Host(`oa.example.ipipp.com`)"
entryPoints:
- web
service: oa-service
services:
oa-service:
loadBalancer:
servers:
- url: "http://192.168.10.20:8080"
healthCheck:
path: /actuator/health
interval: "10s"
保存文件的瞬间,Traefik就会感知到变化,不需要任何重启命令。域名解析指向这台麒麟服务器后,访问就能通了。这里还配了健康检查,后端节点挂掉会自动从负载池剔除,恢复后再自动加回来,这是传统静态代理很难做到的。
多节点负载均衡也很简单,把servers下的url写多份即可:
services:
oa-service:
loadBalancer:
servers:
- url: "http://192.168.10.20:8080"
- url: "http://192.168.10.21:8080"
sticky:
cookie:
name: oa-session
如果业务有会话保持需求,加上sticky配置,Traefik会通过Cookie把同一用户的请求固定到同一节点,避免集群部署下session丢失的问题。
四、中间件与HTTPS证书的动态管理
中间件是Traefik处理请求的拦截链,常见的用途有限流、压缩、白名单、跳转等。比如想给OA系统加IP白名单,只允许办公网段访问,配置如下:
http:
middlewares:
office-whitelist:
ipWhiteList:
sourceRange:
- "192.168.10.0/24"
- "10.8.0.0/16"
routers:
oa-router:
rule: "Host(`oa.example.ipipp.com`)"
entryPoints:
- websecure
service: oa-service
middlewares:
- office-whitelist
tls: {}
证书同样可以动态挂载。把证书和私钥放到服务器上,比如/etc/traefik/certs/oa.crt和/etc/traefik/certs/oa.key,然后在动态配置里声明:
tls:
certificates:
- certFile: /etc/traefik/certs/oa.crt
keyFile: /etc/traefik/certs/oa.key
stores:
default:
defaultCertificate:
certFile: /etc/traefik/certs/oa.crt
keyFile: /etc/traefik/certs/oa.key
证书到期更换时,直接替换文件内容,Traefik会自动重新加载证书,不需要重启进程,这对用自签证书的内网环境特别友好。多个域名各自配证书也很方便,Traefik会根据请求的SNI自动匹配对应证书。
五、常见坑点与排查思路
第一个常见的坑是权限问题。如果用systemd的普通用户跑Traefik,而证书目录或动态配置目录的属主是root,Traefik读取失败只会在日志里报一句warn,表面上服务还在跑但路由不生效。建议把/etc/traefik整个目录的属主改成运行用户,并确认SELinux策略没有拦截。麒麟部分版本默认开启SELinux,可以用getenforce确认,必要时执行restorecon -Rv /etc/traefik修正安全上下文。
第二个坑是动态配置文件语法错误。一个yml文件写错,Traefik会拒绝加载整个目录里所有文件的变更,导致其他正常业务的路由更新也被卡住。排查时先看日志,Traefik会把解析失败的文件路径和具体行号打出来。写配置时注意路由规则里反引号的使用,Host()函数里的域名必须用反引号包裹,用引号会直接报语法错误。
第三个坑是容器场景下的标签提供器。如果业务跑在Docker里,别忘了挂载/var/run/docker.sock,否则Traefik看不到容器事件。同时要在静态配置里开启docker提供器并设置exposedByDefault: false,避免没打标签的容器被意外暴露到公网,这是安全上很容易忽视的一点。
总结一下,Traefik的动态配置能力让反向代理的维护从手工改文件加reload变成了放文件即生效,配合目录化的管理方式,在中标麒麟这类国产服务器上搭建统一入口层非常顺手。把静态与动态配置分层管理,按业务拆分文件,再加上健康检查和中间件,一套可长期运行、可持续维护的入口方案就成型了。