k8s——secret配置资源管理

news2024/11/20 22:38:10

一、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 | base64

echo -n bac1234 | base64

   2.1.2.2 编辑yaml文件

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: secrets
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      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: nginx
    image: nginx
    env:
      - name: TEST_USER
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: username
      - name: TEST_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: password

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

kubectl 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: nginx
    image: nginx
    env:
      - name: TEST_USER
        valueFrom:
          secretKeyRef:      #调用,此处调用的是kubectl get secret创建出来的mysecret1
            name: mysecret1
            key: username
      - name: TEST_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: 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-web
  labels:
    run: myapp-cm-web
spec:
  volumes:
  - name: web-cm
    configMap:
      name: web-nj
  containers:
  - name: myapp-cm-web
    image: soscscs/myapp:v1
    ports:
    - containerPort: 80
    volumeMounts:
    - name: web-cm
      mountPath: /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-config
  namespace: default
data:
  special.how: very
  special.type: good
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: 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: busybox
    image: busybox:1.28.4
    command: 
	- /bin/sh
	- -c
	- echo "$(SPECIAL_HOW_KEY) $(SPECIAL_TYPE_KEY)"
    env:
      - name: SPECIAL_HOW_KEY
        valueFrom:
          configMapKeyRef:
            name: special-config
            key: special.how
      - name: SPECIAL_TYPE_KEY
        valueFrom:
          configMapKeyRef:
            name: special-config
            key: special.type
    envFrom:
      - configMapRef:
          name: env-config
  restartPolicy: 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: busybox
    image: busybox:1.28.4
    command: [ "/bin/sh", "-c", "sleep 36000" ]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config
  restartPolicy: 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-config
  namespace: default
data:
  log_level: INFO
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-nginx
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config
      volumes:
        - name: config-volume
          configMap:
            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.coloradmin.cn/o/1798636.html

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

相关文章

优思学院|精益生产学习过程中如何提高自己的能力水平?

精益生产是一项实践多过理论的课题。 优思学院认为实践并不限于实际的工作,日常的思考同样重要,例如我们会要求学员在学习时不断思考各种事物,不限于自己的企业。例如当你去到一家餐厅,你能夠观察到什么浪费?你可否把…

JVM 虚拟机

JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机,虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机有:JVM、VMwave、Virtual Box等。JVM 是一台被定制过的现实当中不存在的计算…

【全开源】防伪溯源一体化管理系统源码(FastAdmin+ThinkPHP+Uniapp)

🔍防伪溯源一体化管理系统:守护品质,追溯无忧 一款基于FastAdminThinkPHP和Uniapp进行开发的多平台(微信小程序、H5网页)溯源、防伪、管理一体化独立系统,拥有强大的防伪码和溯源码双码生成功能&#xff0…

EXCEL多sheet添加目录跳转

EXCEL多sheet添加目录跳转 背景 excel中有几十个sheet,点下方左右切换sheet太耗时,希望可以有根据sheet名超链接跳转相应sheet,处理完后再跳回原sheet。 方案一 新建目录sheet,在A1写sheet名,右键选择最下方超链接…

usock: No such file or directory

在搭建T113的tina系统时,运行ubusd报错,“usock: No such file or directory” rootTinaLinux:/# ifup -a Failed to connect to ubus /sbin/ifup: line 51: /sbin/wifi: not foundrootTinaLinux:/# ubusd usock: No such file or directory因为运行 ubu…

正确的功能可将热晶体管风速计线性化

处理传感器电路输出信号的电路或计算公式必须生成传感器响应的反函数。例如,如果传感器响应是对数函数,则线性化部分的响应必须是指数的。 这项工作首先获取传感器响应的 46 个离散点(参见参考论文中的图 4)。刚开始时&#xff0…

MySQL-Explain使用

MySQL-Explain使用 type列 type列 这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。 依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL 一般来说&…

git 提交

当你不小心在master上改了代码,并且add, commit 之后,想push,发现根本push不了(本来也不能直接将master代码push到远端),而且每次pull远程master的时候都要和本地的master进行merge &#xff0c…

初级软件测试快速入门

文章目录 初级软件测试-测试用例、缺陷报告的认识与使用软件测试简介测试分类模型质量模型测试模型 用例编写的八大要素用例设计方法缺陷 初级软件测试-测试用例、缺陷报告的认识与使用 软件测试简介 什么是软件测试? 使用技术手段验证软件是否满足需求 主流技能 …

【Linux】系统优化:一键切换软件源与安装Docker

引言 在Linux系统安装完成后,进行一些必要的初始化设置是提升系统性能和用户体验的关键。本文将重点介绍两个实用的一键脚本:LinuxMirrors提供的软件源切换脚本和Docker安装脚本。这两个脚本将帮助我们简化配置安装过程。 一键切换软件源脚本 在Linux…

算法人生(20):从“自注意力机制”看“个人精力怎么管”

我们知道在ChatGPT中,Transformer模型扮演着重要的角色。Transformer 模型通过自注意力机制来建模序列中的依赖关系,从而实现对序列数据的处理的。因为传统的循环神经网络(RNN)和卷积神经网络(CNN)在处理长…

【NPS】微软NPS配置802.1x,验证域账号,动态分配VLAN(有线网络续篇)

继上一篇文章中成功实施了有线802.1x验证域账号并动态分配VLAN的策略之后,我们迎来了一个新的目标:在用户验证失败时,自动分配一个Guest VLAN,以确保用户至少能够访问基本的网络服务。这一改进将显著提升网络的灵活性和用户的上网…

此商家的收款功能已被限制,暂无法支付是怎么回事

商家遇到收款功能被限制的情况时,通常是长时间没有交易导致的,还有可能是存在欺诈等风险造成的。不管是什么原因,商家可以按照以下步骤在微信支付商户平台和微信支付商家助手小程序中查看原因并尝试解决问题。 1. 登录微信支付商户平台 首先…

【免费】2021年数学建模国赛C题问题一--基于熵权法和TOPSIS法详细版附Word加代码

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

龙讯旷腾PWmat团队研发的开源机器学习力场PWMLFF升级,新增高效训练NEP模型

近几年来,一种结合了物理学、高性能并行计算和机器学习算法的新的科研范式——AI for science迅速崛起,并为解决精度与尺度无法并存的问题带来了曙光。基于机器学习力场(machine learning force field, MLFF)的分子动力学&#xf…

深度学习_02_卷积神经网络循环神经网络

卷积神经网络 1. 卷积神经网络 神经元存在局部感受区域----感受野 . 第一个卷积神经网络雏形----新认知机 缺点:没有反向传播算法更新权值,模型性能有限 第一个大规模商用卷积神经网络----Lenet-5 缺点:没有大量数据和高性能计算资源。 第一个…

【造化弄人:计算机系大学生真的象当年的高速公路收费员一样吗?】

曾经高速公路的收费员是多么的自豪和骄傲,按照常逻辑,车是越来越多,收费员应该越来越多?但现实情况,大家有目共睹! 不论你的车子怎么跑,只要上高速就要交费,那时候的收费员&#xf…

中国版Wayve决战端到端,等待数据的大力出奇迹

作者 |王博 编辑 |德新 「人工智能的定律只有一个,就是规模定律(Scaling Law),大力出奇迹。端到端是描述方式,更应该去考虑如何去生产更多的自动驾驶合适的数据,来喂养更大更合适的模型,取得更…

django ORM model update常规用法

Django ORM(对象关系映射)提供了一种强大而直观的方式,通过Python类和方法与数据库交互。在Django模型中更新记录是一个常见的任务,可以通过多种方式完成。以下是一些常见的更新记录的方法: 1. 更新单条记录 使用 sa…

Python实现日志的记录

1 日志 1、介绍 日志(Log)是一个记录事件或系统活动的文件或数据集,日志是系统管理员和开发者用于诊断问题、监视系统性能、以及追踪用户活动的关键工具。包含以下: 系统日志:记录操作系统、应用程序、硬件组件等的事…