运维实操——kubernetes(九)存储之Secret配置管理Service Account、Opaque、dockerconfigjson
存储之Secret配置管理Service Account、Opaque、dockerconfigjson
- 1、什么是Secret?
- 2、Service Account
- 3、Opaque
- (1)从文件中创建Secret
- (2)使用yaml文件创建secret
- (3)将Secret挂载到Volume中
- (4)向指定路径映射 secret 密钥
- (5)将Secret设置为环境变量
- 3、kubernetes.io/dockerconfigjson
1、什么是Secret?
Secret是存储中的一种,主要用于保存敏感信息,例如密码、OAuth 令牌和 ssh key。 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。
Pod 主要有两种方式使用 secret:
(1)作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里。
(2)当 kubelet 为 pod 拉取镜像时使用。
Secret的类型:
(1)Service Account:Kubernetes 自动创建包含访问 API 凭据的 secret,并自动修改 pod 以使用此类型的 secret。
(2)Opaque:使用base64编码存储信息,可以通过base64 --decode解码获得原始数据,因此安全性弱。
(3)kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息
2、Service Account
serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。对应的 secret 会自动挂载到 Pod 的/run/secrets/kubernetes.io/serviceaccount
目录中。
kubectl run demo --image=myapp:v1
进入emo查看
每个namespace下有一个名为default的默认的ServiceAccount对象
ServiceAccount里有一个名为Tokens的可以作为Volume一样被Mount到Pod里的Secret,当Pod启动时这个Secret会被自动Mount到Pod的指定目录下,用来协助完成Pod中的进程访问API Server时的身份鉴权过程。
3、Opaque
(1)从文件中创建Secret
echo -n 'admin' > ./username.txt %创建用户
echo -n 'westos' > ./password.txt %创建密码
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt %用文件创建db-user-pass这个新secret%如果密码具有特殊字符,则需要使用 \ 字符对其进行转义
kubectl get secrets %查看secrets
详细查看,查看到的用户和密码不是原本的明文,是经过base64编码后的结果,使用-d参数就可以解码。
(2)使用yaml文件创建secret
base64编码
echo -n 'admin' | base64
YWRtaW4=
echo -n 'westos' | base64
d2VzdG9z
编辑secret.yaml文件
apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:username: YWRtaW4=password: d2VzdG9z
创建mysecret,查看
(3)将Secret挂载到Volume中
修改secret.yaml文件
apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:username: YWRtaW4=password: d2VzdG9z
---
apiVersion: v1
kind: Pod
metadata:name: mysecret
spec:containers:- name: nginximage: nginxvolumeMounts: %把secret挂载到mysecret这个pod中的/secret- name: secretsmountPath: "/secret"readOnly: true %只读volumes:- name: secretssecret:secretName: mysecret
创建pod,查看pod。进入mysecret,可以看到username和password
(4)向指定路径映射 secret 密钥
由于实验环境很乱,所以先删除不用的pod
修改secret.yaml文件
apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:username: YWRtaW4=password: d2VzdG9z
---
apiVersion: v1
kind: Pod
metadata:name: mysecret
spec:containers:- name: nginximage: nginxvolumeMounts:- name: secretsmountPath: "/secret"readOnly: truevolumes:- name: secretssecret:secretName: mysecretitems:- key: usernamepath: my-group/my-username %指定路径为/secret/my-group/my-username
创建pod,查看pod。进入mysecret,在/secret/my-group/my-username可以看到username
(5)将Secret设置为环境变量
修改secret.yaml文件
apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:username: YWRtaW4=password: d2VzdG9z
---
apiVersion: v1
kind: Pod
metadata:name: secret-env
spec:containers:- name: nginximage: nginxenv: %设置环境变量- name: SECRET_USERNAMEvalueFrom: %把mysecret中的username这个key值取出来,并改名为SECRET_USERNAMEsecretKeyRef:name: mysecretkey: username- name: SECRET_PASSWORDvalueFrom: %把mysecret中的password这个key值取出来,并改名为SECRET_PASSWORDsecretKeyRef:name: mysecretkey: password
创建secret-env,查看
进入secret-env,查看环境变量
环境变量读取Secret很方便,但无法支撑Secret动态更新
进入mysecret编辑,
修改密码为redhat
再次进入secret-env,查看环境变量,还是westos,没有改变
3、kubernetes.io/dockerconfigjson
kubernetes.io/dockerconfigjson用于存储docker registry的认证信息.
新建一个私有仓库westos,如果没有给定仓库密码的话,是会拉取失败的
创建myregistrykey,指定仓库名字,给定仓库的用户名和密码。查看
编辑registry.yaml文件
创建mypod,查看,启动失败
修改registry.yaml文件
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: game2048image: hyl.westos.org/westos/game2048imagePullSecrets: %给定仓库认证信息- name: myregistrykey
删除之前的mypod,重新创建,查看running
运维实操——kubernetes(九)存储之Secret配置管理Service Account、Opaque、dockerconfigjson相关推荐
- kubernetes-9 存储之Secret配置管理Service Account、Opaque、dockerconfigjson
1.什么是Secret? Secret 对象类型用来保存敏感信息,例如密码.OAuth 令牌和 ssh key. 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活. ...
- 运维实操——kubernetes(十九)k8s中部署Prometheus、监控nginx、HPA自动伸缩
k8s中部署Prometheus.监控nginx.HPA自动伸缩 1.什么是Prometheus? 2.k8s中部署Prometheus监控 3.prometheus监控nginx 4.基于prome ...
- 运维实操——kubernetes(十一)调度nodeName、nodeSelector、亲和性、污点、容忍、删除节点
调度nodeName.nodeSelector.亲和性.污点.容忍.删除节点 1.什么是调度? 2.nodeName 3.nodeSelector (1)节点亲和性 (2)pod亲和与反亲和 4.Ta ...
- 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年3月刊
本文为大家整理了墨天轮数据社区2023年3月发布的优质技术文章,主题涵盖Oracle.MySQL.PostgreSQL等数据库的基础安装配置操作.故障处理.性能优化等日常实践操作,以及概念梳理.常用脚 ...
- 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年5月刊
本文为大家整理了墨天轮数据社区2023年5月发布的优质技术文章,主题涵盖Oracle.MySQL.PostgreSQL等数据库的安装配置.故障处理.性能优化等日常实践操作,以及常用脚本.注意事项等总结 ...
- 运维实操——日志分析系统ELK(中)之logstash采集数据、伪装rsyslog、多行过滤、grok切片
日志分析系统ELK(中)之logstash 1.什么是logstash? 2.Logstash安装 3.logstash简单命令行测试 4.logstash文件测试 (1)命令行输入,输出到文件 (2 ...
- 运维实操——zabbix监控结合睿象云报警平台及API调用
zabbix监控结合睿象云报警平台及API调用 1.zabbix监控结合睿象云报警平台 2.API调用 1.zabbix监控结合睿象云报警平台 由于我们不能时时刻刻盯着zabbix监控,所以呢,我们想 ...
- 运维实操——zabbix监控结合tidb分布式数据库
zabbix监控结合tidb分布式数据库 前言 1.tidb介绍 2.Tidb+Zabbix的简单部署 前言 本文的前提是,zabbix已经和mysql数据库配置好,现在想把mysql替换为分布式数据 ...
- 安全运维-如何在Kubernetes中使用注释对ingress-nginx及后端应用进行安全加固配置实践...
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x08 Kubernetes中ingress-nginx安全配置 1.配置指定的 ...
最新文章
- Mnist数据集简介
- threejs 三面体_如何在Three.js中构造空心圆柱体
- 远程桌面无法找到计算机不属于指定网络,远程桌面找不到计算机
- Flex 3 metadata tags 标签
- 酒店管理系统-数据库设计说明书
- Red Hat 5.6-64位使用yum升级PHP
- 【eoeAndroid社区索引】Android控件知识汇总
- java debug命令详解_DEBUG命令使用解析及范例大全
- global mapper加载高德在线地图
- allegro里面由于shape out of date
- ios9提取安装包ipa_iOS获取ipa包以及图片资源
- wordpress的excerpt()函数
- 金蝶设置盘盈盘亏单据权限
- 图集 | 航拍玉林29所学校,里面有你的母校吗?
- vim的安装以及基础使用方法;
- 自动生成课堂分析报告写后感想
- [安全] AD域解释 , 域和组的区别?
- KH7 根据身份证号码判断性别
- 安卓7.0及以上用户证书导入的问题
- 怎么能看出来一个人善不善良?