你正在查看的文档所针对的是 Kubernetes 版本: v1.31
Kubernetes v1.31 版本的文档已不再维护。你现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。
使用 kubectl 管理 Secret
本页向你展示如何使用 kubectl 命令行工具来创建、编辑、管理和删除。 Kubernetes Secrets
准备开始
你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:
创建 Secret
Secret 对象用来存储敏感数据,如 Pod 用于访问服务的凭据。例如,为访问数据库,你可能需要一个 Secret 来存储所需的用户名及密码。
你可以通过在命令中传递原始数据,或将凭据存储文件中,然后再在命令行中创建 Secret。以下命令 将创建一个存储用户名 admin 和密码 S!B\*d$zDsb= 的 Secret。
使用原始数据
执行以下命令:
kubectl create secret generic db-user-pass \ --from-literal=username=admin \ --from-literal=password='S!B\*d$zDsb=' 你必须使用单引号 '' 转义字符串中的特殊字符,如 $、\、*、=和! 。否则,你的 shell 将会解析这些字符。
说明:
Secret 的 stringData 字段与服务端应用不兼容。
使用源文件
-
将凭据保存到文件:
echo -n 'admin' > ./username.txt echo -n 'S!B\*d$zDsb=' > ./password.txt-n标志用来确保生成文件的文末没有多余的换行符。这很重要,因为当kubectl读取文件并将内容编码为 base64 字符串时,额外的换行符也会被编码。 你不需要对文件中包含的字符串中的特殊字符进行转义。
-
在
kubectl命令中传递文件路径:kubectl create secret generic db-user-pass \ --from-file=./username.txt \ --from-file=./password.txt默认键名为文件名。你也可以通过
--from-file=[key=]source设置键名,例如:kubectl create secret generic db-user-pass \ --from-file=username=./username.txt \ --from-file=password=./password.txt
无论使用哪种方法,输出都类似于:
secret/db-user-pass created 验证 Secret
检查 Secret 是否已创建:
kubectl get secrets 输出类似于:
NAME TYPE DATA AGE db-user-pass Opaque 2 51s 查看 Secret 的细节:
kubectl describe secret db-user-pass 输出类似于:
Name: db-user-pass Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 12 bytes username: 5 bytes kubectl get 和 kubectl describe 命令默认不显示 Secret 的内容。 这是为了防止 Secret 被意外暴露或存储在终端日志中。
解码 Secret
-
查看你所创建的 Secret 内容
kubectl get secret db-user-pass -o jsonpath='{.data}'输出类似于:
{ "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
-
解码
password数据:echo 'UyFCXCpkJHpEc2I9' | base64 --decode输出类似于:
S!B\*d$zDsb=注意:
这是一个出于文档编制目的的示例。实际上,该方法可能会导致包含编码数据的命令存储在 Shell 的历史记录中。任何可以访问你的计算机的人都可以找到该命令并对 Secret 进行解码。 更好的办法是将查看和解码命令一同使用。
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
编辑 Secret
你可以编辑一个现存的 Secret 对象,除非它是不可改变的。 要想编辑一个 Secret,请执行以下命令:
kubectl edit secrets <secret-name> 这将打开默认编辑器,并允许你更新 data 字段中的 base64 编码的 Secret 值,示例如下:
#请编辑下面的对象。以“#”开头的行将被忽略, #空文件将中止编辑。如果在保存此文件时发生错误, #则将重新打开该文件并显示相关的失败。 apiVersion: v1 data: password: UyFCXCpkJHpEc2I9 username: YWRtaW4= kind: Secret metadata: creationTimestamp: "2022-06-28T17:44:13Z" name: db-user-pass namespace: default resourceVersion: "12708504" uid: 91becd59-78fa-4c85-823f-6d44436242ac type: Opaque 清理
要想删除一个 Secret,请执行以下命令:
kubectl delete secret db-user-pass 接下来
- 进一步阅读 Secret 概念
- 了解如何使用配置文件管理 Secret
- 了解如何使用 Kustomize 管理 Secret