Kubernetes Secrets 是一种在集群中存储敏感信息(如密码、OAuth 标记和 SSH 密钥)的方式。不过,默认情况下,这些机密信息只采用 base64 编码,这与加密不同。
下面的示例演示了如何创建 Kubernetes Secret,并显示数据以 base64 格式存储。
【代码清单】
# Create a secret
kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=secret123
# Retrieve the secret
kubectl get secret my-secret -o yaml
【执行结果】
apiVersion: v1
data:
password: c2VjcmV0MTIz
username: YWRtaW4=
kind: Secret
metadata:
name: my-secret
namespace: default
type: Opaque
数据部分的值(如用户名 YWRtaW4=)是 base64 编码字符串。虽然 base64 编码会降低数据的可读性,但对于可以访问集群的攻击者来说并不安全。Base64 编码只是将二进制数据表示为 ASCII 字符的一种方式,可以很容易地被解码回原始形式。这意味着,如果不使用额外的加密方法,存储在秘密中的敏感信息就会面临风险。为了确保秘密的安全,Kubernetes 支持使用外部工具(如 HashiCorp Vault),或使用 Kubernetes 内置的加密提供商对秘密进行静态加密。实施这些措施可确保你的机密确实经过加密,而不仅仅是 base64 编码。
【小知识】
Base64 编码与加密经常被混为一谈,但它们的目的不同。Base64 用于将二进制数据编码成文本,而加密是一种通过将数据转换成一种没有适当解密密钥就无法轻易理解的格式来保护数据安全的方法。