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>