4f702b833a
工作负载: Pod, StatefulSet, DaemonSet, Job, CronJob 服务发现: Ingress 存储管理: PersistentVolume, PersistentVolumeClaim, StorageClass 配置与密钥: ConfigMap, Secret 安全与权限: ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBinding, NetworkPolicy 集群管理: Namespace 总计支持 26 个组件,覆盖 K8s 核心资源全谱
167 lines
4.5 KiB
JavaScript
167 lines
4.5 KiB
JavaScript
// K8s Secret Schema - 由 ConfTemplate 生成
|
|
// 生成时间: 自动生成
|
|
|
|
export const k8sSecretSchema = {
|
|
id: 'k8s-secret',
|
|
name: 'K8s Secret',
|
|
icon: 'Lock',
|
|
category: '云原生',
|
|
description: 'Kubernetes Secret,存储敏感数据如密码、证书等',
|
|
format: 'yaml',
|
|
fileName: 'secret.yaml',
|
|
groups: [
|
|
{
|
|
title: '基础信息',
|
|
fields: [
|
|
{
|
|
key: 'name',
|
|
label: 'Secret 名称',
|
|
type: 'text',
|
|
placeholder: 'my-secret',
|
|
default: 'my-secret',
|
|
required: true,
|
|
tip: '将用作 Secret 的 metadata.name',
|
|
},
|
|
{
|
|
key: 'namespace',
|
|
label: '命名空间',
|
|
type: 'text',
|
|
placeholder: 'default',
|
|
default: 'default',
|
|
},
|
|
{
|
|
key: 'secretType',
|
|
label: 'Secret 类型',
|
|
type: 'select',
|
|
options: [
|
|
{ label: 'Opaque (通用)', value: 'Opaque' },
|
|
{ label: 'Docker Registry (dockerconfigjson)', value: 'kubernetes.io/dockerconfigjson' },
|
|
{ label: 'TLS 证书', value: 'kubernetes.io/tls' },
|
|
{ label: 'Basic Auth (基础认证)', value: 'kubernetes.io/basic-auth' },
|
|
],
|
|
default: 'Opaque',
|
|
tip: '不同类型对应不同的数据结构',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: '数据配置',
|
|
fields: [
|
|
{
|
|
key: 'dataKey',
|
|
label: '数据键名',
|
|
type: 'text',
|
|
placeholder: 'username',
|
|
default: 'username',
|
|
required: true,
|
|
tip: 'Secret 中的键名',
|
|
},
|
|
{
|
|
key: 'dataValue',
|
|
label: '数据值',
|
|
type: 'text',
|
|
placeholder: 'base64 encoded or plain text',
|
|
default: '',
|
|
required: true,
|
|
tip: '如果开启 Base64 编码,输入明文即可',
|
|
},
|
|
{
|
|
key: 'encodeBase64',
|
|
label: 'Base64 编码',
|
|
type: 'switch',
|
|
default: true,
|
|
tip: '自动将数据值进行 Base64 编码',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: '挂载配置',
|
|
fields: [
|
|
{
|
|
key: 'mountAsVolume',
|
|
label: '作为 Volume 挂载',
|
|
type: 'switch',
|
|
default: true,
|
|
tip: '是否将 Secret 挂载为容器内的文件',
|
|
},
|
|
{
|
|
key: 'mountPath',
|
|
label: '挂载路径',
|
|
type: 'text',
|
|
placeholder: '/etc/secrets',
|
|
default: '/etc/secrets',
|
|
dependsOn: { key: 'mountAsVolume', value: true },
|
|
tip: '容器内挂载目录路径',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
}
|
|
|
|
function toYaml(obj, indent = 0) {
|
|
const lines = []
|
|
const prefix = ' '.repeat(indent)
|
|
|
|
for (const [key, value] of Object.entries(obj)) {
|
|
if (value === null || value === undefined || value === '') continue
|
|
|
|
if (Array.isArray(value)) {
|
|
lines.push(`${prefix}${key}:`)
|
|
for (const item of value) {
|
|
if (typeof item === 'object' && item !== null) {
|
|
const entries = Object.entries(item).filter(([, v]) => v !== null && v !== undefined && v !== '')
|
|
if (entries.length === 0) continue
|
|
const first = entries[0]
|
|
lines.push(`${prefix} - ${first[0]}: ${first[1]}`)
|
|
for (let i = 1; i < entries.length; i++) {
|
|
lines.push(`${prefix} ${entries[i][0]}: ${entries[i][1]}`)
|
|
}
|
|
} else {
|
|
lines.push(`${prefix} - ${item}`)
|
|
}
|
|
}
|
|
} else if (typeof value === 'object') {
|
|
lines.push(`${prefix}${key}:`)
|
|
lines.push(toYaml(value, indent + 1))
|
|
} else {
|
|
lines.push(`${prefix}${key}: ${value}`)
|
|
}
|
|
}
|
|
|
|
return lines.join('\n')
|
|
}
|
|
|
|
export function generateK8sSecretYaml(config) {
|
|
const data = {}
|
|
let value = config.dataValue || ''
|
|
|
|
if (config.encodeBase64) {
|
|
try {
|
|
value = btoa(unescape(encodeURIComponent(value)))
|
|
} catch {
|
|
// fallback: use value as-is
|
|
}
|
|
}
|
|
|
|
data[config.dataKey || 'data'] = value
|
|
|
|
const secret = {
|
|
apiVersion: 'v1',
|
|
kind: 'Secret',
|
|
metadata: {
|
|
name: config.name,
|
|
namespace: config.namespace,
|
|
},
|
|
type: config.secretType || 'Opaque',
|
|
data,
|
|
}
|
|
|
|
const header = `# K8s Secret - 由 ConfTemplate 生成
|
|
# 生成时间: ${new Date().toLocaleString('zh-CN')}
|
|
# 部署命令: kubectl apply -f ${config.fileName || 'secret.yaml'}
|
|
# 注意: 生产环境建议使用 kubectl create secret 命令或 Sealed Secrets
|
|
`
|
|
|
|
return header + '\n' + toYaml(secret)
|
|
}
|