跳转到主要内容
下面的配置按公网访问里推荐的做法:集群里跑两个 ingress-nginx 控制器,一个挂在内网负载均衡上,一个挂在公网负载均衡上;同一个域名 molesignal.example.com 在内网 DNS 和公网 DNS 里分别解析到这两个负载均衡。MoleSignal 的 Service 在命名空间 molesignal 里,名字是 molesignal、端口 5080;分角色部署时换成 router 的 Service。

两个控制器

两个控制器的 IngressClass 和 controllerValue 都要不同,否则会去处理对方的 Ingress。内网控制器的 Service 加上云厂商的内网负载均衡注解:
公网控制器保留客户端源地址,访问日志只记路径,不记查询串;心跳打卡和日历订阅的路径里有 Token,只记前缀:
分别安装:

内网 Ingress

内网 Ingress 转发全部路径。实时查询是流式响应,关掉缓冲并放长超时:

公网 Ingress

公网 Ingress 只列出要开放的路径,没列出的路径由控制器的默认后端返回 404。只保留实际用到的路径:
Prefix 按路径段匹配:/s 匹配 /s/<分享 Token>,不匹配 /shared;/api/v1/public/share 匹配 /api/v1/public/share/query。 Ingress 不能按方法过滤,这一层交给 MoleSignal:上面每个路径只接受它用到的方法,其他方法返回 405 或 404。注解作用于整个 Ingress 对象:要给某些路径单独设请求体上限或来源地址,把它们拆到另一个 Ingress,例如只允许 Azure 服务标记 AzureBotService 里的地址段访问 Teams 的回调:
拆出去的路径要从 molesignal-public 里删掉,同一个路径不要出现在两个 Ingress 里。

状态页的自定义域名

状态页绑定了 status.example.org 时,在公网控制器上为它加一条规则,只放行状态页的根路径、接口和网页文件:

检查

确认两个 Ingress 分别被两个控制器接管,并拿到各自负载均衡的地址:
从公网请求登录接口应返回 404,不带 Token 请求告警接入应返回 401:
最后在 _sys 组织的 设置 → 客户端 IP 识别 里,把公网控制器 Pod 所在的网段列为受信任的代理,见客户端 IP 识别。
最后修改于 2026年10月31日