fix(controller): 隔离无关媒体凭据校验

容量控制器只负责读取容量状态和调整 Worker 副本,按最小权限不注入 OSS 或供应商凭据;全局媒体配置校验却导致控制器在生产启动时 CrashLoop。

容量控制器角色现在跳过不会使用的直传 OSS 校验,API/Worker 仍保持原校验;发布先以零副本应用目标状态,再用精确镜像和同构配置运行 Ready 预检,成功后才扩到双副本;同时补齐迁移 Job 的 restricted PodSecurity 配置。

验证:Go 全量测试、go vet、角色回归测试、bash -n、ShellCheck、人工发布测试、生产 server-side dry-run。
This commit is contained in:
2026-07-31 23:52:22 +08:00
parent 993fb7d8be
commit b6ef0435ab
3 changed files with 143 additions and 5 deletions
+16
View File
@@ -333,3 +333,19 @@ func TestLoadAndValidateDirectMediaOSS(t *testing.T) {
t.Fatalf("Validate() error = %v, want invalid object prefix", err)
}
}
func TestCapacityControllerDoesNotRequireMediaOSSCredentials(t *testing.T) {
cfg := Load()
cfg.ProcessRole = "capacity-controller"
cfg.MediaOSSDirectEnabled = true
cfg.MediaOSSAccessKeyID = ""
cfg.MediaOSSAccessKeySecret = ""
if err := cfg.Validate(); err != nil {
t.Fatalf("capacity controller rejected unused media OSS credentials: %v", err)
}
cfg.ProcessRole = "worker"
if err := cfg.Validate(); err == nil || !strings.Contains(err.Error(), "ACCESS_KEY") {
t.Fatalf("worker Validate() error = %v, want missing direct OSS credentials", err)
}
}