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,从而轻松管理敏感数据。