Skip to main content

Secret

Secret 是一种用于存储敏感数据(如密码、API 密钥)的 Kubernetes 对象。 它被加密存储在控制平面的 etcd 中。 当 Pod 需要使用 Secret 中的数据时,这些数据会被安全地挂载到 Pod 的文件系统或作为环境变量注入, 但 Secret 对象本身并不在 Node 上作为组件运行。

Secret 存储加密信息

为 Secret 启用静态加密


启用或配置 RBAC 规则来限制读取和写入 Secret 的数据(包括通过间接方式)。需要注意的是,被准许创建 Pod 的人也隐式地被授权获取 Secret 内容。
在适当的情况下,还可以使用 RBAC 等机制来限制允许哪些主体创建新 Secret 或替换现有 Secret。

base64 加密解密

echo "db_password" | base64
# ZGJfcGFzc3dvcmQK

echo "ZGJfcGFzc3dvcmQK" | base64 -d
# db_password

编写 secret.yml 文件

apiVersion: v1
kind: Secret
metadata:
name: hellok8s-secret
data:
DB_PASSWORD: "ZGJfcGFzc3dvcmQK"

使用secret.yaml 文件

kubectl apply -f hellok8s-secret.yaml

查看全部secrets

  • 输出的是 yml里的 name
kubectl get secrets

查看secret 的内容

# 以 YAML 格式输出
kubectl get secret hellok8s-secret -o yaml

# 或者以 JSON 格式输出
kubectl get secret hellok8s-secret -o json

解码单个键值

  • 这个命令组合了 kubectl 的 jsonpath 输出功能和 base64 解码工具。
# 解码 'username' 的值
kubectl get secret hellok8s-secret -o jsonpath='{.data.username}' | base64 --decode

# 解码 'DB_PASSWORD' 的值
kubectl get secret hellok8s-secret -o jsonpath='{.data.DB_PASSWORD}' | base64 --decode

命令解释:

kubectl get secret my-app-secret -o jsonpath='{.data.username}':
-o jsonpath 指定了自定义输出格式。
{.data.username} 是一个 JSON路径 表达式,意思是“获取 data 对象下的 username 键的值”。这会直接输出那串 Base64 编码的字符串。
|: 这是一个管道符,将前一个命令的输出作为后一个命令的输入。
base64 --decode: (在 macOS 上是 base64 -d) 这个命令读取输入流并对其进行 Base64 解码。

使用 kubectl 插件

如果你经常需要查看 Secret,强烈推荐安装 krew (kubectl的插件管理器),然后安装 view-secret 插件。

安装 krew (如果尚未安装)

请参考官方文档:https://krew.sigs.k8s.io/docs/user-guide/setup/install/

brew install krew

#验证安装
kubectl krew version

使用 krew 安装 view-secret 插件:

Generated bash

kubectl krew install view-secret

Use code with caution. Bash 使用插件查看 Secret: 现在你有了一个非常方便的新命令 kubectl view-secret,它会自动为你完成所有解码工作。 Generated bash

kubectl view-secret <secretname> -n <namespace>