在 Kubernetes 中,我们经常需要在容器中存储敏感数据,例如密码、API 密钥等。为了保证这些敏感数据的安全,我们需要使用 Secrets。而在实际使用中,我们往往会使用 base64 编码的 Secrets,这种方法虽然简单易用,但并不安全。因为 base64 编码只是一种简单的转换,只需要稍微了解一下编码规则,就可以轻松地还原出原始数据。
为了更好地保护敏感数据,我们可以使用 Kubernetes 中的二进制 Secrets。本文将介绍如何在 Kubernetes 中使用二进制 Secrets 进行敏感数据保密,并提供示例代码以供参考。
什么是二进制 Secrets
Kubernetes 中的二进制 Secrets 是一种加密的 Secrets,与 base64 编码的 Secrets 不同,它不会直接将敏感数据以明文的形式存储在 etcd 中。相反,它会将敏感数据以二进制形式存储在 etcd 中,并使用 Kubernetes 内置的加密机制对其进行加密和解密。
如何使用二进制 Secrets
使用二进制 Secrets 需要执行以下步骤:
- 创建一个 Secret 对象,并将需要保密的数据放入其中。
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: password: <base64-encoded-password>
注意:这里的 data 字段中的值必须是 base64 编码后的值,而不是明文。
- 在 Pod 中使用 Secret。
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ -------- ---- - ----- -------- ---------- ------------- ----- --------- ---- --------
在 Pod 中使用 Secret 需要使用 valueFrom.secretKeyRef
字段引用 Secret 对象中的数据。在上面的示例中,我们将 Secret 对象中的 password 字段的值作为环境变量 PASSWORD 的值传递给了容器。
示例代码
以下是一个完整的示例,演示了如何使用二进制 Secrets 进行敏感数据保密。
创建 Secret 对象
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: password: bXktc2VjcmV0LXBhc3N3b3JkCg==
注意:这里的 data 字段中的值必须是 base64 编码后的值,而不是明文。
创建 Pod
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ -------- ---- - ----- -------- ---------- ------------- ----- --------- ---- --------
在上面的示例中,我们将 Secret 对象中的 password 字段的值作为环境变量 PASSWORD 的值传递给了容器。
结论
使用二进制 Secrets 可以更好地保护敏感数据,因为它不会直接将敏感数据以明文的形式存储在 etcd 中。在实际使用中,我们应该尽可能地使用二进制 Secrets 来保护敏感数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67428cf6db344dd98ddca690