使用 kubectl 管理 Secret
本页面展示如何使用 kubectl 命令行工具创建、编辑、管理和删除 Kubernetes Secret。
准备工作
你需要一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在至少有两个不充当控制平面主机的节点的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用以下 Kubernetes 演练场之一
创建 Secret
Secret 对象存储敏感数据,例如 Pod 用于访问服务的凭据。例如,你可能需要一个 Secret 来存储访问数据库所需的用户名和密码。
你可以通过在命令中传递原始数据,或者通过将凭据存储在文件中并通过命令传递文件来创建 Secret。以下命令创建一个 Secret,其中存储用户名 admin 和密码 S!B\*d$zDsb=。
使用原始数据
运行以下命令:
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 值,例如以下示例:
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file, it will be
# reopened with the relevant failures.
#
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