在 Kubernetes 集群中,运行的应用程序可能需要使用敏感数据,如数据库密码、API 密钥等。为了保护这些数据,Kubernetes 提供了一个名为 Secret 的 API 对象。本文将会介绍 Secret 的基本使用方法、最佳实践以及相应的代码示例。
什么是 Kubernetes Secret?
Kubernetes Secret 是 Kubernetes API 对象的一种,用于存储敏感数据,如密码、密钥和证书等。Secret 可以使用多种方式创建,包括命令行工具、YAML 文件和 Kubernetes API。在创建的时候,可以选择将数据以明文或者 Base64 编码方式存储。在使用时 Kubernetes 会自动将 Base64 编码还原为明文。
Secret 的使用方法
创建 Secret
使用命令行工具 kubectl 创建 Secret:
$ kubectl create secret generic my-secret \ --from-literal=username=admin \ --from-literal=password=secretpassword
使用 YAML 文件创建 Secret:
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: username: YWRtaW4= password: c2VjcmV0cGFzc3dvcmQ=
使用 Secret
使用 Secret 的方式与 ConfigMap 类似。你可以将 Secret 作为环境变量注入到容器中,或者在容器内部挂载 Secret。
将 Secret 注入到容器中:
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ ------------ ---- - ----- -------- ---------- ------------- ----- --------- ---- -------- - ----- -------- ---------- ------------- ----- --------- ---- --------
在容器内部挂载 Secret:
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ ------------ ------------- - ----- ---------------- ---------- -------------- ---- - ----- -------- ---------- ------------- ----- --------- ---- -------- - ----- -------- ---------- ------------- ----- --------- ---- -------- -------- - ----- ---------------- ------- ----------- ---------
Secret 的最佳实践
1. 避免明文存储敏感数据
虽然可以将 Secret 存储为明文,但建议使用 Base64 编码方式存储。这样即使有人能够访问 Secret 对象,也无法轻易地查看敏感数据。
2. 为每个应用程序单独创建 Secret
在创建 Secret 对象时,建议为每个应用程序单独创建 Secret。这样可以让 Secret 的访问权限更加明确,防止对其他应用程序的敏感数据造成影响。
3. 定期旋转 Secret
定期旋转 Secret 是一种良好的安全实践。Kubernetes 提供了一些工具,如 CronJob 来定期更新 Secret。
4. 不要在代码库中存储敏感数据
不要在代码库中存储敏感数据,如密码、证书等。更好的方式是在应用程序中通过环境变量或文件读取配置信息,或者将其存储在 Kubernetes Secret 中。
总结
本文介绍了 Kubernetes 中 Secret 的基本使用方法和最佳实践。我们了解了如何创建 Secret,如何将其注入到容器中或在容器内部挂载 Secret,并阐述了一些安全实践。Kubernetes Secret 可以很好地保护敏感数据,希望本文能够对你在使用 Secret 时有所帮助。
参考资料
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6451bb75675af4061b581fd7