深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret

目录

  • 深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret
    • 一、目录结构
    • 二、ConfigMap 和 Secret 的创建
      • 1. 创建 ConfigMap
        • `config/app-config.yaml`:
        • `config/db-config.yaml`:
      • 2. 创建 Secret
        • `secrets/db-credentials.yaml`:
    • 三、在 Deployment 中使用 ConfigMap 和 Secret
        • `deployments/app-deployment.yaml`:
    • 四、只挂载 ConfigMap 或 Secret 中的某个变量
      • 1. 只挂载 ConfigMap 中的某个变量
        • 示例:只将 `APP_ENV` 环境变量从 ConfigMap 中注入到容器:
      • 2. 只挂载 Secret 中的某个变量
        • 示例:只将 `DB_USER` 和 `DB_PASSWORD` 从 Secret 中注入到容器:
    • 五、部署和管理
    • 六、安全性和最佳实践
    • 七、总结

深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret

在企业级 Kubernetes 环境中,如何高效、安全地管理应用配置是运维和开发的核心任务之一。Kubernetes 提供了 ConfigMap 和 Secret 两种资源对象,分别用于存储非敏感和敏感的配置信息。本文将通过一套完整的 YAML 文件示例,展示如何在 Kubernetes 中使用 ConfigMap 和 Secret 管理应用配置,包括创建、部署、更新和安全控制等方面,并且我们会演示如何只挂载 ConfigMap 或 Secret 中的某个变量。


一、目录结构

以下是示例项目的目录结构:

├── config/
│   ├── app-config.yaml       # 存储应用配置的 ConfigMap
│   └── db-config.yaml        # 存储数据库配置的 ConfigMap
├── secrets/
│   └── db-credentials.yaml   # 存储数据库凭证的 Secret
├── deployments/
│   └── app-deployment.yaml   # 应用的 Deployment 配置
└── README.md

二、ConfigMap 和 Secret 的创建

1. 创建 ConfigMap

ConfigMap 用于存储非敏感的配置信息,例如环境变量、应用配置等。

config/app-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: app-confignamespace: default
data:# 应用环境设置APP_ENV: productionLOG_LEVEL: infoFEATURE_FLAG: "true"  # 特性标志,用于控制功能开关
config/db-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: db-confignamespace: default
data:# 数据库连接配置DB_HOST: db.example.comDB_PORT: "5432"DB_NAME: myapp

2. 创建 Secret

Secret 用于存储敏感信息,例如数据库凭证、API 密钥等。数据以 base64 编码存储。

secrets/db-credentials.yaml
apiVersion: v1
kind: Secret
metadata:name: db-credentialsnamespace: default
type: Opaque
data:# 数据库用户名和密码,值经过 base64 编码DB_USER: YWRtaW4=  # base64 编码的 'admin'DB_PASSWORD: cGFzc3dvcmQ=  # base64 编码的 'password'

注意:Secret 中的值使用 base64 编码存储,实际使用时需要解码。


三、在 Deployment 中使用 ConfigMap 和 Secret

在 Deployment 中挂载 ConfigMap 和 Secret,可以通过环境变量或卷的方式将配置数据注入到容器中。

deployments/app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: app-deploymentnamespace: default
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: app-containerimage: myapp:v1ports:- containerPort: 8080envFrom:# 使用 ConfigMap 注入环境变量- configMapRef:name: app-config- configMapRef:name: db-config# 使用 Secret 注入环境变量- secretRef:name: db-credentialsvolumeMounts:# 将 ConfigMap 挂载为文件- name: config-volumemountPath: /etc/config# 将 Secret 挂载为文件- name: secret-volumemountPath: /etc/secretvolumes:# ConfigMap 挂载配置文件- name: config-volumeconfigMap:name: app-config# Secret 挂载敏感信息文件- name: secret-volumesecret:secretName: db-credentials

四、只挂载 ConfigMap 或 Secret 中的某个变量

如果只需要挂载 ConfigMap 或 Secret 中的某个变量,可以使用 envenvFrom 来指定具体的键,而不是将整个 ConfigMap 或 Secret 注入容器。

1. 只挂载 ConfigMap 中的某个变量

示例:只将 APP_ENV 环境变量从 ConfigMap 中注入到容器:
apiVersion: apps/v1
kind: Deployment
metadata:name: app-deploymentnamespace: default
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: app-containerimage: myapp:v1ports:- containerPort: 8080env:# 从 ConfigMap 中注入单一环境变量- name: APP_ENVvalueFrom:configMapKeyRef:name: app-configkey: APP_ENV  # 仅注入 APP_ENV 变量

2. 只挂载 Secret 中的某个变量

示例:只将 DB_USERDB_PASSWORD 从 Secret 中注入到容器:
apiVersion: apps/v1
kind: Deployment
metadata:name: app-deploymentnamespace: default
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: app-containerimage: myapp:v1ports:- containerPort: 8080env:# 从 Secret 中注入数据库用户名和密码- name: DB_USERvalueFrom:secretKeyRef:name: db-credentialskey: DB_USER  # 仅注入 DB_USER- name: DB_PASSWORDvalueFrom:secretKeyRef:name: db-credentialskey: DB_PASSWORD  # 仅注入 DB_PASSWORD

五、部署和管理

  1. 应用资源
    使用 kubectl 部署 ConfigMap、Secret 和 Deployment:

    kubectl apply -f config/
    kubectl apply -f secrets/
    kubectl apply -f deployments/
    
  2. 查看资源状态
    检查部署状态:

    kubectl get deployments
    kubectl get pods
    kubectl get configmaps
    kubectl get secrets
    
  3. 更新 ConfigMap 和 Secret

    • 编辑 config/app-config.yamlsecrets/db-credentials.yaml

    • 使用 kubectl apply -f 更新资源。

    • 对于以环境变量形式注入的配置,更新后需要重启 Pod:

      kubectl rollout restart deployment app-deployment
      

六、安全性和最佳实践

  • 加密存储:启用 Kubernetes 的静态加密功能,确保 Secret 在 etcd 中以加密形式存储。
  • 访问控制:使用 RBAC 控制对 ConfigMap 和 Secret 的访问权限,确保只有授权的用户和服务可以访问。
  • 版本管理:为 ConfigMap 和 Secret 添加版本信息,便于追踪和回滚。
  • 外部 Secret 管理:对于敏感信息,建议使用外部 Secret 管理工具(如 HashiCorp Vault)进行管理,并通过 Kubernetes 的 External Secrets Operator 实现同步。

七、总结

通过上述示例,我们展示了如何在 Kubernetes 中使用 YAML 文件创建和管理 ConfigMap 和 Secret,实现应用配置的集中管理和动态更新。在实际操作中,建议将非敏感的配置存储在 ConfigMap 中,将敏感信息存储在 Secret 中,并通过环境变量或卷的方式将其注入到 Pod 中。这样可以有效地解耦应用和配置,提高系统的灵活性和安全性。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库之mysql优化

1.引擎: 1.1查看引擎: mysql> show engines; mysql> SHOW VARIABLES LIKE %storage_engine%; mysql> show create table t1; ---查看建表信息1.2 临时指定引擎: mysql> create table innodb1(id int)engineinnodb; 1.3修改…

【Yii2】Yii2框架的一次BUG排查

因为项目需要,最近学习了使用Yii2框架的使用。但毕竟刚上手,好多地方都不清楚。所以就有了这个博客。 1、需求 有这么一个需求: 后台需要访问用户的一个界面。为了界面不出问题,需要传递一个真实存在的Token。但对这个Token没有…

卡尔曼滤波解释及示例

卡尔曼滤波的本质是用数学方法平衡预测与观测的可信度 ,通过不断迭代逼近真实状态。其高效性和鲁棒性,通常在导航定位中,需要融合GPS、加速度计、陀螺仪、激光雷达或摄像头数据,来提高位置精度。简单讲,卡尔曼滤波就是…

Python 学习路线与笔记跳转(持续更新笔记链接)

这里写目录标题 Python 学习路线与笔记Python 简介学习路线第一阶段:Python 基础第二阶段:Python 进阶第三阶段:实用库与框架第四阶段:DevOps 与 Python第五阶段:最佳实践与高级技巧 学习资源官方资源在线学习平台书籍…

决策卫生问题:考公考编考研能补救高考选取职业的错误吗

对于决策者来说,“认识你自己”是一个永恒的主题;警惕认知中的缺陷,比什么都重要。在判断与决策问题上,管理者和专业人士往往都非常自信。人类远远不如我们想象的那么理性,人类的判断也远远不如我们想象的那么完美。在…

React19源码阅读之commitRoot

commitRoot入口 在finishConcurrentRender函数,commitRootWhenReady函数,commitRoot函数。 commitRoot流程图 commitRoot函数 commitRoot 函数是 React 渲染流程中用于提交根节点的关键函数。它的主要作用是设置相关的优先级和状态,然后调…

利用Python爬虫实现百度图片搜索的PNG图片下载

在图像识别、训练数据集构建等场景中,我们经常需要从互联网上批量下载图片素材。百度图片是中文搜索中最常用的来源之一。本文将介绍如何使用Python构建一个稳定、可扩展的百度图片爬虫,专门用于下载并保存高清PNG格式图片。 一、项目目标 本项目的目标…

Axure复选框组件的深度定制:实现自定义大小、颜色与全选功能

在产品设计中,复选框作为用户与界面交互的重要元素,其灵活性直接影响到用户体验。本文将介绍如何利用Axure RP工具,通过高级技巧实现复选框组件的自定义大小、颜色调整,以及全选功能的集成,为产品原型设计增添更多可能…

深度理解spring——BeanFactory的实现

BeanFactory Spring之BeanFactory什么是BeanFactoryApplicationContext相对BeanFactory实现的功能性扩展1. MessageSource2. ResourcePatternResolver3. ApplicationEventPublisher4. EnvironmentCapable通用ApplicationContext实践实现BeanFactoryBeanFactory后处理器排序让谁…

跑MPS产生委外采购申请(成品)

问题:跑MPS产生委外采购申请(成品),更改BOM和跑MRP,但物料需求清单中无新增物料复合膜的需求。截图如下: 解决方法:更改委外采购申请的批准日期为BOM的生效日和重新展开bom。 重新展开后&#x…

“在中国,为中国” 英飞凌汽车业务正式发布中国本土化战略

3月28日,以“夯实电动化,推进智能化,实现高质量发展”为主题的2025中国电动汽车百人会论坛在北京举办。众多中外机构与行业上下游嘉宾就全球及中国汽车电动化的发展现状、面临的挑战与机遇,以及在技术创新、市场布局、供应链协同等…

优雅实现网页弹窗提示功能:JavaScript与CSS完美结合

在现代Web开发中,弹窗提示是提升用户体验的重要元素之一。本文将深入探讨如何实现一个优雅、可复用的弹窗提示系统,避免常见问题如重复触发、样式混乱等。 核心代码解析 // 控制弹窗是否可以显示的标志 let alertStatus true;// 显示提示信息 functio…

YOLOv11改进-双Backbone架构:利用双backbone提高yolo11目标检测的精度

一、引言:为什么我们需要双Backbone? 在目标检测任务中,YOLO系列模型因其高效的端到端检测能力而备受青睐。然而,传统YOLO模型大多采用单一Backbone结构,即利用一个卷积神经网络(CNN)作为特征提…

用 PyQt5 和 asyncio 打造接口并发测试 GUI 工具

接口并发测试是测试工程师日常工作中的重要一环,而一个直观的 GUI 工具能有效提升工作效率和体验。本篇文章将带你用 PyQt5 和 asyncio 从零实现一个美观且功能实用的接口并发测试工具。 我们将实现以下功能: 请求方法选择器 添加了一个下拉框 QComboBo…

理解npm的工作原理:优化你的项目依赖管理流程

目录 什么是npm npm核心功能 npm 常用指令及其作用 执行npm i 发生了什么? 1. 解析命令与参数 2. 检查依赖文件 3. 依赖版本解析与树构建 4. 缓存检查与包下载 5. 解压包到 node_modules 6. 更新 package-lock.json 7. 处理特殊依赖类型 8. 执行生命周期脚本 9. …

React Native 安卓端 android Image 播放gif webp 动态图

React Native 安卓端 android Image 播放gif webp 动态图 RN项目是0.78.2 React是19.0 基本介绍 Image 是 React Native 中用于显示各种类型图片的核心组件,支持显示网络图片、静态资源、本地图片以及 base64 编码的图片。在 Android 端,Image 组件还可…

实时数字人——DH_LIVE

前两天亲手搭建了实时对话数字人VideoChat,今天来搭建下DH_LIVE。 DH_LIVE一个实时数字人解决方案,从输入文字到数字人对口型说话用时2-3秒。 今天就来实际操作下dh_live的搭建过程。 首先贴上git地址:https://github.com/kleinlee/DH_liv…

AOSP CachedAppOptimizer 冻结方案

背景 Android 一直面临一个核心难题:如何优化进程对有限系统资源(如 CPU、电量)的使用,同时保证用户体验。 当进程进入后台后,它们虽不再贡献用户体验,却仍可能消耗资源。传统的杀后台方案虽然节省资源&a…

实体店的小程序转型之路:拥抱新零售的密码-中小企实战运营和营销工作室博客

实体店的小程序转型之路:拥抱新零售的密码-中小企实战运营和营销工作室博客 在当今数字化浪潮的冲击下,实体店面临着前所未有的挑战,但小程序的出现为实体店转型新零售带来了新的曙光。先来看一组惊人的数据,据相关统计&#xff…

Java求职面试:从Spring Boot到微服务的全面考核

Java求职面试实录:从Spring Boot到微服务的全面考核 第一轮:基础技术的考察 场景: 赵大宝走进了一家互联网大厂的面试间,面试官严肃地看着他。 面试官: 赵大宝,你好。我们先从简单的开始。请你解释一下J…