k8sSecret资源
Secret资源的功能类似于ConfigMap,但它专用于存放敏感数据,如密码、数字证书、私钥、令牌和ssh key等。
一、概述
Secret对象存储数据以键值方式存储数据,再pod资源中通过环境变量或存储卷进行数据访问。Secret对象仅会被分发至调用了此对象的pod资源所在的工作节点,且只能由节点将其存储于内存中。另外,Secret对象的数据的存储及打印格式为base64编码的字符串,因此用户在创建对象时也要提供此种编码格式的数据。不过,在容器中以环境变量或存储卷的方式访问时,他们会被自动解码为明文格式。
在master节点上,Secret对象以非加密的格式存储于etcd中,因此管理员必须加以精心管控以确保敏感数据的机密性,必须确保etcd集群节点间以及与APIserver的安全通信,etcd服务的访问授权,还包括用户访问APIServer时的授权,因为拥有创建pod资源的用户都可以使用Secret资源并能够通过pod中的容器访问其数据。
Secret对象主要有两种用途,一是作为存储卷注入到pod上,由容器应用程序所使用,二是用于kubelet为pod里的容器拉取镜像时向私有仓库提供认证信息。Secret资源主要有四种类型组成:
1、Opaque:自定义数据内容;base64编码,用来存储密码、密钥、信息、证书等数据,类型标识符为generic
2、kubernetes.io/service-account-token:ServiceAccount的认证信息,可在创建service account时由kubernetes自动创建
3、kubernetes.io/dockerconfigjson: 用来存储Docker镜像仓库的认证信息,类型标识符为docker-registry
4、kubernetes.io/tls:用于为ssl通信模式存储证书和私钥文件,命令式创建时类型标识符为tls。
二、创建Secret资源
1、命令式创建
$ kubectl -n testing create secrete generic mysql-auth --from-literal=username=root --from-literal=password=
[root@master secret]# kubectl -n testing get secret
NAME TYPE DATA AGE
default-token-hs2jc kubernetes.io/service-account-token 24d
mysql-auth Opaque 15s
[root@master secret]# kubectl -n testing describe secret mysql-auth
Name: mysql-auth
Namespace: testing
Labels: <none>
Annotations: <none> Type: Opaque Data
====
password: bytes
username: bytes
[root@master secret]# kubectl -n testing get secret mysql-auth -o yaml
apiVersion: v1
data:
password: MTIzNDU2
username: cm9vdA==
kind: Secret
metadata:
creationTimestamp: "2019-08-20T05:38:39Z"
name: mysql-auth
namespace: testing
resourceVersion: ""
selfLink: /api/v1/namespaces/testing/secrets/mysql-auth
uid: c37a3fc1-c30c-11e9-8f53-000c29b9991f
type: Opaque [root@master secret]# echo cm9vdA== | base64 -d
root
对于本身业已存储于文件中的数据,也可在创建generic格式secret对象时使用--from-file选项从文件中直接进行加载,例如创建用于ssh认证的secret对象时:
$ kubectl -n testing create secret generic ssh-key --from-file=prikey=/root/.ssh/id_rsa --from-file=pubkey=/root/.ssh/id_rsa.pub
另外,若要基于私钥和数字证书文件创建用于ssl/tls通信的secret对象,则需要使用--cert=--key=选项来进行,其类型标识符为TLS:
$ kubectl -n testing create secret tls nginx-ssl --key=./nginx.key --cert=./nginx.crt
[root@master secret]# kubectl -n testing describe secret nginx-ssl
Name: nginx-ssl
Namespace: testing
Labels: <none>
Annotations: <none> Type: kubernetes.io/tls Data
====
tls.crt: bytes
tls.key: bytes
无论用户提供的证书和私钥文件使用的是什么名称,它们一律会被转换为分别以tls.key和tls.crt为其键名。
2、清单式创建
secret资源对象除了标准的apiVersion、kind、metadata字段外,还有:
data:key:value格式的数据,通常是敏感信息,数据格式需是以base64格式编码的字符串,因此,需要事先完成编码。
stringData:以明文格式定义的key:value数据,非base64编码,而是在创建为secret对象时自动进行编码并保存于data字段中;stringData字段中的明文不会被api server输出,不过若是使用apply命令创建,那么注解信息中还是可能会直接输出这些信息的
type:仅是为了便于编程方式处理secret数据而提供的类型标识。
apiVersion: v1
kind: Secret
metadata:
name: redis-sct
namespace: testing
stringData:
username: redis
password: 123pass
type: Opaque
根据此配置清单,使用apply命令创建后,用describe命令会输出未转换为base64编码的字符,若使用create命令创建,则输出base64编码后的字符。
三、secret存储卷
类似于pod消费configmap对象的方式,secret对象可以注入为环境变量,也可以存储为卷形式挂载使用。不过,容器应用通常会在发生错误时将所有环境变量保存于日志信息中,甚至有些应用在启动时即会将运行环境打印到日志中;另外,容器应用调用第三方程序为子进程时,这些子进程能够继承并使用父进程的所有环境变量。有鉴于此,使用环境变量引用secret对象中的敏感信息实在算不上明智之举。
在pod中使用secret存储卷的方式,除了其类型及引用标识要替换为secret及secretName之外,几乎完全类似于ConfigMap存储卷,包括支持使用挂载整个存储卷、只挂载存储卷中的指定键值以及独立挂载存储卷中的键等使用方式。
apiVersion: v1
kind: Pod
metadata:
name: vol-sct-pod
namespace: testing
spec:
containers:
- name: nginx
image: nginx:1.12-alpine
volumeMounts:
- name: ngx-crt
mountPath: /etc/nginx/ssl
readOnly: true
volumes:
- name: ngx-crt
secret:
secretName: nginx-ssl
/etc/nginx/ssl # ls -l
total
lrwxrwxrwx root root Aug : tls.crt -> ..data/tls.crt
lrwxrwxrwx root root Aug : tls.key -> ..data/tls.key
/etc/nginx/ssl # pwd
/etc/nginx/ssl
四、imagePullSecret资源对象
imagePullSecret资源可用于辅助kubelet从需要认证的私有镜像仓库获取镜像,它通过将secret提供的密码传递给kubelet从而在拉取镜像前完成必要的认证过程。使用imagePullSecret的方式有两种:一是创建docker-registry类型的secret对象,并在定义pod资源时明确通过imagePullSecret字段给出;另一个是创建docker-registry类型的secret对象,将其添加到某特定的serviceaccount对象中,那些使用该serviceaccount资源创建的pod对象,以及默认使用该serviceaccount的pod对象都将会直接使用imagePullSecret中的认证信息。
kubectl -n testing create secret docker-registry test-reg --docker-username=cabel --docker-password= --docker-email=zhangcaibao@.com
apiVersion: v1
kind: Pod
metadata:
name: sct-image
namespace: testing
spec:
imagePullSecrets:
- name: test-reg
containers:
- name: vpn
image: cabel/openvpn:v2.
k8sSecret资源的更多相关文章
- Fis3的前端工程化之路[三大特性篇之资源定位]
Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- ABP文档 - 嵌入的资源文件
文档目录 本节内容: 简介 创建嵌入的文件 暴露嵌入的文件 使用嵌入的文件 简介 一个web应用里,客户端包含javascript,css,xml等文件,这此文件被添加到一个web项目后,发布成独立的 ...
- 【资源】.Net 入门@提高 - 逆天的高薪之路!
入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~ 官方学习计划 http://www.cnblogs.com/dunitian/p/5667901.html ----- ...
- 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?
0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...
- Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容
我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...
- 一个表缺失索引发的CPU资源瓶颈案例
背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...
- 【NLP】Python NLTK获取文本语料和词汇资源
Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...
- Python多线程爬虫爬取电影天堂资源
最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...
随机推荐
- (5.14)mysql高可用系列——级联复制与多主一从
目录: [0]实验需求 级联复制,201为主库,202为从库/同时为203的主库,203为202的从库[1]实验环境 级联:A->B->C 实践思路: (1)直接拿A的xtrabackup ...
- 【LOJ】#2985. 「WC2019」I 君的商店
LOJ#2985. 「WC2019」I 君的商店 一道很神仙的题啊QAQ 居然是智商题--不是乱搞或者是大数据 我们可以用2N问出一个最大值是1 然后对于任意两个值\(x + y\)和\(a\)比较 ...
- Luogu P2495 [SDOI2011]消耗战
题目 我们可以很快的想到一个单次\(O(n)\)的dp. 然后我们注意到这个dp有很多无用的操作,比如一条没有关键点的链可以直接去掉. 所以我们可以尝试一次dp中只管那些有用的点. 题目给的关键点显然 ...
- py2和py3之间的不同
1.print函数 很琐碎,而 print 语法的变化可能是最广为人知的了,但是仍值得一提的是: Python 2 的 print 声明已经被 print() 函数取代了,这意味着我们必须包装我们想打 ...
- Springboot导出Excel并下载
引入相关依赖 <!--数据导出excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> & ...
- Codeforces 1237D. Balanced Playlist
传送门 首先显然的,如果一个位置开始播放了两圈还没结束,那么就永远不会结束 先考虑位置 $1$ 开始播放,用一个 $multisetset$ 维护一下当前听的所有歌,直到某一首歌 $r$ 不合法了就停 ...
- 树莓派3B+和3B 安装64位debian GUN/Linux系统
请直接参考如下博客: https://blog.csdn.net/u013451404/article/details/80710136 如果是3B的树莓派用户,只需要把第一个分区boot里的.dtb ...
- C#中word文档转html
var path = Request.Url.Host + ":" + Request.Url.Port + list[i].AnnexPath; //html保存路径 strin ...
- 深入探讨java的类加载器
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1.0 就出现了,最初是为了满足 Ja ...
- 深入理解hadoop之HDFS
深入理解hadoop之HDFS 刚刚才写完关于mapreduce的一篇博文,趁热打铁接下来聊聊HDFS.本博文参考资料为HADOOP权威指南第3版完版,博文如有错漏之处,敬请指正. HDFS即Hado ...