feat(collectors): Promtail DaemonSet 的部署命名空间固定为 log,表单隐藏该字段
=== 需求 ===
创建 Loki 部署后添加采集策略(Promtail DaemonSet)时,"部署节点命名空间"
不该让用户选 —— 采集器必须和 LokiStack 放在一起(log)。
=== 前端 ===
CollectorFormDialog:选择 k8s-daemonset 时整块隐藏 namespace 字段
(连同分类型提示、手动输入开关一起),改为一条只读说明:
「采集器部署命名空间固定为 Loki 所在命名空间(通常 log),与 LokiStack
放在一起,无需选择。要限制采集范围请用下面的『只采集这些命名空间』。」
提交时 DaemonSet 不传 namespace(原来会传用户填的值)。
顺带修掉隐藏后暴露的 tsc 报错:placeholder 里 `collectorType === 'k8s-daemonset'`
在收窄后的分支里已成不可能比较,改为常量 'default'。
=== 后端(强制约束,不只靠前端)===
services/collector.go:
Create:type == k8s-daemonset 时强制清空 req.Namespace
→ 渲染与部署两侧都会回退到 d.loki.Namespace
Update:DaemonSet 忽略 updates["namespace"]
原始渲染逻辑本就有"为空则用 LokiDeployment.Namespace,再兜底 log"。
为什么后端也要拦:API 直接调用(脚本/其他客户端)不该能把采集器
部署到任意命名空间——那样会出现"平台显示在 log、实际 DaemonSet 在别处"
的状态漂移。
=== 实测(0108617e4180)===
现有采集器 promtail-pre: type=k8s-daemonset namespace='log'
PUT {"namespace":"evil-ns"} → 返回 success,但读回仍是 'log' ✅ 被忽略
tsc 通过;Pod = Hub latest = 0108617e4180
This commit is contained in:
1 parent
2e97c04f84
commit
9448868a71
4 files changed
+26
-2
No files matched your search
@@ -274,6 +274,13 @@ func (s *CollectorService) Create(req *CreateCollectorRequest) (*models.Collecto
|
||||
refType = "host"
|
||||
}
|
||||
|
||||
// DaemonSet 的部署命名空间固定为 Loki 所在命名空间(通常 log):
|
||||
// 采集器与 LokiStack 放在一起,用户不需要也不应该选。
|
||||
// 这里强制清空,渲染与部署两侧都会回退到 d.loki.Namespace。
|
||||
if req.Type == "k8s-daemonset" {
|
||||
req.Namespace = ""
|
||||
}
|
||||
|
||||
collector := models.Collector{
|
||||
ID: repository.GetDB().NextID("collectors"),
|
||||
Name: req.Name,
|
||||
@@ -374,6 +381,11 @@ func (s *CollectorService) Update(id uint, updates map[string]interface{}) error
|
||||
if v, ok := updates["labels"].(string); ok {
|
||||
db.Collectors[i].Labels = v
|
||||
}
|
||||
// DaemonSet 的 namespace 一律不接受修改(固定跟随 Loki 所在命名空间)
|
||||
if v, ok := updates["namespace"].(string); ok && v != "" && db.Collectors[i].Type != "k8s-daemonset" {
|
||||
db.Collectors[i].Namespace = v
|
||||
db.Collectors[i].StatusMessage = "部署命名空间已保存,点击部署以应用新配置"
|
||||
}
|
||||
// targetNamespaces: 采集哪些命名空间([]string;空=全集群)
|
||||
if v, ok := updates["targetNamespaces"]; ok {
|
||||
var nss []string
|
||||
|
||||
Reference in new issue
Block a user