feat(k8s): 实时日志流 + WebSocket exec 交互终端 + 前端流式日志查看器

后端:
  - GetPodLogsStream: 新增 K8s follow=true 流式日志读取
  - GetPodLogs handler: 支持 stream=true → chunked transfer 实时推流
  - ExecTerminal: WebSocket → K8s SPDY exec 双向代理 (交互式 bash)
  - 路由: GET /ws/k8s-exec/:id/namespaces/:ns/pods/:pod (WebSocket)

前端 DeploymentDetail:
  - 新增「实时流」按钮: fetch ReadableStream + TextDecoder 逐块渲染
  - 日志内容自动滚动追加

CD/CI 镜像更新:
  - POST /update-image 已可用 (前端表单+后端 API 均完成)
This commit is contained in:
attacker committed 2026-06-19 07:49:32 +00:00
1 parent 1a913549fc
commit 77045622fc
4 files changed
+201 -5

No files matched your search

+4 -1
View File
@@ -64,6 +64,10 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
metricsWSHandler := handlers.NewMetricsWSHandler(metricsHub)
r.GET("/ws/metrics", middleware.JWTAuth(&cfg.JWT), metricsWSHandler.ServeWS)
// WebSocket K8s exec 交互终端 // Logan.Li
k8sHandler := handlers.NewK8sHandler(db)
r.GET("/ws/k8s-exec/:id/namespaces/:namespace/pods/:podName", middleware.JWTAuth(&cfg.JWT), k8sHandler.ExecTerminal)
// 公开路由
authHandler := handlers.NewUserHandler(db, cfg)
api.POST("/auth/login", authHandler.Login)
@@ -231,7 +235,6 @@ func Register(r *gin.Engine, db *gorm.DB, log *zap.Logger, cfg *config.Config, c
}
// K8s集群路由
k8sHandler := handlers.NewK8sHandler(db)
clusters := authorized.Group("/k8s-clusters")
{
clusters.GET("", k8sHandler.ListClusters)