Kubernetes 安全与部署全解析
1. 秘密管理与 GitOps
在 Kubernetes 中使用秘密(Secrets)是保障应用安全的重要一环,但如何存储这些秘密同样关键。若将秘密放在与常规配置相同的仓库中,就如同直接使用普通环境变量,失去了使用秘密的意义。以下是几种不同复杂度的存储方案:
- 独立仓库 :创建一个独立的配置仓库来存放秘密,限制访问用户数量。若仓库支持细粒度访问控制,可将秘密置于受访问控制的文件夹内。一种合理的做法是将该仓库与云提供商的生产资源放在一起,并采用与生产环境相同的访问控制策略。这样,即使账户被盗用,攻击者也无法获得额外的访问权限。
- 密封秘密(Sealed Secrets) :Sealed Secrets 项目采用主密钥对所有秘密进行编码。虽然仍需解决主密钥的存储问题,但编码后的秘密可以包含在主配置仓库中,享受配置即代码带来的优势,如回滚功能。
- 秘密服务 :运行一个独立的服务来向集群注入秘密。HashiCorp 的 Vault 是该概念的流行实现,且提供开源版本供自行部署。
为验证秘密是否正常工作,可参考以下示例:
# FileSecrets/deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: timeserver
spec:
replicas: 1
selector:
matchLabels:
pod: timeserver-po