Kubernetes数据持久化之Secret与ConfigMap

ConfigMap和Secret是Kubernetes中两种特殊类型的存储卷,ConfigMap这种资源对象主要用于提供配置数据以定制程序行为,不过一些敏感的配置信息,比如像用户名、密码、密钥等通常都是由Secret这种资源对象来进行配置的,他们将相应的配置信息保存于对象中,而后在Pod资源上以存储卷的形式将其挂载并获取相应配置,以实现配置与镜像文件的解耦。

一、Secret资源对象

1) Secret概述
Secret资源对象存储数据的方式是以键值对的方式进行存储的,在Pod资源进行Secret的方式是通过环境变量或存储卷的方式进行访问数据,解决了密码、token、密钥等敏感数据的配置问题,而不需要将这些敏感数据暴露到镜像或者Pod的spec字段中。另外,Secret对象的数据存储和打印格式为Base64编码的字符串,因此用户在创建Secret对象时,也需要提供该类型的编码格式的数据。在容器中以环境变量或存储卷的方式访问时,会自动解码为明文格式。需要注意的是,如果是在Master节点上,Secret对象以非加密的格式存储在etcd中,所以需要对etcd的管理和权限进行严格控制。

2)Secret资源的类型
Secret有四种类型:

1)Service Account :用来访问Kubernetes
API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;
2)Opaque :base64编码格式的Secret,用来存储密码、密钥、信息、证书等,类型标识符为generic;
3)kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息,类型标识为docker-registry;
4)kubernetes.io/tls:用于为SSL通信模式存储证书和私钥文件,命令式创建类型标识为tls;

3)创建Secret的方式
假设存储的数据是:
username:root
password:123.com
以下的存储方式都是存储该信息!

1)使用–from-literal(文字)的方式

[root@master ~]# kubectl create secret generic mysecret01 --from-literal=username=root --from-literal=password=123.com
#创建一个secret资源对象,名称为mysecret01,采用的加密方式是generic(通用的、一般的加密方式)
#注意:这种方式每一条只能保存一条信息
[root@master ~]# kubectl get secrets mysecret01 
NAME         TYPE     DATA   AGE
mysecret01   Opaque   2      25s
[root@master ~]# kubectl describe secrets mysecret01     #查看该资源的详细信息
Name:         mysecret01
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque                         #不透明的,看不到的

Data
====
password:  7 bytes                     #只能查看键的名称,无法查看到键对应的值
username:  4 bytes
[root@master ~]# kubectl get secrets mysecret01 -o yaml            
#将该资源以yaml文件的方式进行显示
apiVersion: v1
data:
  password: MTIzLmNvbQ==                       #键对应的值都是乱码,加密使用的是base64编码格式
  username: cm9vdA==
kind: Secret
metadata:
  creationTimestamp: "2020-02-14T10:08:21Z"
  name: mysecret01
  namespace: default
  resourceVersion: "2474"
  selfLink: /api/v1/namespaces/default/secrets/mysecret01
  uid: 1aee0635-7bfb-4e8a-a21e-be993e534156
type: Opaque
[root@master ~]# echo -n cm9vdAo= | base64 --d              #将乱码解码后的结果
root
[root@master ~]# echo -n MTIzLmNvbQ== | base64 --d
123.com

2)使用–from-file(文件)的方式
这种方式更第一种方式差不多,可能稍微显得麻烦一些!

[root@master ~]# echo root > username
[root@master ~]# echo 123.com > password
#需要先将要存储的键值对写入到文件中,并且每个文件只能写入一个值
[root@master ~]# kubectl create secret generic mysecret02 --from-file=us
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值