假设某个 Pod 需要访问数据库。在您执行 kubectl 命令所在机器的当前目录,创建文件 ./username.txt 文件和 ./password.txt 暂存数据库的用户名和密码,后续我们根据这两个文件配置 kubernetes secrets。

    1. echo -n 'admin' > ./username.txt
    2. echo -n '1f2d1e2e67df' > ./password.txt

    执行命令 kubectl create secret generic db-user-pass —from-file=./username.txt —from-file=./password.txt 在 Kubernetes APIServer 中创建 Secret 对象,并将这两个文件中的内容存储到该 Secret 对象中,输出结果如下所示:

    1. secret "db-user-pass" created

    TIP

    • 上述命令的执行效果与此命令执行效果相同: kubectl create secret generic db-user-pass –from-literal=username=admin –from-literal=password=1f2d1e2e67df
    • 如果您的密码中包含特殊字符需要转码(例如 $、、\、!),请使用 \ 进行转码。例如:实际密码为 S!B\d$zDsb,kubectl 命令应该写成 kubectl create secret generic dev-db-secret –from-literal=username=devuser –from-literal=password=S!B\*d\$zDsb。如果通过文件创建(—from-file),则无需对文件中的密码进行转码。

    执行命令 kubectl get secrets,检查 Secret 的创建结果,输出信息如下所示:

    1. NAME TYPE DATA AGE
    2. db-user-pass Opaque 2 51s

    执行命令 kubectl describe secrets/db-user-pass,查看 Secret 详情,输出信息如下所示:

    1. Name: db-user-pass
    2. Namespace: default
    3. Labels: <none>
    4. Annotations: <none>
    5. Type: Opaque
    6. Data
    7. ====
    8. password.txt: 12 bytes
    9. username.txt: 5 bytes

    TIP 默认情况下,kubectl get 和 kubectl describe 命令都避免展示 Secret 的内容。这种做法可以避免密码被偷窥,或者被存储到终端的日志中

    参考 解码 了解如何查看 Secret 中存储的内容