Files
LokiStack/backend/services/k8s_client.go
T
Logan.LiandClaude 2a93de600d feat: LokiDeploy 初始提交 - 轻量级 K8s Loki 部署平台
Go(Gin) + React(Vite + shadcn/ui + Tailwind) 前后端分离,全中文 UI

- 集群管理:Kubeconfig / Token 双接入,kubectl + helm 部署
- 主机管理:SSH 密钥 / 密码双认证,CPU/内存/磁盘使用率监控,SSH 错误中文友好提示
- 存储配置、部署管理、系统设置
- Docker 镜像内置 kubectl + helm,开箱即用
- run.sh 一键启停(start/stop/restart/status)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-29 17:03:57 +08:00

59 lines
1.4 KiB
Go

package services
import (
"fmt"
"os"
"regexp"
"lokideploy/models"
)
// resolveKubeconfig 取集群最终的 kubeconfig 文本(优先内存字段,其次磁盘文件)
func resolveKubeconfig(cluster *models.Cluster) (string, error) {
if cluster.KubeConfig != "" {
return cluster.KubeConfig, nil
}
if cluster.KubeConfigPath != "" {
data, err := os.ReadFile(cluster.KubeConfigPath)
if err != nil {
return "", fmt.Errorf("读取 kubeconfig 文件失败: %v", err)
}
return string(data), nil
}
return "", fmt.Errorf("集群未配置 kubeconfig")
}
// BuildKubeconfigFromToken 用 API Server + Token 构造最小 kubeconfig
// 采用 insecure-skip-tls-verify,便于内网/自签证书集群接入
func BuildKubeconfigFromToken(apiServer, token string) string {
return fmt.Sprintf(`apiVersion: v1
kind: Config
clusters:
- cluster:
insecure-skip-tls-verify: true
server: %s
name: loki-cluster
contexts:
- context:
cluster: loki-cluster
user: loki-user
name: loki-context
current-context: loki-context
users:
- name: loki-user
user:
token: %s
`, apiServer, token)
}
var apiServerRe = regexp.MustCompile(`(?m)^\s*server:\s*(\S+)`)
// ExtractAPIServer 从 kubeconfig 文本提取 server 地址(展示用)
func ExtractAPIServer(kubeconfig string) string {
m := apiServerRe.FindStringSubmatch(kubeconfig)
if len(m) >= 2 {
return m[1]
}
return ""
}