ConfigMap 补充 和 Secret

对于上一篇文章我们分享了为什么要使用 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【监控系统】Prometheus监控组件Node-Exporter配置实战

这一节,我们来配置一下Node-Exporter,那么我们先来了解一下什么是Prometheus的Exporter? 任何向Prometheus提供监控样本数据的程序都可以被称为一个Exporter,它是一种用于将不同数据源的指标提供给Prometheus进行收集和监控的工具…

缓存淘汰策略

LRU 与 LFU 缓存策略及其实现。 应用层缓存 鉴于磁盘和内存读写的差异性,DB 中低频写、高频读的数据适合放入内存中,直接供应用层读写。在项目中读取用户资料时就使用到了 LRU,而非放到 Redis 中。 缓存的 2 个基本实现 Set(key string, v…

ios 通过xib自定义控件

通过xib自定义控件 xib和stroyboayd对比 共同点: 都是用来描述软件界面 都是用interface Builder工具来编辑 本质都是转换成代码去创建控件 不同点: xib是轻量级的,用来描述局部ui界面 创建模型文件 XMGCar 自定义控件 xib 图形设计 …

mac批量提取图片文件名到excel?

mac批量提取图片文件名到excel?最近有个小伙伴向我求助一个电脑操作上的问题,问我在Mac电脑上用什么方法可以快速批量的将大量图片的名称一次性提取出来,并且保存到excel表格里。记得小编曾经给大家分享过windows电脑上批量提取文件名称的方法…

爱心代码李峋同款爱心 python html

目录 前言 一、python 1.python 第一个 2.python第二个 二、HTML 1.第一个 2.第二个html 3.第三个html 3.第四个html 总结 前言 最近那个电视剧很火,就是搞爱心代码的,本人兴趣使然,在网上搜集了一些代码,经过一定修改&…

【iOS】—— 编译链接

【iOS】—— 编译链接 文章目录 【iOS】—— 编译链接编译流程预处理(预编译Prepressing)编译(Compilation)汇编(Assembly)链接(Linking) 编译流程 编译流程分为四步 预处理&#…

python 安装、配置、使用 xlrd模块、numpy模块

目录 一、xlrd模块 (一)安装xlrd模块 (二) pycharm 配置xlrd (三) 读取xls格式 (四)xlrd读取时间日期时,会是float类型,需要转换。 二、numpy模块 (一)n…

基于linux下的高并发服务器开发(第一章)- Linux系统IO函数

05 / Linux系统IO函数 (1)man 2 open >>打开一个已经存在的文件 int open(const char *pathname, int flags); 参数: pathname:要打开文件路径 - flags:对文件的操作权限设置还有其他的设置 O_RDONLY,O_WRONLY,O_RDWR 这三个设置是互斥…

数据结构——各种常见算法的实现方法和思路

文章目录 常见的排序算法类型复杂度和稳定性 1.冒泡排序2.直接插入排序3.希尔排序4.简单选择排序方法1:双向遍历选择排序方法2:单向遍历选择排序 5.归并排序方法1:递归方法2:非递归 6.快速排序方法1:随机取keyi方法2&a…

leetcode 17. 电话号码的字母组合

2023.7.18 该题也是经典回溯题。 与之前做的组合有两点不同: 之前的组合题是求同一集合的组合,而本题是求不同集合的组合。本题还需要有一个将字符串数字转换为手机号9键对应字符集的过程。 下面上代码: class Solution { public:string le…

C# 连接mysql数据库报错:Character set ‘utf8mb3‘ is not supported by .Net Framework.

最近项目突然连接mysql数据库出现一个bug,排查了半小时,最后更新MySql.Data版本解决了,错误信息如下: System.NotSupportedException: Character set utf8mb3 is not supported by .Net Framework.在 MySql.Data.MySqlClient.Cha…

学习PostgreSQL的优势

学习 PostgreSQL 可以为您打开许多就业机会。 PostgreSQL 是一种强大的关系型数据库管理系统,被广泛用于企业和组织中的数据管理和应用程序开发。 以下是一些学习 PostgreSQL 可能帮助您找到的工作领域: **1.数据库管理员:**作为 PostgreSQ…

element 文件批量上传展示上传结果、失败重新上传

效果图&#xff1a; 不废话了&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; HTML部分&#xff1a; <template><div class"container"><el-uploadclass"upload-demo"accept".jpg,.JPG,.png,.PNG"action"#&q…

浅谈物联网在电力行业的应用

摘要&#xff1a;随着社会经济的快速发展&#xff0c;物联网技术也在各个行业中得到了广泛的应用&#xff0c;特别是在电力行业中应用物联网技术&#xff0c;也有效的促进了电力行业的现代化发展。而物联网与智能电网同样都是当代重要的高新技术以及新兴产业。所以通过对于物联…

【论文阅读】《Distilling the Knowledge in a Neural Network》

【论文阅读】《Distilling the Knowledge in a Neural Network》 推荐指数&#xff1a; 1. 动机 &#xff08;1&#xff09;虽然一个ensemble的模型可以提升模型的效果&#xff0c;但是在效率方面实在难以接受&#xff0c;尤其是在每个模型都是一个大型的网络模型的时候。 &…

共筑开源新长城 龙蜥社区走进开放原子校源行-清华大学站

6 月 28 日&#xff0c;以“聚缘于校&#xff0c;开源共行”为主题的 2023 年开放原子校源行活动在清华大学成功举行。本次活动由开放原子开源基金会和清华大学共同主办&#xff0c;来自各行业的 22 位大咖共聚校园共话开源。龙蜥社区技术专家边子政受邀进行技术分享&#xff0…

多元线性回归的梯度下降法

多维特征&#xff08;其实就是从单变量变成了多变量&#xff09; 目前为止&#xff0c;我们探讨了单变量/特征的回归模型&#xff0c;现在我们对房价模型增加更多的特征&#xff0c;例如房间数楼层等&#xff0c;构成一个含有多个变量的模型&#xff0c;模型中的特征为。 增添…

hadoop --- MapReduce

MapReduce定义&#xff1a; MapReduce可以分解为Map (映射) Reduce (规约) &#xff0c; 具体过程&#xff1a; Map : 输入数据集被切分成多个小块&#xff0c;并分配给不同的计算节点进行处理Shuffle and Sort&#xff1a;洗牌和排序&#xff0c;在 Map 阶段结束后&#xf…

Versal ACAP在线升级之Boot Image格式

1、简介 Xilinx FPGA、SOC器件和自适应计算加速平台&#xff08;ACAPs&#xff09;通常由多个硬件和软件二进制文件组成&#xff0c;用于启动这些设备后按照预期设计进行工作。这些二进制文件可以包括FPGA比特流、固件镜像、bootloader引导程序、操作系统和用户选择的应…

使用nginx部署前后端分离项目,处理跨域问题(共享cookie)

1.唠嗑 踩坑了&#xff0c;花费一天时间&#xff0c;开始对nginx配置不懂&#xff0c;老是弄错了配置文件&#xff0c;之前装的nginx ,cofnig有两个&#xff0c;nginx.config和nginx.config.def &#xff0c;开始配置我在nginx.config中配置的&#xff0c;后面一直在改def&…