Vault Agent Injector 是一个 mutating admission webhook,只在 pod 创建时改写定义。改了默认资源要重启 pod,injector 不可用时 pod 照常创建却没有密钥,都出自这一点。
用 Trivy Operator 持续扫描 homelab 集群的镜像
两个 K3s 集群里大多是第三方镜像,镜像不动也会冒出新 CVE。Trivy Operator 每天重扫并接进 Prometheus 告警,日常要按 CVE ID 分诊,能升级就升级,升不了带证据豁免,并用报告数对工作负载数确认扫描没有静默失败。
K8s 应用从 Vault 取密钥:Agent sidecar、init-only、VSO、ESO 和 CSI 怎么选
Vault Agent 的 init 和 sidecar 默认各申请 250m CPU,在一个非生产集群里占了一半以上的 CPU requests,实际几乎不用。按 DevSecOps 的要求比较五种接法后,先只保留 init,再换成和生产共用接口的 ESO。
环境分支换成主干开发:制品晋级、feature flag、预览环境和分阶段迁移
qa、staging、main 各对应一个环境时,修复要在分支间来回 cherry-pick,各环境跑的也不是同一个镜像。DORA 2022 年的报告把主干开发的收益和门禁、自动回滚这类配套规则绑在一起,迁移因此从立门禁开始,分三个阶段停掉环境分支。
homelab 的 Terraform state 从本地迁到 Cloudflare R2
8 个 Terraform root 的 state 原先只存在一台笔记本上,换台机器就没法接着跑。迁到 R2 的私有桶后用 use_lockfile 加锁,凭据由包装脚本从 Vault 取,改 state 之前先在本地拍一份快照。
EKS 上多个服务共用一个 ALB
AWS Load Balancer Controller 默认一个 Ingress 一个 ALB。共用 ALB 有三种做法:IngressGroup、TargetGroupBinding,以及 v3.0.0 起 GA 的 Gateway API。
Pod 短名称解析和 ndots:5 的查询放大
Pod 里的短名称靠 resolv.conf 的 search 域和 ndots:5 补全,外部域名要先拼上每个后缀各查一遍:kind 里解析一次 api.github.com 发了 8 个查询,带上 EKS 节点的后缀是 10 个。
Spring Boot actuator 用业务端口还是单独的管理端口
actuator 可以与业务共用端口,也可以通过单独管理端口运行。单独端口能隔离外部流量并统一指标路径,但会引入独立的内嵌 Web 服务与线程池;探针若未配置回主端口可能出现健康误报,采集端口也需在 Service 与 ServiceMonitor 中对齐。
Jenkins 部署从 push 改成 pull:VM 按 digest 自己拉镜像
Jenkins 用 SSH 登录 VM 部署,登录所有目标机的凭据和应用配置都集中在 CI 控制器上。方向反过来之后,控制器被攻破也登录不了生产机,代价在部署结果的反馈、有顺序的部署、每台 VM 上的部署脚本。K8s 上这已是主流,VM 上也有先例。
清理共享 Redis 里的旧缓存 key:Lua 分批 UNLINK、SLOWLOG 验证,以及 ElastiCache 和 cluster 模式下的差异
旧缓存 key 没有 TTL,其中一类的 key 名就是明文 API key。自建单机上用 SCAN 盘点、Lua 分批 UNLINK、SLOWLOG 验证;ElastiCache 上查配置和监控的方式不同,cluster 模式还要逐个主节点执行。