Kubernetes管理Secret

2024-02-20 48

Kubernetes中,Secrets是一种用来存储敏感信息如密码、OAuth令牌、SSH密钥等的API对象。它们被设计为以安全的方式管理这些数据,确保只有授权的Pods可以访问。本教程主要介绍如何使用kubectl命令行工具创建、修改、查看和删除Secrets,从而有效地保护应用程序配置中的敏感数据。

一、准备

必须拥有一个 Kubernetes 的集群,同时必须配置 kubectl 命令行工具与集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 如果还没有集群,可以通过 Minikube 构建一个自己的集群。

二、创建Secret

Secret 对象用来存储敏感数据,如 Pod 用于访问服务的凭据。例如,为访问数据库,可能需要一个 Secret 来存储所需的用户名及密码。

可以通过在命令中传递原始数据,或将凭据存储文件中,然后再在命令行中创建 Secret。以下命令将创建一个存储用户名 admin 和密码 S!B\*d$zDsb= 的 Secret。

1、使用原始数据

执行以下命令:

kubectl create secret generic db-user-pass \
--from-literal=username=admin \
--from-literal=password='S!B\*d$zDsb='

注意:

  • 必须使用单引号 ” 转义字符串中的特殊字符,如 $、\、*、=和! 。否则, shell 将会解析这些字符;
  • Secret 的 stringData 字段与服务端应用不兼容。

2、使用源文件

将凭据保存到文件:

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

1、查看所创建的 Secret 内容

kubectl get secret db-user-pass -o jsonpath='{.data}'

输出类似于:

{ "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }

2、解码 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
  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。