ConfigMap 补充 和 Secret

news2024/11/27 10:24:08

对于上一篇文章我们分享了为什么要使用 ConfigMap ,我们创建 ConfigMap 的时候可以传入单个或者多个键值对,也可以传入文件,还分享了如何简单的传入 ConfigMap 里面的数据作为环境变量

我们补充一下使用 ConfigMap 一次性传递多个条目吧

一次性传递 ConfigMap 的所有条目

若 ConfigMap 里面有多个键值对,如果按照我们上一次分享的做法来操作的话,肯定是会觉得非常的麻烦的,而且数量多了之后就会容易出错,搞的整个人都不好了

那么我们看看 ConfigMap 如何一次性的传递多个条目吧

  • 创建一个多条目的 ConfigMap

kubectl create configmap my-config --from-literal=XMTNAME=xiaozhu --from-literal=AGE=15 --from-literal=CITY=sz

创建有 3 个条目的 ConfigMap 来做个试验

查看 my-config 详情

正确创建了包含 3 个键值对的 ConfigMap

查看 cm 对应的 yaml 信息

  • 创建一个应用多个环境变量的镜像

**写一个小脚本 newinfo.sh **

#!/bin/bash

while :
do
  echo "new  -- xmtname = " $XMTNAME  " --- age = " $AGE "  --- city = " $CITY "
  sleep 2
done

写 Dockerfile

FROM ubuntu:latest
ADD newinfo.sh /bin/newinfo.sh
ENTRYPOINT ["/bin/newinfo.sh"]

构建镜像并推送

docker build -t xiaomotong888/newinfo .
docker push xiaomotong888/newinfo
  • yaml 清单 newinfo.yaml,配置好 ConfigMap 多条目,创建 pod ,查看效果
apiVersion: v1
kind: Pod
metadata:
  name: newinfo
spec:
  containers:
  - image: xiaomotong888/newinfo
    name: newinfo
    envFrom:
    - configMapRef:
        name: my-config

此处使用的是 envFromconfigMapRef 来配置一个 configmap 的多个条目

kubectl create -f newinfo.yaml

查看对应 pod 的日志:

没毛病老铁,正确使用到了 my-config 里面的键值对,这样我们使用单个 ConfigMap 条目或者多个 ConfigMap 的时候,都是可以方便的使用了

将 ConfigMap 中的数据作为命令行参数传入

根据上述案例,我们可以看到的,做法都是以环境变量的方式配置的,那么可不可以也像我们之前不使用环境变量而使用命令行传入参数的方式来传入我们需要的参数的呢?

k8s 对你说,必须可以啊,安排上

我们也来做一个实验,分为如下几步走,步骤与上述类似,下面我使用图的方式来呈现:

  • 写脚本 env_configmap.sh ,带有传入参数

  • 制作镜像

docker hub 上生成的镜像是 xiaomotong888/envconfigmap

  • 写 yaml env_configmap.yaml,创建 pod ,查看效果
apiVersion: v1
kind: Pod
metadata:
  name: newinfo-env-configmap
spec:
  containers:
  - image: xiaomotong888/envconfigmap
    name: newinfo-env-configmap
    env:
    - name: XMTCITY
      valueFrom:
        configMapKeyRef:
          name: my-config
          key: CITY
    args: ["$(XMTCITY)"]

我们可以看到,我们的做法其实和直接使用 ConfigMap 作为环境变量的做法是类似的,只不过是我们这里是先将 ConfigMap 里面的键值对转成环境变量,然后我们在 yaml 清单中将该环境变量用 args 参数当中

通过 kubectl create -f env_configmap.yaml 之后,我们来查看一下效果

nice ,没毛病,老铁 , 看了这几个例子之后,是不是觉得很简单呢,动手来试试吧

当然,ConfigMap 也可以使用卷的方式,这个做法我们往下看,一起和 secret 一起分享,他们的用法是类似的

看到这里的兄弟们,明眼人都能看出 ConfigMap 传递的都是明文的信息,那么如果我们有一些需要传递敏感信息,需要加密的信息,我们可以如何传递呢?

那么接下来我们来分享一下如何传递 ConfigMap 的所有条目作为环境变量,以及如何传递敏感数据呢?

Secret 的方式传递敏感数据

Secret 和 ConfigMap 类似,都是用来传递数据,都是键值对的形式,解耦配置的

只不过 ConfigMap 传递的是明文信息,Secret 传递的是加密的信息,和二进制信息,加密方式是 base64,使用改加密方式的原因是传递二进制数据的时候,base64 转化之后,可以将二进制转化成字符串的形式

既然 secret 和 ConfigMap 很类似,那么在数据传递上也是类似的,也有如下几种方式

  • secret 暴露为卷中的文件
  • secret 里面的条目作为环境变量传递

有一点需要注意:

secret 是不会存储在磁盘中的,只会存储在节点的内存中

我们会有默认的一个 secret

kubectl get secrets

kubectl describe secret default-token-76xjz

查看详情之后,我们可以看到这个 secret 包含了 3 个条目,分别是

  • ca.crt
  • namespace
  • token

这些信息是用于 pod 内部安全访问 k8s Apiserver 服务器所需的全部信息

看到这里,我们知道,既然每一个 pod 访问 Apiserver 都需要这些权限信息,那么上述的加密信息肯定会存在 pod 的某个目录咯?

兄弟你很聪明,确实是这样的,我们来查看任意一个 pod ,看看详情

我们可以看到 这个目录/var/run/secrets/kubernetes.io/serviceaccount 是作为 k8s 的secrets 挂载,那么我们看看里面有啥吧

果然猜测没错,该目录下有 3 个文件,是包含权限信息的

那么我们来创建 secret 并使用他来玩玩吧

如何创建并使用 secret

创建证书

openssl genrsa -out https.key 2048 
$ openssl req -new -x509 -key https.key -out https.cert-days 365 -subj 
/CN=www.xmt.com

我们可以看到在我们的当前目录下创建了 2 个文件

创建 secret

上面说到 ConfigMap 和 secret 类似,那么我们也创建一个文件,里面写上明文的数据,然后加入到 secret 中看看效果吧

写 hello 文件

echo xiaozhu > hello

创建 secret

kubectl create secret generic xmt-https --from-file=https.key --from-file=https.cert --from-file=hello

查看我们创建的 secret

kubectl get secrets
 kubectl describe secret xmt-https

使用 secret

我们使用 secret 的方式,最好是用卷的方式暴露文件,而不是使用环境变量的方式,因为 secret 传递的是敏感信息,若直接体现在 yaml 清单中的环境变量,这样还是不太可取

  • 写 yaml 清单,引用 secret mysecret.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mysecret
spec:
  containers:
  - image: xiaomotong888/envconfigmap
    name: mysecret
    volumeMounts:
    - name: mycert
      mountPath: /tmp/cert
  volumes:
  - name: mycert
    secret:
      secretName: xmt-https

我们这里可以随便用一个镜像,正确的创建 pod 即可,我们主要是验证挂载到 pod 里面的文件是明文的且挂进再进去了,pod 里面自己需要如何时候,看自己的需求了

此处记得挂载的名字需要是一样的,另外是使用 secret.secretName 关键字

如果是 ConfigMap 的挂载,可以是 configMap.name 关键字

查看效果:

kubectl create -f mysecret.yaml 创建 pod 之后,查看效果

kubectl exec -it mysecret ls /tmp/cert
kubectl exec -it mysecret cat /tmp/cert/hello
kubectl exec -it mysecret cat /tmp/cert/https.cert

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jw5QY619-1689605693575)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220130124445846.png)]

我们再来看看本地的 http.cert 的信息,是否也是同样的字符串

没毛病老铁,看效果还可以

最后提醒一点:

在 pod 运行过程中,如果修改了引用的 ConfigMap 和 secret,如果 pod 中的服务不支持热配置读取的话,那么请一定记得重启 pod

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

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

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

相关文章

直击现场|Sui Builder House巴黎站倒计时0天

Sui Builder House下一站即将在法国巴黎举行,为世界各地的开发人员提供在这座被誉为“City of Light”的城市学习和交流的机会。 Sui Builder House将于7月18–19日在巴黎举行,这是展示Sui突破性技术的绝佳机会。在丹佛Builder House活动之后&#xff0c…

PCIe总线的链路训练

目录 概述 链路训练的目的 几个关键概念 Lane reveral : Polarity inversion: De-skew: link number: Lane number: Bit lock: Symbol lock: 几个特殊序列: TS1和TS2&am…

深度学习系列8——分类模型评估指标

1. 概述 1.1 分类 分类:标签为离散值。 回归:标签为连续值。 2. 混淆矩阵 二分类的混淆矩阵: TP 和 TN 为网络预测正确的部分,FP 和 FN 为网络预测错误的部分。 3. 二级指标 准确率: 针对模型的整体评估&#xf…

Java基础之复习笔记(上)

目录 一、Java是什么? 💖Java概念 💖Java运行机制 二、Java的语言基础 💖关键字 💖基本数据类型 💖运算符 三、Java逻辑控制 💖分支结构 💖循环结构 四、Java的方法 &#…

嵌入式基础知识-系统调度

系统调度是操作系统重要功能,在嵌入式开发,也要了解系统调度的基本原理。对于嵌入式Linux开发,一般使用多线程和多进程开发,对于运行RTOS的嵌入式系统,一般使用多任务开发。这些线程、进程、任务的调度,有许…

RS232转Profinet网关怎么设置

大家好,今天我要给大家带来一个很有意思的案例分享。你们猜猜,这回我们要用远创智控的一款神奇的网关YC-RSPN-002做什么呢?没错,我们要把一台扫码枪设备通过这个RS232转PROFINET网关,接入到一台西门子S7-1200PLC的Prof…

在这个高度自动化的时代,为什么自动化测试取代不了手功测试?

在这个高度自动化的时代,为什么自动化测试取代不了手功测试?06:1101自动化测试和手工测试的概念 自动化测试和手工测试都是软件测试的两种基本方法。 自动化测试是基于脚本或工具自动执行测试用例的过程。测试人员可以使用自动化测试工具来编写测试脚本…

【美团面试】软件测试面试题

一、设计登录界面测试用例 功能测试(Function test) 0. 什么都不输入,点击提交按钮,看提示信息。(非空检查) 1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。(正常输入&#xff0…

C语言 替换gets函数

目录 替换gets函数gets()用处gets()的危险之处gets()的几种替代方法一、用%c循环输入直到遇到换行结束二、用getchar()循环输入直到遇到换行结束三、scanf的另一种用法四、c中的getline()方法五、解决方案使用fgets代替 替换gets函数 gets()用处 gets从标准输入设备读字符串函…

noSQL的小练习

目录 Redis: 1、 string类型数据的命令操作: 2、 list类型数据的命令操作: 3、 hash类型数据的命令操作: MongoDB: 1. 创建一个数据库 名字grade 2. 数据库中创建一个集合名字 class 3. 集合中插入若…

Redis分片集群有什么作用?怎样读取和存储信息

分片集群主要解决的是,海量数据存储的问题,集群中有多个master,每个master保存不同数据,并且还可以给每个master设置多个slave节点,就可以继续增大集群的高并发能力。同时每个master之间通过ping监测彼此健康状态&…

Selenium中如何抓取网络请求响应及WebSocket信息

目录 获取Chrome性能日志 获取请求及响应信息 我们在使用Selenium测试Web或Electronjs/Cef框架应用时,有时候操作一个元素需要判断是否发送了请求以及请求的参数是否正确 我们可以通过,开启Chrome的性能日志来然后配合driver.get_log("performan…

qgis添加地理地图书签,快速定位到想要的位置

我们打开qgis软件,一般这个功能区域默认在左侧的中间位置,如图: 如果没有的话,我们需要调出来,在软件上方的菜单栏的空白处,右键显示面板调试框,勾选空间书签管理器面板,即可&…

6.3.4 利用Wireshark进行协议分析(四)----ARP协议解析

6.3.4 利用Wireshark进行协议分析(四)----ARP协议解析 我们知道对于单跳网络内部的数据传输,使用的是网络接口层的技术,比如以太网技术,以太网将报文数据封装在数据帧中进行传送,帧头指明发送方网卡的地址…

初学者必看!PLC转型C#上位机编程学习路线和方法

一.通过线上学习C#,机器视觉,运动控制卡,工程案例,我迈向工控软件开发的转型之路 大家好,我是华山编程培训中心的学员——李工,今天分享下我是如何从电气工程师成功转型上位机开发的经历,希望我…

【10】STM32·HAL库开发-MAP文件解析 | STM32启动过程

目录 1,MAP文件浅析(了解)1.1MAP文件概念和作用1.2MAP文件组成1.3MAP文件实操 2.STM32启动过程(了解)2.1STM32启动模式(F1/F4/F7/H7)(也称自举模式)2.1.1STM32启动模式&a…

MybatisPLus3-Activerecord

不用注入数据层对象&#xff0c;就可以实现对数据的访问和操作 具体步骤 1.实体类继承Model<实体类名> 2.mapper接口继承BaseMapper<类名> 3.通过实例化实体对象&#xff0c;就可以通过对象调用CRUD的方法 增 删除/修改/查找的方式都和上面一样

《TCP IP网络编程》第六章

《TCP IP网络编程》第六章&#xff1a;基于 UDP 的服务端/客户端 UDP 套接字的特点&#xff1a; 通过寄信来说明 UDP 的工作原理&#xff0c;这是讲解 UDP 时使用的传统示例&#xff0c;它与 UDP 的特点完全相同。寄信前应先在信封上填好寄信人和收信人的地址&#xff0c;之后…

力扣142. 环形链表 II

题目 给定一个链表的头节点head&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回null。 链接&#xff1a;142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 题解 方法一&#xff1a;设置两个指针&#xff0c;一个指针指向链表头结点&#…

重生之我要学C++第一课

时隔三月&#xff0c;继C语言之后&#xff0c;博主学成C归来&#xff0c;欲重开博客&#xff0c;与诸位分享经验&#xff0c;共同学习&#xff0c;今天就开始我们的c第一课——入门篇。 既然要开始学习c&#xff0c;就要了解 什么是c&#xff1a; C 语言是结构化和模块化的语言…