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希望可以获得宝贵的意见. ...
随机推荐
- airflow迁移
airflow迁移:airflow.cfg文件可以copydbinit时改数据参数 #airflow震乾源码copy:/data/venv/lib/python3.6/site-packages/ai ...
- 【LOJ】#3109. 「TJOI2019」甲苯先生的线段树
LOJ#3109. 「TJOI2019」甲苯先生的线段树 发现如果枚举路径两边的长度的话,如果根节点的值是$x$,左边走了$l$,右边走了$r$ 肯定答案会是$(2^{l + 1} + 2^{r + ...
- php exec执行不等待返回结果
windows中:pclose(popen("start php.exe test.php","r"));lnuix中: pclose(popen(" ...
- Smarty内置函数之capture
capture的作用是: 捕获模板输出的数据并将其存储到一个变量,而不是把它们输出到页面,任何在 {capture name="foo"}和{/capture}之间的数据将被存储到 ...
- PHP以table形式导出数据表实现单元格内换行
<br style='mso-data-placement:same-cell;'>
- python 2 和 python 3的区别
python2和python3区别 python2:源码不统一,源码(功能)重复,维护困难,除法的时候返回来的是小数点,()浮点数 python3:源码统一,源码不重复,除法的时候返回来的是整 ...
- uname、hostname命令
一.uname:显示系统信息. 语法: uname [OPTION] ... 描述 打印某些系统信息. 没有选项,与-s相同. -a,--all ...
- 2 - sat 模板(自用)
2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一 POJ 3207 Ikki's Story IV ...
- Codeforces 1238C. Standard Free2play
传送门 题目别看错了,好像挺多人都读错了... 然后显然可以贪心,只有在需要用 $\text{magic crystals}$ 的时候才用 那么直接模拟即可 如果初始相邻两个突出的平台高度不连续那么我 ...
- ZROIDay4-比赛解题报告
ZROIDay4-比赛解题报告 扯闲话 感觉这个出题人的题做起来全都没感觉啊,今天又凉了,T1完全不知道什么意思,T2只会暴力,T3现在还不懂什么意思,真的太菜了 A 题意半天没搞懂爆零GG了,讲了一 ...