k8s——secret配置资源管理

一、Secret

  1.1 Secret定义

    Secret是用来保存密码、token、密钥等敏感数据的k8s资源,这类数据虽然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险

  1.2 Secret类型

  • kubernetes.io/service-account-token:由Kubernetes自动创建,用来访问APIServer的 Secret,Pod 会默认使用这个Secret与APIServer通信, 并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount目录中
  • Opaque:base64 编码格式的Secret,用来存储用户自定义的密码、密钥等,默认的Secret 类型
  • kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息

  1.3 使用secret方式

  • 作为挂载到一个或多个容器上的卷中的文件。
  • 作为容器的环境变量。
  • 由 kubelet 在为Pod拉取镜像时使用。

  1.4 Secret应用场景

Secrets | KubernetesA Secret is an object that contains a small amount of sensitive data such as a password, a token, or a key. Such information might otherwise be put in a Pod specification or in a container image. Using a Secret means that you don't need to include confidential data in your application code.Because Secrets can be created independently of the Pods that use them, there is less risk of the Secret (and its data) being exposed during the workflow of creating, viewing, and editing Pods.icon-default.png?t=N7T8https://kubernetes.io/docs/concepts/configuration/secret/

二、Secret应用实例

  2.1 创建Secret

  2.1.1 用kubectl create secret命令创建Secret,在Kubernetes集群中创建一个名为mysecret的通用(generic)类型的Secret对象,并从本地文件中加载用户名和密码信息作为Secret的数据

这个命令执行的操作包括:

  • 创建一个名为mysecret的通用类型的Secret对象。
  • 使用--from-file选项从本地文件中加载数据,其中username.txt文件的内容将作为Secret对象中的用户名数据,而password.txt文件的内容将作为Secret对象中的密码数据。

这样,Kubernetes将会创建一个包含用户名和密码信息的Secret对象,可以在容器中挂载并使用这些敏感数据,而无需明文暴露在Pod的配置文件中。

get或describe指令都不会展示secret的实际内容,这是出于对数据的保护的考虑

  2.1.2 内容用base64编码,创建Secret

  2.1.2.1 base64编码
echo -n zhangsan | base64echo -n bac1234 | base64

   2.1.2.2 编辑yaml文件

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: nginximage: nginxvolumeMounts:- name: secretsmountPath: "/etc/secrets"readOnly: truevolumes:- name: secretssecret:secretName: mysecret
#指定了一个名为secrets的卷(volume),并将一个名为mysecret的Secret对象挂载到这个卷上。这样,Pod 中的容器就可以访问这个Secret对象中存储的敏感数据。

  2.1.2.3 运行yaml文件

  2.1.2.4 加密显示secret 

  2.2 使用Secret方式

  2.2.1 将Secret挂载到Volume中,以Volume的形式挂载到Pod的某个目录下

  2.2.1.1 编辑yaml文件
apiVersion: v1
kind: Pod
metadata:name: mypod1        
spec:containers:- name: nginximage: nginxenv:- name: TEST_USERvalueFrom:secretKeyRef:name: mysecret1key: username- name: TEST_PASSWORDvalueFrom:secretKeyRef:name: mysecret1key: password

  2.2.1.2 运行yaml文件
kubectl create -f secret-test.yamlkubectl get pod 

  2.2.1.3 运行mypod,查看账户密码
kubectl exec -it mypod sh 

  2.2.2 将secret挂载到环境变量调用

  2.2.2.1 编辑yaml文件
apiVersion: v1
kind: Pod
metadata:name: mypod1        
spec:containers:- name: nginximage: nginxenv:- name: TEST_USERvalueFrom:secretKeyRef:      #调用,此处调用的是kubectl get secret创建出来的mysecret1name: mysecret1key: username- name: TEST_PASSWORDvalueFrom:secretKeyRef:name: mysecret1key: password

  2.2.2.2 运行yaml文件

  2.2.2.3 运行mypod,查看账户密码

三、ConfigMap

  3.1 configmap定义

    与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息。

  3.2 configmap应用场景

  • ConfigMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制,ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制对象。
  • 应用场景:应用配置

  3.3 应用示例

  3.3.1 创建Configmap

  3.3.1.1 导入nginx.conf配置文件

导入配置文件方式
导入nginx.conf配置文件
kubectl create configmap nginx-config -h(不会后面的参数可以使用h)查看


kubectl create configmap nginx-config --from-file=nginx.conf


列出当前集群中的所有ConfigMap对象,并显示它们的名称、命名空间、数据等信息——kubectl get cm 

含义: 

kubectl create configmap nginx-config --from-file=nginx.conf:在当前创建一个名为nginx-config的configmap对象并将nginx.conf中的内容转移到该对象中。如果当前目录下没有nginx.conf文件,则会出现错误

kubectl get cm——列出当前集群中的所有ConfigMap对象,并显示它们的名称、命名空间、数据等信息

  3.3.1.2 查看nginx-config详细信息

  3.3.1.3 使用目录创建

  3.3.1.3.1 编辑game.properties
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30

  3.3.1.3.2 编辑
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

  3.3.1.3.3 指定在目录下的所有文件都会被用在ConfigMap里面创建一个键值对

  3.3.1.3.4 以yaml格式查看game-config详细信息

  3.3.1.4 使用文件创建

    只要指定为一个文件就可以从单个文件中创建ConfigMap,–from-file 这个参数可以使用多次,即可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的

  3.3.1.4.1 --from-file用来分别指定配置文件

  3.3.1.4.2 以yaml查看game-config-2

  3.3.1.4.3 详细查看game-config-2

  3.3.1.5 使用字面值创建
  3.3.1.5.1 使用文字值创建,利用--from-literal参数传递配置信息,该参数可以使用多次

  3.3.1.5.2 清除所有cm和pod

  3.3.1.5.3 举例说明
  3.3.1.5.3.1 编辑内容,使用文字值创建,利用--from-literal参数传递配置信息

  3.3.1.5.3.2 查看详细信息

  3.3.1.5.4 调用方式
  3.3.1.5.4.1 编辑web-blue.yaml文件
apiVersion: v1
kind: Pod
metadata:name: mypod-cm-weblabels:run: myapp-cm-web
spec:volumes:- name: web-cmconfigMap:name: web-njcontainers:- name: myapp-cm-webimage: soscscs/myapp:v1ports:- containerPort: 80volumeMounts:- name: web-cmmountPath: /usr/share/nginx/html

  3.3.1.5.4.2 运行yaml文件

  3.3.2 Pod中使用ConfigMap

  3.3.2.1 使用ConfigMap来替代环境变量
  3.3.2.1.1 编辑env.yaml文件
apiVersion: v1
kind: ConfigMap
metadata:name: special-confignamespace: default
data:special.how: veryspecial.type: good
---
apiVersion: v1
kind: ConfigMap
metadata:name: env-confignamespace: default
data:log_level: INFO #记录信息level(正常级别)日志

  3.3.2.1.2 运行env.yaml文件

  3.3.2.1.3 编辑test-pod文件

  3.3.2.1.4 运行yaml文件

  3.3.2.1.5 查看test-pod日志信息

  3.3.2.2 用ConfigMap设置命令行参数
  3.3.2.2.1 编辑test-pod2.yaml文件
apiVersion: v1
kind: Pod
metadata:name: test-pod2
spec:containers:- name: busyboximage: busybox:1.28.4command: - /bin/sh- -c- echo "$(SPECIAL_HOW_KEY) $(SPECIAL_TYPE_KEY)"env:- name: SPECIAL_HOW_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.how- name: SPECIAL_TYPE_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.typeenvFrom:- configMapRef:name: env-configrestartPolicy: Never

  3.3.2.2.2 运行yaml文件

  3.3.2.2.3  查看test-pod日志信息

  3.3.2.3 通过数据卷插件使用ConfigMap

    在数据卷里面使用ConfigMap,就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容

  3.3.2.3.1 编辑test-pod.yaml文件
apiVersion: v1
kind: Pod
metadata:name: test-pod3
spec:containers:- name: busyboximage: busybox:1.28.4command: [ "/bin/sh", "-c", "sleep 36000" ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: special-configrestartPolicy: Never

   3.3.2.3.2 运行yaml文件

  3.3.2.3.3 进入test-pod3查看内容

  3.3.2.4 ConfigMap的热更新

    相关标签查看可用命令——kubectl api-resources

  3.3.2.4.1 编辑test-pod4文件
#ConfigMap 的热更新(如果少加参数可以在外面直接热更新)
apiVersion: v1
kind: ConfigMap
metadata:name: log-confignamespace: default
data:log_level: INFO
---
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:replicas: 1selector:matchLabels:app: my-nginxtemplate:metadata:labels:app: my-nginxspec:containers:- name: my-nginximage: nginxports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: log-config

  3.3.2.4.2 运行yaml文件

  3.3.2.4.3 进入my-nginx-xxxx查看内容

  3.3.2.4.4 查看log-config

  3.3.2.4.5 数据同步更新

  3.3.2.4.6 ConfigMap更新后滚动更新Pod

    更新ConfigMap目前并不会触发相关Pod的滚动更新,可以通过在 .spec.template.metadata.annotations中添加version/config ,每次通过修改version/config来触发滚动更新

更新ConfigMap后:

  • 使用该ConfigMap挂载的Env不会同步更新。
  • 使用该ConfigMap挂载的Volume中的数据需要一段时间(实测大概10秒)才能同步更新。 

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

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

相关文章

D365 通过x++创建销售订单

文章目录 创建销售订单 创建销售订单 SalesTable salesTable; SalesLine salesLine; NumberSeq numberSeq;ttsBegin; //creating sales order header //getting sales order id from number sequence numberSeq NumberSeq::newGetNum(SalesParameters::numRefSalesId()); num…

w801编程入门:探索高效与创新的编程之旅

w801编程入门:探索高效与创新的编程之旅 在数字化快速发展的今天,编程已经成为一项必备的技能。而w801编程,作为新兴的编程领域,正以其高效和创新的特点吸引着越来越多的开发者。本文将带领您从四个方面、五个方面、六个方面和七…

SpringBoot+Vue网上超市系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 用户管理员 系统功能截图

03-3.3.3 栈在递归中的应用

👋 Hi, I’m Beast Cheng👀 I’m interested in photography, hiking, landscape…🌱 I’m currently learning python, javascript, kotlin…📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

为你的网站安装免费的 SSL TLS 证书

文章目录 前言准备工作证书申请证书安装Nginx配置 前言 申请了很久的域名没有用起来怎么行呢?而访问安全需要获得一个可信的https证书颁发机构的认证,这其实是一个提升你网站可信度的方法,有很多的证书颁发机构,收费也高低不等&a…

利用Redis的队列模式实现消息的发送和订阅,适合分布式场景,Java实现代码

在Redis中,通常使用发布/订阅模式(Pub/Sub)来进行消息的实时通信。然而,标准的Redis发布/订阅模式并不直接支持确保一条消息只被一台机器消费。在这种模式下,所有订阅了特定频道的客户端都会收到发布的消息。 但是&…

Cesium项目报错An error occurred while rendering. Rendering has stopped.

一般就是本地打开会报错,改成用本地服务器打开 全局安装一个live-server sudo cnpm i live-server -g然后新增一个package.json文件 npm init -y然后在package.json的scripts中增加一个命令 "server": "live-server ./ --port8181 --hostlocalhos…

AI图书推荐:用ChatGPT来写非虚构类书籍

这本书《用ChatGPT来写非虚构类书籍 》(ChatGPT For KDP_ A manual from an experienced self-publisher to nonfiction authors for writing the book you were born to write with ChatGPT prompts mastering)是一本专为非虚构类书籍作者编写的指南&am…

实习记录2

1.flowable框架参数传递大概流程 通过传递xml,传递到后端,然后后端去解析 2.vue封装组件 在 Vue.js 中创建可复用的自定义组件是一个常见的需求,这样可以提高代码的复用性和可维护性。下面是一个简单的步骤指南,帮助你创建一个…

MLC工具是否适用AMD和ARM场景?如何测试内存性能?

MLC(Memory Latency Checker)主要是由Intel开发的工具,主要用于Intel平台上的内存性能测试,尤其是针对Intel处理器的内存延迟和带宽。尽管MLC主要针对Intel处理器设计,理论上它可以在任何支持Intel兼容指令集的系统上运…

嵌入式linux系统中利用I2C控制器应用开发详解

大家好,今天主要给大家分享一下,在linux系统上如何使用I2C进行应用开发详解。 l2C (Inter一Integrated Circuit BUS)是I2C BUS简称.中文为集成电路总线.是目前应用最广泛的总线之一。和IMX6ULL有些相关的是.刚好该总线是NXP前身的PHLIPS 设计。 第一:I2C协议概述 …

Spring框架IoC和AOP

Spring是一个开源的Java应用程序框架,旨在简化企业级应用程序的开发。它注重解决Java开发中的常见问题,如依赖注入、面向切面编程、事务管理等。Spring提供了一个轻量级的容器,用于管理和装配应用程序的对象。 Spring框架具有以下特点和优势…

xml 取值错误 #{} boolean 一直为 false

取值时 #{param.msgStatus} 一直是false&#xff0c;java代码里面显示true。 <select id"findPageOaReading" resultType"com.focusin.data.office.func.dto.ProcessMessageInfoDTO">select i.*, t.template_name procdefNamefrom process_message_…

西瓜书总结——决策树原理+ID3决策树的模拟实现

西瓜书总结——决策树原理ID3决策树的模拟实现 前言1. 决策树结构2. 决策树的生成&#xff08;注意区分属性和类别&#xff09;3. 划分选择3.1 信息熵和信息增益3.2 增益率3.3 基尼指数&#xff08;鸡你指数&#xff09; 4. 剪枝处理4.1 预剪枝4.2 后剪枝 5. 连续值与缺失值处理…

二分+模拟,CF1461D - Divide and Summarize

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1461D - Codeforces 二、解题报告 1、思路分析 我们发现每次分裂操作结果都是固定的 我们从初始序列分裂出两个确定的子序列&#xff0c;两个确定的子序列又分裂出4个确定的子序列 那么也就是说…

【Python】解决Python报错:ZeroDivisionError: division by zero

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 直接除零2.2 变量导致的间接除零 3. 解决方案3.1 检查除数3.2 使用异常处理 4. 预防措施4.1 数据验证4.2 编写防御性代码 结语 引言 在Python中&#xff0c;尝试将一个数字除以零时&#xff0c;会抛出ZeroDivisionErr…

安装 hbase(伪分布式)

目录 1、安装 jdk8 &#xff08;1&#xff09;选择 jdk 版本 &#xff08;2&#xff09;下载 jdk 并解压 &#xff08;3&#xff09;配置环境变量 2、安装hadoop &#xff08;1&#xff09;添加 hadoop 用户&#xff0c;配置免密登录 &#xff08;2&#xff09;下载 hado…

Duilib多标签选项卡拖拽效果:添加动画特效!

动画是小型界面库的“难题”、“通病” 几年前就有人分享了如何用direct UI制作多标签选项卡界面的方法。还有人出了一个简易的浏览器demo。但是他们的标签栏都没有Chrome浏览器那样的动画特效。 如何给界面添加布局是的动画特效呢&#xff1f; 动画使界面看起来高大上&#…

【录制,纯正人声】OBS录制软件,音频电流音,杂音解决办法,录制有噪声的解决办法

速度解决的方法 &#xff08;1&#xff09;用RNNoise去除噪声。RNNoise是一个开源的&#xff0c;效果不好的噪声去除器。使用方法就是点击滤镜&#xff0c;然后加噪声抑制RNNoise。【这方法不好用】 &#xff08;2&#xff09;用Krisp(https://krisp.ai/) 去除噪声。这个Kris…

探索C++ STL中的std::list:链式存储的艺术与实践

目录 ​编辑 引言 一、std::list详解 二、std::list的关键成员函数 三、示例代码 四、std::list与std::vector的对比 内存布局&#xff1a; 插入与删除&#xff1a; 迭代器稳定性&#xff1a; 五、应用场景 结语 引言 在C标准模板库(STL)中&#xff0c;std::list作…