Kubernetes(K8s)中的 Secret 是一种用于存储和管理敏感信息的资源对象,比如密码、令牌、密钥等。它的主要作用是安全地保存敏感数据,并在 Pod 或容器需要时以安全的方式提供这些数据,避免将敏感信息硬编码在镜像或配置文件中。
Secret 的作用
-
安全存储敏感数据
防止密码、API密钥等直接暴露在代码或镜像中。 -
灵活挂载到 Pod
可以作为环境变量、文件或 kubelet 的配置挂载到 Pod 内部。 -
集中管理和更新
统一管理敏感信息,便于更新和轮换密钥。 -
与 RBAC 配合
可以结合 Kubernetes 的权限控制,限制 Secret 的访问范围。
Secret 的类型
- Opaque(默认类型):任意键值对(如密码、令牌)
- docker-registry:用于私有镜像仓库认证
- tls:存储 TLS 证书和私钥
Secret 的使用方式
-
创建 Secret
kubectl create secret generic my-secret \ --from-literal=username=admin \ --from-literal=password=123456 -
在 Pod 中使用 Secret(环境变量方式)
apiVersion: v1 kind: Pod metadata: name: secret-env-demo spec: containers: - name: app image: busybox env: - name: USERNAME valueFrom: secretKeyRef: name: my-secret key: username - name: PASSWORD valueFrom: secretKeyRef: name: my-secret key: password -
以文件方式挂载到 Pod
volumes: - name: secret-volume secret: secretName: my-secret containers: - name: app volumeMounts: - name: secret-volume mountPath: "/etc/secret"
注意事项
- Secret 默认以 base64 编码存储(不是加密,只是编码)。
- 建议结合加密存储(如启用 K8s 的加密机制或外部密钥管理系统)。
- Secret 的访问应受限于最小权限原则。
总结:
K8s 的 Secret 主要用于安全地管理和分发敏感信息,提升应用安全性和运维效率,是生产环境中不可或缺的资源类型。