守护你的敏感数据:Kubernetes Secret的创建与管理之道

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

 1、k8s简介

2、Secret简介 

3、Secret与ConfigMap的区别 

二、Secret的基本概念 

1、Secret的组成

2、Secret的生命周期 

3、Secret的类型

三、Secret的创建与管理

1、从文件创建 

2、从字面量创建

3、Secret的更新与删除 

4、Secret的版本控制


一、前言

 1、k8s简介

Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。

Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

 有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

2、Secret简介 

Kubernetes Secret是一种资源对象,用于在集群中安全地存储和管理敏感数据,如密码、密钥、证书等。与ConfigMap类似,Secret也可以存储配置信息,但它专门用于敏感数据,并提供了额外的安全特性来保护这些数据。

Secret的主要用途包括:

  • 存储凭证:如数据库密码、API密钥、OAuth令牌等,避免了在应用程序代码中直接包含机密数据。
  • TLS证书:可以存储HTTPS服务器的私钥和证书,用于加密通信。
  • 配置加密数据:用于安全地管理任何敏感配置,如应用程序的配置信息。

Secret的创建和管理提供了多种灵活性和安全性。可以通过kubectl命令行工具创建Secret,也可以通过API进行编程创建。Secret可以以环境变量或文件的形式注入到Pod中,供容器使用。

   

3、Secret与ConfigMap的区别 

Secret和ConfigMap都是Kubernetes中用于存储和传递应用程序配置信息的对象,但它们有一些重要的区别:

数据类型:

  • Secret用于存储敏感数据,如密码、API令牌、TLS证书等。
  • ConfigMap用于存储非敏感的配置数据,如应用程序配置文件、环境变量等。

安全性:

  • Secret中的数据是以Base64编码形式存储的,并且在存储和传输过程中会进行加密,因此适合存储敏感数据。
  • ConfigMap中的数据不加密,适合存储非敏感数据。

用途:

  • Secret主要用于存储应用程序需要的凭据或敏感信息,如数据库密码、API密钥等。
  • ConfigMap主要用于存储应用程序的配置信息,如配置文件、环境变量等。

管理方式:

  • Secret可以通过kubectl命令行工具或Kubernetes API进行管理和部署。
  • ConfigMap也可以通过kubectl命令行工具或Kubernetes API进行管理和部署。

适用场景:

  • 当需要存储和传递敏感数据时,应使用Secret。
  • 当需要存储和传递非敏感的配置信息时,应使用ConfigMap。

二、Secret的基本概念 

1、Secret的组成

在Kubernetes中,Secret由以下几个组成部分构成:

  • 元数据(Metadata):包含了Secret的名称、命名空间、标签等信息,用于唯一标识和管理/        Secret对象。
  • 数据(Data):Secret中存储的实际数据,以键值对的形式存在。这些数据可以是任意类型的,但在存储和传输过程中会进行Base64编码,以增加安全性。
  • 类型(Type):指示Secret中存储的数据类型。常见的类型包括Opaque、ServiceAccountToken等。其中,Opaque类型用于存储任意类型的数据,而ServiceAccountToken类型用于存储服务账户的访问令牌。

综上所述,Secret由元数据、数据和类型组成,其中数据部分存储了实际的配置信息,而元数据用于唯一标识和管理Secret对象,类型则指示了Secret中存储的数据类型。

2、Secret的生命周期 

Secret的生命周期包括创建、更新和删除三个阶段:

  • 创建(Creation):Secret可以通过命令行工具(如kubectl)或通过Kubernetes API创建。在创建Secret时,需要指定Secret的元数据和数据内容。
  • 更新(Update):Secret的更新可以通过命令行工具或通过API进行。更新Secret时,可以修改Secret的元数据和数据内容。更新操作通常会触发相关的容器重新启动或配置重新加载等操作,以确保新的配置信息生效。
  • 删除(Deletion):Secret可以通过命令行工具或通过API进行删除。删除Secret时,其中存储的敏感信息将被永久移除,不再可恢复。删除Secret后,相关的应用程序可能需要重新配置或重新部署,以适应新的环境。

   

3、Secret的类型

Kubernetes中的Secret有不同的类型,用于存储不同类型的敏感信息。常见的Secret类型包括:

  • Opaque:这是最常用的Secret类型,用于存储任意类型的键值对数据,如用户名、密码、API密钥等。Opaque类型的Secret可以通过base64编码存储数据。
  • Docker Registry:用于存储访问私有Docker仓库所需的认证信息,包括用户名、密码等。
  • TLS:用于存储TLS证书和私钥,用于加密通信和身份验证。
  • Service Account Token:用于自动将Service Account相关的凭据注入到Pod中,以便Pod能够访问Kubernetes API等资源。
  • SSH:用于存储SSH密钥,用于远程访问和身份验证。
  • Generic:类似于Opaque类型,用于存储任意类型的键值对数据,但是Generic类型的Secret不会进行base64编码。

三、Secret的创建与管理

1、从文件创建 

要使用kubectl创建一个从文件创建的Secret,我们可以按照以下步骤操作:

准备包含敏感信息的文件。例如,如果要创建一个包含用户名和密码的Secret,可以创建一个包含这些信息的文本文件。

确保敏感信息已经使用base64编码。kubectl创建Secret时,它会期望数据是base64编码的。

使用以下命令创建Secret:

kubectl create secret generic my-secret --from-file=path/to/your/file.txt


在这个命令中,my-secret是要创建的Secret的名称,path/to/your/file.txt是包含敏感信息的文件的路径。

确认Secret已经创建成功:

kubectl get secret my-secret


这将显示名为my-secret的Secret的详细信息,包括它的类型和数据。

2、从字面量创建

使用以下命令创建Secret:

kubectl create secret generic my-secret --from-literal=username=myuser --from-literal=password=mypassword


在这个命令中,my-secret是要创建的Secret的名称,--from-literal标志后面跟着键值对,表示要包含在Secret中的数据。在上面的示例中,我们创建了一个名为my-secret的Secret,并将用户名和密码作为字面量数据添加到其中。

请注意,使用该方法创建的Secret中的数据将以明文存储,而不会进行base64编码。因此,谨慎处理包含敏感信息的Secret,并确保只向受信任的实体授予访问权限。

3、Secret的更新与删除 

要更新Secret,我们可以使用kubectl apply命令或编辑Secret的YAML文件,然后使用kubectl apply -f命令将更改应用到集群中。

使用kubectl apply命令更新Secret:

kubectl apply -f updated-secret.yaml


在这个命令中,updated-secret.yaml是包含更新内容的Secret的YAML文件。

编辑Secret的YAML文件,并使用kubectl apply -f命令应用更改:
首先编辑Secret的YAML文件,然后保存更改。接着,运行以下命令:

kubectl apply -f updated-secret.yaml


这将在集群中更新Secret。

要删除Secret,可以使用kubectl delete secret命令:

kubectl delete secret my-secret


这将删除名为my-secret的Secret。

4、Secret的版本控制

Kubernetes本身不提供Secret的版本控制功能,但可以通过一些外部工具或实践来实现Secret的版本控制。

一种常见的做法是使用版本控制系统(如Git)来管理Secret的YAML文件。可以将Secret的YAML文件保存在Git仓库中,并使用Git来跟踪和管理Secret的版本。每次更新Secret时,都可以将其保存为一个新的提交,并在需要时回滚到之前的版本。

另一种方法是使用配置管理工具(如Helm)来管理Secret。Helm可以帮助我们定义和版本控制Kubernetes资源,包括Secret。可以使用Helm的值文件来定义Secret,并使用Helm来安装、升级和回滚Secret。

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明明跟你说过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值