kubernetes管理应用配置之ConfigMap和Secret

news2025/2/2 19:47:30

目录

一、ConfigMap

二、Secret


一、ConfigMap


应用部署的一个最佳实践是将应用所需的配置信息与程序进行分离,这样可以使得应用程序被更好地复用,通过不同的配置也能实现更灵活的功能。
将应用打包为容器镜像后,可以通过环境变量或者外挂文件的方式在创建容器时进行配置注入,但在大规模容器集群的环境中,对多个容器进行不同的配置将变得非常复杂。
从Kubernetes v1.2开始提供了一种统一的应用配置管理方案——ConfigMap。

创建ConfigMap后,数据实际会存储在K8s中Etcd,然后通过创建Pod时引用该数据。

应用场景:应用程序配置

Pod使用configmap数据有两种方式:

变量注入,通过环境变量获取ConfigMap

数据卷挂载,通过Volume挂载的方式将ConfigMap中的内容挂载为容器内部的文件或目录

创建configMap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  abc: "123"
  cde: "456"

  redis.properties: |
    port: 6379
    host: 192.168.2.117

查看创建的configMap

 创建configMap-deploy.yaml

apiVersion: v1
kind: Pod
metadata:
  name: app-config-demo
spec:
  containers:
    - name: demo 
      image: nginx 
      env:
        - name: ABCD 
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: abc
        - name: CDEF
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: cde
      volumeMounts:
      - name: config             
        mountPath: "/config"  # 配置文件挂载在容器中的位置
        readOnly: true
  volumes:            # 数据卷挂载
    - name: config 
      configMap:
        name: app-config
        items:
        - key: "redis.properties"
          path: "redis.properties"

验证变量注入成功,redis.properties 配置文件也挂载到了 /config 路径下。

 ConfigMap 注意要点

现在对 ConfigMap 的使用做一个总结,以及它的一些注意点,注意点一共列了以下五条:

  • 第一点 ConfigMap 文件的大小。虽然说 ConfigMap 文件没有大小限制,但是在 ETCD 里面,数据的写入是有大小限制的,现在是限制在 1MB 以内;
  • 第二点注意点是 pod 引入 ConfigMap 的时候,必须是相同的 Namespace 中的 ConfigMap,前面其实可以看到,ConfigMap.metadata 里面是有 namespace 字段的;
  • 第三点是 pod 引用的 ConfigMap。假如这个 ConfigMap 不存在,那么这个 pod 是无法创建成功的,其实这也表示在创建 pod 前,必须先把要引用的 ConfigMap 创建好;
  • 第四点就是使用 envFrom 的方式。把 ConfigMap 里面所有的信息导入成环境变量时,如果 ConfigMap 里有些 key 是无效的,比如 key 的名字里面带有数字,那么这个环境变量其实是不会注入容器的,它会被忽略。但是这个 pod 本身是可以创建的。这个和第三点是不一样的方式,是 ConfigMap 文件存在基础上,整体导入成环境变量的一种形式;
  • 最后一点是:什么样的 pod 才能使用 ConfigMap?这里只有通过 K8s api 创建的 pod 才能使用 ConfigMap,比如说通过用命令行 kubectl 来创建的 pod,肯定是可以使用 ConfigMap 的,但其他方式创建的 pod,比如说 kubelet 通过 manifest 创建的 static pod,它是不能使用 ConfigMap 的。

二、Secret


k8s secrets用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者环境变量的方式访问到这些 Secret 里保存的信息了。与ConfigMap类似,区别在于Secret主要存储敏感数据,所有的数据要经过base64编码。

应用场景: 凭据

kubectl create secret 支持三种数据类型:

• docker-registry (kubernetes.io/dockerconfigjson):存储镜像仓库认证信息

• generic (Opaque):存储密码、密钥等

• tls (kubernetes.io/tls):存储TLS证书

我们可以在 linux 命令换行执行如下的命令进行加密:

echo -n 'admin' | base64
echo -n '1f2d1e2e67df' | base64

 创建secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: db-user-pass
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

创建 secret-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: secret-demo-pod
spec:
  containers:
  - name: demo 
    image: nginx 
    env:
      - name: USER 
        valueFrom:
          secretKeyRef:
            name: db-user-pass
            key: username
      - name: PASS
        valueFrom:
          secretKeyRef:
            name: db-user-pass
            key: password
    volumeMounts:
    - name: config
      mountPath: "/config"
      readOnly: true
  volumes:
    - name: config 
      secret:
        secretName: db-user-pass
        items:
        - key: username
          path: my-username

成功读取到用户名和密码

 Secret 使用的一些注意点,下面列了三点:

  • 第一点 Secret 的文件大小限制。这个跟 ConfigMap 一样,也是 1MB;
  • 第二点是 Secret 采用了 base-64 编码,但是它跟明文也没有太大区别。所以说,如果有一些机密信息要用 Secret 来存储的话,还是要很慎重考虑。也就是说谁会来访问你这个集群,谁会来用你这个 Secret,还是要慎重考虑,因为它如果能够访问这个集群,就能拿到这个 Secret;
  • 第三点就是 Secret 读取的最佳实践,建议不要用 list/watch,如果用 list/watch 操作的话,会把 namespace 下的所有 Secret 全部拉取下来,这样其实暴露了更多的信息。推荐使用 GET 的方法,这样只获取你自己需要的那个 Secret。

 

参考原文链接:K8S系列(七)应用配置管理_林木森^~^的博客-CSDN博客_k8s 应用配置文件

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

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

相关文章

【MySQL】3.MySQL表操作

文章目录1.0 MySQL表操作详解1.1 MySQL创建表1.2 MySQL查看表结构1.3 MySQL修改表1.0 MySQL表操作详解 1.1 MySQL创建表 指令:create table table_name(field1 datatype, field2 datatype) character collate engine; 后面三个参数可以省略,MySQL会自动调用默认…

开源绘图神器,Labplot的初步使用

文章目录数据生成图像定制多图绘制Labplot是一款开源且免费的科学绘图软件,除了Windows外,对Linux的Debian、Ubuntu、Fedora等发行版均有着良好的支持。 其下载地址为:LabPlot2下载,安装过程注意选择中文。 数据生成 打开软件后…

新版以太坊Ethereum库ethersV5.0配合后端Golang1.18实时链接区块链钱包(Metamask/Okc)以及验签操作

区块链去中心化思想无处不在,比如最近使用个体抗原自检替代大规模的中心化核酸检测,就是去中心化思想的落地实践,避免了大规模聚集导致的交叉感染,提高了检测效率,本次我们使用Ethereum最新的ethersV5.0以上版本链接去…

XXL-JOB架构篇 - 初识分布式任务调度XXL-JOB

任务调度 一、什么时候需要任务调度? 基于时间的任务 批量数据的处理 异步解耦(比如先做任务A,再做任务B) 二、任务调度的基本需求有哪些? 可以定义触发的规则,比如基于时刻、时间间隔、表达式。 可以定义…

5G无线技术基础自学系列 | RF优化概述

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 随着5G商用网络的陆续建设,…

疫情抑制珠宝消费增长,珠宝主要市场需求萎缩

一、我国珠宝行业市场规模持续增长 根据观研报告网发布的《2022年中国珠宝行业分析报告-行业现状与发展趋势分析》显示,2021年上半年,中国金饰需求增长强劲,中国金饰消费量在2021年第二季度趋于稳定,使上半年金饰总需求达到338吨…

chatGPT接口,不需要科学上网就可以调用的OPENAI接口

最近很多国产版本的chatGPT出现了 查找了一圈发现调用的openai 的一个接口 测试了一下效果还算可以吧 视频教程 链接: 视频教程 用接口自己写了一个测试的网页 日常使用应该是不成问题 接口整理好了在这: 请求接口: URL:-POST https://api.openai.…

m基于RBF神经网络和BP神经网络的信道估计误码率matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在无线通信系统中,从发射端发射的信号,经过直射、反射、散射等路径到达接收端。在ofdm系统中,为了获取更好的性能,需要进行信道估计获取信道的状态…

Diffusion Model合集 part1

扩散模型原理介绍1一,条件概率公式与高斯分布的KL散度重参数技巧二,VAE和多层VAE回顾单层VAE的原理公式与置信下界多层VAE的原理公式与置信下界三,Diffusion Model 图示四,扩散过程(Diffusion Process)与VAE的区别:如何…

腾讯云weda低代码让别人能看到发布的应用

我们先登录低代码的平台 腾讯云-控制台 (tencent.com) 我们从创建应用开始讲起,点击新建门户应用: 点击确定 我们先把这个应用发布。 确认发布。 显示出,下面这个已经发布成功后,我们就返回到主页面。 返回主界面,点…

《Docker系列》Docker安装MySQL 5.7

Docker安装MySQL 5.7 一、docker拉取MySQL 5.7镜像 docker pull mysql 拉取最新MySQL docker pull mysql:5.7 拉取指定版本MySQL 1 拉取mysql 5.7镜像 [rootzxy_master ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql d26998a7c52d: Pull complete 4a9d8a356…

JavaWeb之Servelt学习

1.Servlet 概念:运行在服务端的小程序 Servlet就是一个接口,定义了java类被浏览器访问到(tomcat识别)的规则 将来我们自定义一个类,实现Servlet接口,复写方法 1.1快速入门 1.创建javaEE项目 2.定义类实…

DFS——连通性和搜索顺序(回溯)

文章目录概述连通性问题模板思考迷宫红与黑搜索顺序(回溯)模板思考马走日单词接龙分成互质组总结概述 定义 在深度优先搜索中,对于最新发现的顶点,如果它还有以此为顶点而未探测到的边,就沿此边继续探测下去,当顶点v的所有边都已…

JavaScript刷LeetCode拿offer-滑动窗口

一、前言 《JavaScript刷LeetCode拿offer-双指针技巧》中,简单地介绍了双指针技巧相比较单指针的优点,以及结合 Easy 难度的题目带大家进一步了解双指针的应用。 进入 Medium 难度之后,解题的关键在于如何构造双指针以及确定指针移动的规则…

从 0 开始学 Python 自动化测试开发(二):环境搭建

本文是「从 0 开始学 Python 自动化测试开发」专题系列文章第二篇 —— 环境搭建篇,适合零基础入门的同学。没有阅读过上一篇的同学,请戳主页看上一篇噢。作者方程老师,是前某跨国通信公司高级测试经理,目前为某互联网名企资深测试…

常见管理网络的net命令

目录1 简介2 常用命令2.1 net view2.2 net user2.3 net use2.4 net start2.5 net stop2.6 net share1 简介 net 命令是一种基于网络的命令,该命令包含了管理网络环境、服务、用户、登录等大部分重要的管理功能。 2 常用命令 2.1 net view 作用:显示域…

Spring 之 @Component 和 @Configuration 两者区别以及源码分析

之前一直搞不清 Component 和 Configuration 这两个注解到底有啥区别,一直认为被这两修饰的类可以被 Spring 实例化嘛,不,还是见识太短,直到今天才发现这两玩意有这么大区别。很幸运能够及时发现,后面可以少走点坑&…

操作系统知识点

操作系统的目标: 方便:使计算机系统易用 有效:以更有效的方式使用计算机系统资源 扩展:方便用户有效开发、测试和引进新功能 操作系统的 作用: 1. 有效的管理资源 2.通过命令接口、编程接口等为用户提供各种…

【自然语言处理】【ChatGPT系列】Chain of Thought:从大模型中引导出推理能力

Chain-of-Thought Prompting:从大模型中引导出推理能力《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》论文地址:https://arxiv.org/pdf/2201.11903.pdf 相关博客 【自然语言处理】【ChatGPT系列】Chain of Thought&#xf…

什么是加权轮询?云解析DNS是否支持加权轮询?-中科三方

什么是加权轮询? 所谓的加权轮询算法,其实就是Weighted Round Robin,简称wrr。在我们配置Nginx的upstream的时候,带权重的轮询,其实就是wrr。 upstream backend { ip_hash; server 192.168.1.232 weight4; server 19…