Kubernetes学习之Secret

一、认识Secret
  Secret资源的功能类似于ConfigMap,但是它专用于存放敏感数据,例如密码、数字证书、私钥、令牌和SSH key等。
  Secret对象存储数据的方式及使用方法类似于ConfigMap对象,以键值对方式存储数据,在Pod资源中通过环境变量或存储卷进行数据访问。不同的是,Secret对象仅会被分发至调用了此对象的Pod资源所在的工作节点,且只能由节点将其存储于内存中。另外,Secret对象的数据的存储及打印格式为Base64编码的字符串,因此用户在创建Secret对象时也要提供此种编码格式的数据。不过,在容器中以环境变量或存储卷的方式访问时,它们会被自动解码为明文格式。
  需要注意的是,在Master节点上,Secret对象以非加密的格式存储于etcd中,因此管理员必须加以精心管控以确保敏感数据的机密性,必须确保etcd集群节点间以及与API Server的安全通信,etcd服务的访问授权,还包括用户访问API Server时的授权,因为拥有创建Pod资源的用户都可以使用Secret资源并能够通过Pod中的容器访问其数据。
  Secret对象主要有两种用途,一是作为存储卷注入到Pod上由容器应用程序所使用,二是用于kubelet为Pod里的容器拉取镜像时向私有仓库提供认证信息。不过,后面使用ServiceAccount资源自建的Secret对象是一种更安全的方式。通过ConfigMap和Secret配置容器的方式如下图:
在这里插入图片描述
  Secret资源主要由四种类型组成,具体如下:
  Opaque:自定义数据内容;base64编码,用来存储密码、秘钥、信息、证书等数据,类型标识符为generic。
  kubernetes.io/service-account-token:Service Account的认证信息,可在创建Servcie Account时由Kubernetes自动创建。
  kubernetes.io/dockerconfigjson:用来存储Docker镜像仓库的认证信息,类型标识为docker-registry。
  kubernetes.io/tls:用于为SSL通信模式存储证书和私钥文件,命令式创建时类型标识为tls。

二、命令式创建Secret资源
  不少场景中,Pod中的应用都需要通过用户名和面来访问其他服务,例如访问数据库系统等等。创建此类的Secret对象时,可以使用"kubelet create secret generic <SECRET_NAME> --from-literal=key=value"命令直接进行创建,不过为用户认证之需进行创建时,其使用的键名通常是username和password。例如下面的例子,以"root/123456"分别为用户名和密码创建了一个名为mysql-auth的Secret对象:

1)创建Secret资源对象

]# kubectl create secret generic mysq-auth --from-literal=username=root --from-literal=password=123456
secret/mysq-auth created

2)查看Secret资源对象的详细信息

]# kubectl get secret -o wide 
NAME                  TYPE                                  DATA   AGE
mysq-auth             Opaque                                2      17s

]# kubectl describe secret mysql-auth
Name:         mysql-auth
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  6 bytes
username:  4 bytes

# kubectl get secret mysql-auth -o yaml 
apiVersion: v1
data:
  password: MTIzNDU2
  username: cm9vdA==
kind: Secret
metadata:
  creationTimestamp: "2020-08-30T09:56:41Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {
   }
        f:password: {
   }
        f:username: {
   }
      f:type: {
   }
    manager: kubectl
    operation: Update
    time: "2020-08-30T09:56:41Z"
  name: mysql-auth
  namespace: default
  resourceVersion: "6479799"
  selfLink: /api/v1/namespaces/default/secrets/mysql-auth
  uid: e6c28302-9480-408f-a657-6ba23869c833
type: Opaque

3)尝试解密查看数据内容

]# echo cm9vdA== | base64 -d 
root

]# echo MTIzNDU2 | base64 -d 
123456

4)使用文件创建Secret资源对象
  对于本身已经已存储于文件中的数据,也可以在创建generic格式Secret对象时使用"–from-file"选项从文件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值