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,一经查实,立即删除!

相关文章

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

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

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 中创建可复用的自定义组件是一个常见的需求,这样可以提高代码的复用性和可维护性。下面是一个简单的步骤指南,帮助你创建一个…

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

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

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…

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作…

skywalking学习

文章目录 前言一、skywalking单体安装部署1. 下载skywalking2. 部署oap和oap-ui服务3. 测试skywalking监控springboot应用 二、搭建swck(skywalking集群)1.安装k8s2.下载swck3.设置pod自动注入java agent 三、skywalking监控python四、skywalking监控cpp总结参考 前言 本文主要…

SSL/TLS和HTTPS

HTTPS就是用了TLS包装的Socket进行通信的HTTP 混合加密 被称为混合加密。具体过程如下&#xff1a; 使用非对称加密协商对称密钥&#xff1a; 在通信的开始阶段&#xff0c;通常由客户端和服务器使用非对称加密算法&#xff08;如RSA&#xff09;来协商一个对称密钥。通常情…

vue3中的ref与reactive的区别

目录 1、两者的区别底层实现响应式引用与响应式对象 2、用法3、vue3中声明的数组/对象3.1 通过reactive 声明的Array/Object&#xff0c;给它重新分配一个全新的对象时&#xff0c;会出错、或失去响应式效果 3.2 解决方案 4、cosnt 说明5、Proxy 与 definePropertyref 浅层响应…

人工智能与能源约束的矛盾能否化解

以下文章来源&#xff1a;澎湃新闻 人工智能技术在台前展示的是比特世界的算力、算法和数据&#xff0c;但其“轻盈的灵魂”背后则是土地、能源和水等物理世界“沉重的肉身”。根据本文三种情境的模拟测算&#xff0c;未来人工智能发展需要可持续的巨量能源支撑&#xff0c;能源…

基于Python的北京天气数据可视化分析

项目用到库 import numpy as np import pandas as pd import datetime from pyecharts.charts import Line from pyecharts.charts import Boxplot from pyecharts.charts import Pie,Grid from pyecharts import options as opts from pyecharts.charts import Calendar 1.2…

Python应用开发——30天学习Streamlit Python包进行APP的构建(5)

上几次我们已经将一些必备的内容进行了快速的梳理,让我们掌握了streanlit的凯快速上手,接下来我们将其它的一些基础函数再做简单的梳理,以顺便回顾我们未来可能用到的更丰富的函数来实现应用的制作。 st.write_stream 将生成器、迭代器或类似流的序列串流到应用程序中。 …

vue -ant -design 卡片是布局 实现动态计算 当前的 左右间距 实现居中

是这样的一个样式 我们使用display :flex 布局的时候 我们全部剧中 display: flex;align-items: center;justify-content: center; 如果是上述的代码来说的话 总是最后的一个也是会居中的 这样就比较丑 我们好像就没有什么好的办法了 我们这自己写的 肯定没有组件牛 如果有…

三十六篇:未来架构师之道:掌握现代信息系统典型架构

未来架构师之道&#xff1a;掌握现代信息系统典型架构 1. 引言 在企业的数字化转型浪潮中&#xff0c;信息系统架构的角色变得日益重要。它不仅承载了企业的IT战略&#xff0c;更是确保企业在复杂、动态的市场环境中稳定运行的关键。作为信息系统的骨架&#xff0c;一个精心设…