SOPS: Secrets OPerationS 简介

SOPS 是什么 SOPS(Secrets OPerationS)是一个命令行工具,用 Go 写的。它最初由 Mozilla 开发,2023 年迁到 getsops/sops,现在是 CNCF 项目。 它只做一件事:加密和解密结构化文件,支持 YAML、JSON、ENV(dotenv)、INI 和二进制文件。典型用法是把密钥加密后提交到 git,这样 git 里只有密文。 它不是常驻服务,也不负责存储。密文就是普通文件,解密由你在需要的时候显式调用。 原理 信封加密 每个文件随机生成一把 data key,用 AES256-GCM 加密文件里的值。 再用一把或多把 master key 加密这把 data key,结果写进文件末尾的 sops: 元数据段。 master key 可以是 age、PGP、AWS/GCP/Azure 的 KMS、HashiCorp Vault(或 OpenBao)的 Transit 等。同一个文件可以同时加密给多把 master key,任意一把都能解开。 只加密值,不加密键 stringData: POSTGRES_PASSWORD: ENC[AES256_GCM,data:3mZ0...,iv:...,tag:...,type:str] sops: age: - recipient: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p enc: | -----BEGIN AGE ENCRYPTED FILE----- ... mac: ENC[AES256_GCM,data:...,type:str] git diff 能看出改的是哪个字段,review 时不用解密也能看懂结构。 非敏感字段(比如 K8s 的 metadata)可以保持明文。 文件带 MAC,密文被篡改时解密会报错。 age age 是一个小巧的文件加密工具,可以看作 PGP 的现代替代品,SOPS 官方也建议优先用它。 ...

Created 12126-10-12 · Updated 12126-10-12 · 2 min · 270 words · -

enx-api 在 Homelab 的构建与部署

这篇文档讲什么 Homelab 里跑 enx-api 时,从本机一条 Taskfile 命令到 Pod 滚动更新,中间经过 Tekton 构建镜像、Nexus 存镜像、GitOps 改 manifest、Argo CD 同步集群。本文按实际配置把这条链路拆开说明。 Tekton、Kaniko、Argo CD 各自的概念见 Tekton 与 Kaniko 和 Argo CD 与 GitOps 持续部署;这里只写 enx-api 这条线的落地细节。 涉及的两个仓库 仓库 作用 enx 应用源码、enx-api/Containerfile、根目录 Taskfile w10n-config(私有仓库) K8s manifest、Tekton Pipeline/PipelineRun、Argo CD Application CI 在集群里 clone 的是 GitHub 上的 enx,不是本机工作区;CD 改的是 GitHub 上的 w10n-config(私有仓库,不对外公开),再由 Argo CD 拉到集群。文中出现的 manifest、Pipeline 路径均指该仓库内的 infra/homelab/k8s/ 目录。 整体流程 flowchart LR A[本机 task tekton:build:api] --> B[创建 PipelineRun] B --> C[git-clone-ssh拉 enx 源码] C --> D[kaniko-build构建并推送镜像] D --> E[update-gitops-repo改 deployment.yaml] E --> F[Argo CD 自动 sync] F --> G[enx namespace Pod 更新] 一次完整发布可以概括成四步: ...

Created 21216-06-21 · Updated 21216-06-21 · 4 min · 717 words · -

Argo CD 与 GitOps 持续部署

什么是 Argo CD Argo CD 是 CNCF 毕业项目,专为 Kubernetes 设计的 GitOps 持续部署(CD) 控制器。它以 Git 仓库中的 manifest(YAML、Kustomize、Helm 等)为唯一期望状态,持续对比集群里的实际资源,并在偏差时执行同步。 与 Tekton、GitHub Actions 等 CI 工具的分工常见如下: 阶段 典型工具 做什么 构建 Tekton、CI 编译代码、打镜像、推 registry 部署 Argo CD 根据 Git 里的镜像 tag / manifest 更新集群 在 homelab 里,配置仓库是 w10n-config:改 homelab/k8s/ 下的 YAML 并 push,由 Argo CD 把变更落到集群;镜像版本往往由 Tekton Pipeline 改 Git 里的 deployment 镜像字段,再交给 Argo 滚动发布。 GitOps 在说什么 传统做法常是 kubectl apply 或 Helm 从本机直接改集群,容易出现「集群里到底是什么版本」与 Git 不一致的问题。 ...

Created 28286-05-28 · Updated 13136-06-13 · 5 min · 993 words · -

Argo CD CLI 与 kubectl annotate 对比

背景 在 homelab 里用 Argo CD 管理 QuantDinger(application-quantdinger.yaml,automated + selfHeal)。把 MiniMax 相关配置 push 到 w10n-config 后,集群里的 ConfigMap 一度还是旧内容:Argo 显示 Synced,但 revision 仍停在旧 commit。 当时本机没有安装 argocd CLI,于是先用 kubectl annotate 触发 hard refresh,又用 kubectl apply -k 把 manifest 直接打进集群。事后整理一下两种「触发 Argo」方式的区别,避免下次混淆。 两种方式分别做什么 argocd CLI Argo CD 官方命令行,通过 Argo API Server 操作 Application,语义最完整。 常见用途: argocd app get quantdinger:查看同步状态、health、当前 revision argocd app sync quantdinger:主动执行一次 Sync,把 Git 目标 revision 应用到集群 argocd app diff quantdinger:对比 Git 与集群 live 状态 argocd app rollback quantdinger:回滚到历史 revision sync 会走 Argo 的完整同步流水线(diff、apply、health 等待、hook 等),并在 Argo UI / Application 状态里留下明确的 operation 记录。 ...

Created 28286-05-28 · Updated 28286-05-28 · 3 min · 496 words · -