Kubernetes Secrets 是一种存储和管理敏感信息(如密码、OAuth 标记和 SSH 密钥)的方法。通过使用 Secrets,您可以将敏感数据与应用程序代码分开,从而增强安全性并简化配置管理。
下面的代码片段演示了如何在 Kubernetes 中创建一个 Secret,然后通过 pod 对其进行访问。
[代码清单]
# Create a Secret named 'my-secret' containing a username and password
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: dXNlcm5hbWU= # base64 encoded 'username'
password: cGFzc3dvcmQ= # base64 encoded 'password'
To create the Secret, save the above YAML to a file named secret.yaml and run:
kubectl apply -f secret.
To access the Secret in a pod, you can use the following YAML configuration:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: my-secret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password
[执行结果]
将成功创建 Secret my-secret,并使用 Secret 中的环境变量 USERNAME 和 PASSWORD 启动 pod。
Kubernetes Secrets 以 base64-encoded 格式存储数据,以确保数据不易以纯文本形式读取。这种编码不提供加密;因此,使用额外的安全措施至关重要,比如在 Kubernetes 集群中启用静态加密。密文可以多种方式使用,包括环境变量、命令行参数或作为文件挂载到 pod 中。
[小知识]
秘密是有命名空间范围的,这意味着它们只能在所创建的命名空间内访问。
默认情况下,“秘密 ”未加密存储在 Kubernetes 的后备存储空间 etcd 中,因此必须确保 etcd 的安全,并考虑使用加密功能。
您可以从字面值或文件创建 Secrets,从而轻松管理敏感数据。