当前位置: 首页 > news >正文

Secret 与 ConfigMap配置资源管理


1 Secret(密钥管理)

1.1 概念

1.1.1 什么是Secret

Secret 用来存储敏感数据,是一个密钥管理的工具

  • 密码
  • Token
  • 密钥
1.1.2 Secret 的作用
  • 安全性:数据以非明文方式存储( Base64 编码,但**不等于加密 **)
  • 敏感信息分离:将pod中的敏感信息放到 Secret 中,方便控制访问降低泄露风险
  • 细粒度访问控制:可以通过 RBAC 控制谁可以访问哪些 Secret
1.1.3 使用方式
  • 作为 Volume 文件 挂载
  • 作为 环境变量
  • kubelet 拉取镜像时使用认证信息

应用场景:凭据管理

使用前提:Pod 必须引用 Secret 才能使用

1.2 Secret 类型

类型说明
kubernetes.io/service-account-tokenKubernetes 自动创建,用于访问 APIServer。Pod 默认挂载在 /run/secrets/kubernetes.io/serviceaccount
Opaque默认类型,用户自定义密码、密钥等(Base64 编码)。
kubernetes.io/dockerconfigjson存储私有 Docker Registry 的认证信息。
kubernetes.io/tls存储 SSL/TLS 证书与私钥。

1.3 Secret 创建

1.3.1 命令行创建
# 创建
echo -n 'zhangsan' > username.txt
echo -n 'abc1234' > password.txtkubectl create secret generic mysecret --from-file=username.txt --from-file=password.txt# 查看
kubectl get secrets
kubectl describe secret mysecret
1.3.1 YAML 文件创建
# 输出用户名例 emhhbmdzYW4K=
echo -n zhangsan | base64# 输出密码例 YWJjMTIzNAo==
echo -n abc1234 | base64
------------------------------------------------------------------------------------------------------------
apiVersion: v1
kind: Secret
metadata:name: secret-lisi
type: Opaque
data:username: bGlzaQ==password: YWJjMTIzNA==
# 创建
kubectl apply -f secret.yaml
kubectl get secret secret-lisi -o yaml

1.3 Secret 使用

作用:将pod中的敏感信息放到 Secret 中,方便控制访问降低泄露风险

1.3.1 方式一:挂载为文件
vim secret-pod.yaml
------------------------------------------------------------------------------------------------------------
apiVersion: v1
kind: Pod
metadata:name: secret-pod
spec:containers:- name: nginximage: nginxvolumeMounts:- name: secretsmountPath: "/etc/secrets"readOnly: truevolumes:- name: secretssecret:secretName: mysecret

验证:

kubectl exec -it mypod -- ls /etc/secrets

1.3.2 方式二:导入环境变量
vim mypod1.yaml
------------------------------------------------------------------------------------------------------------
apiVersion: v1
kind: Pod
metadata:name: mypod1
spec:containers:- name: nginximage: nginxenv:- name: TEST_USERvalueFrom:secretKeyRef:name: secret-lisikey: username- name: TEST_PASSWORDvalueFrom:secretKeyRef:name: secret-lisikey: password

验证:

kubectl exec -it mypod1 -- printenv | grep TEST

2 ConfigMap (配置管理)

2.1 概念

2.1.1 什么是ConfigMap
  • 存储非敏感配置数据。 ConfigMap 可供应用读取配置文件、命令行参数或环境变量
  • 将 pod 容器中服务的配置文件统一存入ConfigMap,方便管理

2.2 ConfigMap 创建

2.2.1 方法一:从目录创建
mkdir /opt/configmap/vim /opt/configmap/game.properties
------------------------------------------------------------------------------------------------------------
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30vim /opt/configmap/ui.properties
------------------------------------------------------------------------------------------------------------
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice# 创建
kubectl create configmap game-config --from-file=/opt/configmap/

2.3 Pod 中使用 ConfigMap

2.3.1 ConfigMap 热更新机制
vim test-pod4.yaml
------------------------------------------------------------------------------------------------------------
# 创建configmap
apiVersion: v1
kind: ConfigMap
metadata:name: log-confignamespace: default
data:log_level: INFO
---
# 创建deployment控制器
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:replicas: 1selector:matchLabels:app: my-nginx# 创建nginxtemplate:metadata:labels:app: my-nginxspec:containers:- name: my-nginximage: nginxports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/config# 将nginx 配置文件挂载到log-configvolumes:- name: config-volumeconfigMap:name: log-config
------------------------------------------------------------------------------------------------------------
# 部署
kubectl apply -f test-pod.yaml
kubectl exec -it my-nginx-c6df7db54-2x54r -- cat /etc/config/log_level# 测试同步
kubectl edit configmap log-config
------------------------------------------------------------------------------------------------------------
apiVersion: v1
data:log_level: DEBUG		#INFO 修改成 DEBUG
kind: ConfigMap
metadata:annotations:kubectl.kubernetes.io/last-applied-configuration: |{"apiVersion":"v1","data":{"log_level":"DEBUG"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"log-config","namespace":"default"}}			#INFO 修改成 DEBUGcreationTimestamp: 2021-05-25T07:59:18Zname: log-confignamespace: defaultresourceVersion: "93616"selfLink: /api/v1/namespaces/default/configmaps/log-configuid: 1b8115de-bd2f-11eb-acba-000c29d88bba
------------------------------------------------------------------------------------------------------------# log_level: DEBUG
验证
// 等大概10秒左右,使用该 ConfigMap 挂载的 Volume 中的数据同步更新 
kubectl exec -it my-nginx-76b6489f44-6dwxh -- cat /etc/config/log_level
# 输出:DEBUG

Volume 挂载的数据约 10 秒后同步更新。
环境变量不会自动更新。


2.3.2 触发滚动更新

更新 ConfigMap 不会自动触发 Pod 重启,可手动触发滚动更新。

更新 ConfigMap 目前并不会触发相关 Pod 的滚动更新,可以通过在 .spec.template.metadata.annotations 中添加 version/config ,每次通过修改 version/config 来触发滚动更新kubectl patch deployment my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20210525" }}}}}'kubectl get pods PS:更新 ConfigMap 后:
●使用该 ConfigMap 挂载的 Env 不会同步更新。
●使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新。

3 总结对比表

项目SecretConfigMap
存储内容敏感信息(密码、密钥)普通配置信息(非敏感信息)
数据编码Base64纯文本
使用方式Volume、Env、镜像拉取凭证Volume、Env、命令参数
是否自动更新Volume 延迟更新,Env 不会Volume 延迟更新,Env 不会
安全性高(需 RBAC 控制)普通

http://www.dtcms.com/a/491751.html

相关文章:

  • 泛微 企业网站建设计划网站开发后台框架
  • 做网站怎么添加图片企业营业执照查询系统入口
  • 大气污染扩散Calpuff模型应用
  • 【LeetCode热题100(44/100)】二叉树的右视图
  • 打工人日报#202510016
  • 青岛公司建设网站添加友情链接的技巧
  • 10.2.3 TrinityCore 网络模块封装
  • JS逆向-安全辅助项目接口联动JSRpc进阶调用BP插件autoDecode(下)
  • 试客网站程序源码南京网站制作步骤
  • 外贸网站用什么空间好福州网站建设优化
  • RoboIntern,一款自动化办公小助手
  • 前端中的受控组件与非受控组件:核心区别与实践指南
  • 逻辑600解析本03
  • 青海省建设厅建管处网站淘宝关键词排名优化
  • Day32_【 NLP _2.RNN及其变体 _(3) GRU】
  • 网站建设毕业设计刻光盘网站开发前景知乎
  • Git的diff命令
  • VBA 自动解压 WinZip 文件
  • 站长号制作网站副本
  • BSC 链的第二次觉醒:从山寨天堂到流动性引擎的演化逻辑
  • h5游戏免费下载:《下一个数字》
  • AgentScope:论文及实战
  • 网站建设域名怎么收费的郑州经济技术开发区建设局
  • plsql 异地连接 Oracle 的方法
  • Kernel5.4 Timer定时器使用
  • Spring Boot消息队列与事件驱动详解
  • sql中连接方式
  • 个人网站转为企业网站百度推广怎么登录
  • 模型预估值分布
  • YOLOv1与YOLOv2:目标检测的快速进化之路