kubernetes之secret
Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。
Secret类型:
- Opaque:base64编码格式的Secret,用来存储密码、密钥等;但数据也通过base64 –decode解码得到原始数据,所有加密性很弱。
- kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。
- kubernetes.io/service-account-token: 用于被serviceaccount引用。serviceaccout创建时Kubernetes会默认创建对应的secret。Pod如果使用了serviceaccount,对应的secret会自动挂载到Pod目录/run/secrets/kubernetes.io/serviceaccount中。
1.Opaque Secret
Opaque类型的数据是一个map类型,要求value是base64编码格式: 比如来创建一个用户名为:admin,密码为: 1f2d1e2e67df的Secret 对象,首先把这用户名和密码做base64编码,
1 |
$ echo -n "admin" | base64 |
然后就可以利用上面编码过后的数据来编写一个YAML文件:(secrets.yml)
1 |
apiVersion: v1 |
同样的就可以使用kubectl命令来创建了: 创建secret:kubectl create -f secrets.yml。
1 |
# kubectl get secret |
注意:其中default-token-xxx为创建集群时默认创建的secret,被serviceacount/default引用。 可以使用describe命令查看详情,如果想看到Data里面的详细信息,可以输出成YAML文件进行查看
如果是从文件创建secret,则可以用更简单的kubectl命令,比如创建tls的secret:
1 |
$ kubectl create secret generic helloworld-tls \ |
2.Opaque Secret的使用
创建好secret之后,有两种方式来使用它:
- 以Volume方式
- 以环境变量方式
- 以Volume方式挂载制定的key
将Secret挂载到Volume中
用一个Pod来验证下Volume挂载,创建一个Pod文件:(secret2-pod.yaml)
1 |
apiVersion: v1 |
查看Pod中对应的信息:
1 |
# ls /etc/secrets |
查看输出日志:
1 |
$ kubectl logs secret2-pod |
可以看到secret把两个key挂载成了两个对应的文件。
将Secret导出到环境变量中
1 |
apiVersion: extensions/v1beta1 |
主要上面环境变量中定义的secretKeyRef关键字,和configMapKeyRef比较类似,一个是从Secret对象中获取,一个是从ConfigMap对象中获取
创建上面的Pod:
1 |
$ kubectl create -f secret1-pod.yaml |
然后查看Pod的日志输出:
1 |
$ kubectl logs secret1-pod |
可以看到有 USERNAME 和 PASSWORD 两个环境变量输出出来。
将Secret挂载指定的key
1 |
apiVersion: v1 |
可以直接用kubectl命令来创建用于docker registry认证的secret:
1 |
$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL |
查看secret的内容:
1 |
# kubectl get secret myregistrykey -o yaml |
也可以直接读取~/.dockercfg的内容来创建:
1 |
$ kubectl create secret docker-registry myregistrykey \ |
在创建Pod的时候,通过imagePullSecrets来引用刚创建的myregistrykey:
1 |
apiVersion: v1 |
kubernetes.io/service-account-token: 用于被serviceaccount引用。serviceaccout创建时Kubernetes会默认创建对应的secret。Pod如果使用了serviceaccount,对应的secret会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中。
1 |
$ kubectl run nginx --image nginx |
Secret与ConfigMap对比
相同点:
- key/value的形式
- 属于某个特定的namespace
- 可以导出到环境变量
- 可以通过目录/文件形式挂载(支持挂载所有key和部分key)
不同点:
- Secret可以被ServerAccount关联(使用)
- Secret可以存储register的鉴权信息,用在ImagePullSecret参数中,用于拉取私有仓库的镜像
- Secret支持Base64加密
- Secret分为kubernetes.io/Service Account,kubernetes.io/dockerconfigjson,Opaque三种类型,Configmap不区分类型
- Secret文件存储在tmpfs文件系统中,Pod删除后Secret文件也会对应的删除。
实例配置:
[root@test-master03 ~]# kubectl -n xitu-qa02 create secret generic apiclient02 --from-file=dingyu=apiclient_cert.p12
secret/apiclient02 created root@test-master03 ~]# kubectl get secret -n xitu-qa02
NAME TYPE DATA AGE apiclient02 Opaque 1 22m
阿里云k8s 保密字典信息
阿里云k8s 应用里挂载 保密字典
kubernetes之secret的更多相关文章
- Kubernetes的Secret对象的使用
Secret可以想要访问的加密数据,存放到Etcd中,Pod可以通过的Volume的方式,访问到Secret保存的信息 ,当数据修改的时候,Pod挂载的Secret文件也会被修改 一.创建Secret ...
- kubernetes Configmap secret的使用
kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件.如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据 ...
- kubernetes配置secret拉取私仓镜像
2017.05.10 19:48* 字数 390 阅读 5216评论 0喜欢 8 对于公司内部的项目, 我们不可能使用公有开放的镜像仓库, 一般情况可能会花钱买docker私仓服务, 或者说自己在服务 ...
- Kubernetes里的secret最基本的用法
Secret解决了密码.token.密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中. Secret可以以Volume或者环境变量的方式使用 ...
- Kubernetes因限制内存配置引发的错误
今天对一个pod进行内存资源调整后, 一直卡在ContainerCreating的状态, 执行describe命令查看该 Pod 详细信息后发现如下 . [root@master-01 ~]# kub ...
- 关于 Kubernetes 中的 Volume 与 GlusterFS 分布式存储
容器中持久化的文件生命周期是短暂的,如果容器中程序崩溃宕机,kubelet 就会重新启动,容器中的文件将会丢失,所以对于有状态的应用容器中持久化存储是至关重要的一个环节:另外很多时候一个 Pod 中可 ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- 微服务开发有道之把项目迁移到Kubernetes上的5个小技巧
我们将在本文中提供5个诀窍帮你将项目迁移到Kubernetes上,这些诀窍来源于过去12个月中OpenFaas社区的经验.下文的内容与Kubernetes 1.8兼容,并且已经应用于OpenFaaS ...
- 在Kubernetes中部署GlusterFS+Heketi
目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...
随机推荐
- 大数据之路week07--day07 (修改mysql默认编码)
在Sqoop导入或者导出,我们在查看mysql的时候会出现中文乱码大部分乱码会是?这样的问号,那么该怎么处理呢? 1.打开my.cnf文件 vim /etc/my.cnf 2.找到对应需要修改的地方 ...
- UVALive - 4097:Yungom(逼近 贪心)(DP)
pro:有D个字母,每个字母有自己的权值,现状需要用它们拼出N个单词,使得这些单词互相不为另外一个的前缀. 且单词的权值和最小.D<=200; N<=200; sol:如果建立字典树,那个 ...
- django-用户认证模型
django本身会在mysql里存储一个user数据库 为了和django本身的user表区分 要在第一次迁移数据库前配置认证系统使用的用户模型 settings.py # django认证系统使用的 ...
- 爬虫 - 请求库之requests
介绍 使用requests可以模拟浏览器的请求,比起python内置的urllib模块,requests模块的api更加便捷(本质就是封装了urllib3) 注意:requests库发送请求将网页内容 ...
- 解决Mac外接显示器字体模糊的问题
Mac外接显示器时,除非接的是Apple自家的显示器“ACD”,不然一般会遇到字体模糊发虚的问题.在终端中执行命令: defaults -currentHost write -globalDomain ...
- MyBatis框架-ResultMap节点
需求:查询结果要求显示用户名,用户密码,用户的角色 因为在用户表中只有用户角色码值,没有对应的名称,角色名称是在码表smbms_role表中,这时我们就需要联表查询了. 之前我们使用的是给查询结果字段 ...
- 纯js房贷计算器开源
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringSecurity 整合 JWT
项目集成Spring Security(一) 在上一篇基础上继续集成 JWT ,实现用户身份验证. 前言 前后端分离项目中,如果直接把 API 接口对外开放,我们知道这样风险是很大的,所以在上一篇中我 ...
- 【JZOJ6222】【20190617】可爱
题目 给定一个长度为\(n\)的串,定义两个串匹配当且仅当两个串长度相同并且不同字符至多一个 对于每一个长度为\(m\)的子串输出和它匹配的子串个数 $1 \le n \le 10^5 , m \ ...
- 算法:贪心、回溯(su)、分治、动态规划,思想简要
贪心算法: 只做出当前看来最好的选择,而不从整体考虑最优,他所作出的是局部最优解.使用该算法的前提是必须具备无后效性,即某个状态以前的选择不会影响以后的状态的选择,只与当前状态有关. 回溯算法: 本质 ...