Files
LokiStack/kubernetes/deployment.yaml
T
opsx 3c27e58a73 feat(security): 移除 admin123 硬编码默认密码 + 编译加 -trimpath
安全加固(降低二进制泄露/逆向的信息面):

1. 初始密码随机化
   - 首次启动生成 16 位随机密码(大小写+数字,排除 0/O/1/l/I 易混淆字符)
   - 写入数据卷 initial-admin-password.txt(0600)并打印到首次启动日志
   - admin 首次改密后自动删除该文件(seed.CleanupInitPassword)
   - 支持 ADMIN_INIT_PASSWORD 环境变量指定(自动化部署 / 固定密码场景)
   - 生成失败直接 Fatal 退出,不再降级到公开默认口令

2. 移除硬编码 admin123
   - main.go 不再打印 "Default login: admin / admin123"
   - 二进制内 admin123 命中:2 → 0

3. -trimpath
   - build.sh / run.sh 编译加 -trimpath
   - 二进制内 /app/backend/ 源码路径命中:66 → 0

4. 文档
   - README 新增「第 4 步:获取管理员初始密码」
     (docker compose exec / logs / docker cp / named volume 四种方式 + K8s 对应命令)
   - .env.example 补 ADMIN_INIT_PASSWORD
   - kubernetes/deployment.yaml 加 env 注释说明

验证(strings 对比加固前后二进制):
  admin123              2 → 0
  /app/backend/        66 → 0
  initial-admin-password.txt / ADMIN_INIT_PASSWORD / CleanupInitPassword 均存在
2026-10-26 17:01:09 +00:00

98 lines
3.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# opsx-loki 平台本体
#
# 关键约束:
# 1) replicas 必须为 1:JSON DB 为单写者,多副本会互相覆盖。
# 2) strategy 必须为 Recreate:RollingUpdate 期间会同时存在两个 Pod 挂同一个
# RWO PVC,两个进程同时写 opsxloki.json 会导致数据丢失。
# 3) /app/data 必须挂 PVC,否则重启后 DB / kubeconfig / known_hosts 全丢。
apiVersion: apps/v1
kind: Deployment
metadata:
name: opsx-loki
namespace: log
labels:
app: opsx-loki
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: opsx-loki
template:
metadata:
labels:
app: opsx-loki
spec:
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
containers:
- name: opsx-loki
image: lghost/opsxloki:latest
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
env:
# 可选:指定 admin 初始密码。不设置则自动生成 16 位随机密码,
# 写入 PVC 的 initial-admin-password.txt 并打印到首次启动日志。
# 获取:kubectl -n log exec deploy/opsx-loki -- cat /app/data/initial-admin-password.txt
# 自定义:
# - name: ADMIN_INIT_PASSWORD
# valueFrom:
# secretKeyRef:
# name: opsxloki-secrets
# key: ADMIN_INIT_PASSWORD
# optional: true
- name: DATA_DIR
value: /app/data
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: opsxloki-secrets
key: JWT_SECRET
- name: ENCRYPTION_KEY
valueFrom:
secretKeyRef:
name: opsxloki-secrets
key: ENCRYPTION_KEY
# 可选:挂载本地集群 kubeconfig 时启用
# - name: KUBECONFIG
# value: /home/opsxloki/.kube/config
volumeMounts:
- name: data
mountPath: /app/data
# 可选:本地集群 kubeconfig(in-cluster 管理本集群时用)
# - name: kubeconfig
# mountPath: /home/opsxloki/.kube
# readOnly: true
readinessProbe:
httpGet:
path: /api/v1/health
port: http
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /api/v1/health
port: http
initialDelaySeconds: 30
periodSeconds: 20
failureThreshold: 5
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: "1"
memory: 1Gi
volumes:
- name: data
persistentVolumeClaim:
claimName: opsxloki-data
# - name: kubeconfig
# secret:
# secretName: opsxloki-kubeconfig