[云原生] k8s配置资源管理

news2024/11/19 23:13:07

一、Secret的资源配置 

1.1 Secret配置的相关说明 

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

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 的认证信息。

Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret:
●作为挂载到一个或多个容器上的卷 中的文件。
●作为容器的环境变量。
●由 kubelet 在为 Pod 拉取镜像时使用。

应用场景:
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/

 1.2 陈述式创建Secret配置

 Secret 的创建是根据文件中保存到相应信息,进行。例如我们要通过一个用户名文件和密码文件来创建具体的Secret资源配置。

#首先准备好相对应的用户和密码文件
#echo 中 “-n” 选项为不换行
echo -n 'zhangsan'>username.txt
echo -n 'abc1234'>passwd.txt
 

#进行陈述创建secret配置
 
kubectl create secret generic mysecret --from-file=username.txt --from-file=password.txt

kubectl describe secrets mysecret 

 

1.3 声明式+base64编码创建Secret  

echo zhangsan|base64
echo abc1234|base64

#对已存在的secret资源进行模板导入yaml文件
kubectl get secrets mysecret -o yaml >secrets-demo.yaml
#对模板进行修改编辑
vim secrets-demo.yaml 
 
apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
  namespace: default
type: Opaque
data:
  username: emhhbmdzYW4K
  passwd: YWJjMTIzNAo=
 
kubectl apply -f secrets-demo.yaml 

 1.4 将secret以volume形式挂载到pod中 

#创建一个pod模板,对其进行修改编辑
kubectl run nginx --image=nginx:1.14 --dry-run=client -o yaml > secret-test.yaml
 
vim scret-test.yaml
 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: nginx:1.14
    name: nginx
    volumeMounts:
    - name: secrets
      mountPath: "/opt/secrets"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: mysecret1
 
 
 
kubectl creat -f scret-test.yaml

 

1.5  将Secret导入到pod中,充当环境变量 

 

#复制上一个模板,进行修改编辑
cp secret-test.yaml secret-env.yaml
 
#进行编辑修改
vim secret-env.yaml
 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: nginx:1.14
    name: nginx
    env:
    - name: TEST_USER
      valueFrom:
        secretKeyRef:
          name: mysecret1
          key: username
    - name: TEST_PASSWD
      valueFrom:
        secretKeyRef:
          name: mysecret1
          key: passwd
    envFrom:
    - secretRef:
        name: mysecret1
 
kubectl create -f secret-env.yaml                       
 

1.6 实战运用:使用secret配置免密交互拉取habor私有仓库镜像 

 我们在搭建好docker的私有仓库后,在使用私有仓库时需要通过docker login指令来登录到私有仓库中。但同时在使用的过程中也会把habor仓库的用户名和密码暴露在命令行中,存在一定的安全隐患。k8s中的secret配置的运用能够实现并且规避这一问题的存在

进行私有仓库的secret资源创建
#私有仓库的secret配置
kubectl create secret docker-registry myharbor --docker-server=192.168.73.108 --docker-username=admin --docker-password=Harbor12345 --docker-email=admin@qq.com
引用secret资源拉取私有仓库镜像创建pod 
vim harbor-test.yaml
 
apiVersion: v1
kind: Pod
metadata:
  name: harbor-pod
spec:
  nodeName: node02
  imagePullSecrets:
  - name: myharbor
  containers:
  - image: 192.168.73.108/test/nginx-test:v1
    name: harbor-pod
  dnsPolicy: ClusterFirst
  restartPolicy: Always       

注意:登录harbor仓库的默认配置为https,所以我们要在配置上修改(所有node节点,如果只是测试,可以在pod中指定node节点,修改一个node即可):

二、ConfigMap资源配置

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

2.1 使用目录来创建configMap资源

 创建一个目录并且在一个目录中填写两个文件:

mkdir /opt/configmap/
 
vim /opt/configmap/game.config
enemy.types=aliens,monsters
player.maximum-lives=5 
 
vim /opt/configmap/ui.config
color.good=purple
color.bad=yellow
allow.textmode=true
 
ls /opt/configmap/

kubectl create configmap game-config --from-file=/opt/cm/
//--from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容

2.2 使用文件创建configMap资源  

#只要指定为一个文件就可以从单个文件中创建 ConfigMap
--from-file 这个参数可以使用多次,即可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的
kubectl create configmap game-config2 --from-file=/opt/cm/game.config --from-file=/opt/cm/ui.config 

2.3 直接使用参数创建confidenceMap资源 

#使用文字值创建,利用 --from-literal 参数传递配置信息,该参数可以使用多次
 
kubectl create configmap special-config --from-literal=name=zhangsan --from-literal=sex=man

2.4 pod利用configMap资源 

(1)使用 ConfigMap 来替代环境变量
vim 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
 
 
kubectl create -f env.yaml 

(2)创建pod,并且引用configMap资源 
vim test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: busybox
    image: busybox:1.28.4
    command: [ "/bin/sh", "-c", "env" ]
    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


kubectl create -f test-pod.yaml

kubectl get pods

2.5 使用 ConfigMap 设置命令行参数

vim 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
 
 
kubectl create -f test-pod2.yaml

2.6 通过数据卷插件使用ConfigMap   

在数据卷里面使用 ConfigMap,就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容
vim test-pod3.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


kubectl create -f test-pod3.yaml 

kubectl get pods

 

比如:我想通过configMap实现单独挂载pod中的nginx.conf配置 

#首先获取nginx.conf 下载或则之前保存都可以
#nginx.conf 在/opt/conf/ 下
kubectl create cm mycm-nginx --from-file=/opt/conf
 
vim pod-demo1.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  volumes:
  - name: nginx
    configMap:
      name: mycm-nginx
  containers:
  - image: nginx:1.14
    name: nginx
    volumeMounts:
    - name: nginx
      mountPath: /etc/nginx/nginx.conf
      subPath: nginx.conf     #subPath  可以实现只覆盖修改该文件,而不影响目录
 
kubectl apply -f pod-demo1.yaml

2.7 configMap的热更新 

#创建一个cm资源
kubectl create configmap name-config --from-literal=name=zhangsan
 
#创建一个pod,并且通过volume的方式挂载configMap中的name-config
vim  pod-demo1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: namepod
spec:
  volumes:
  - name: update-test
    configMap:
      name: name-config
  containers:
  - image: nginx:1.14
    name: mypod
    volumeMounts:
    - name: update-test
      mountPath: /opt/name.txt

进行实时更新修改(开启另一个终端):

kubectl  edit cm name-config 

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

总结 

ConfigMap资源(简称cm)    用于保存配置文件、环境变量等不需要加密的信息。它可以实现将配置信息与应用程序解耦
创建cm资源
kubectl create cm <资源名称> --from-file=文件|目录  --from-literal=<键名>=<键值>

查看cm资源数据
kubectl get -n <命名空间> cm <cm资源名称> -o yaml
kubectl describe -n <命名空间> cm <cm资源名称>

使用cm资源
作为存储卷挂载的方式:
在Pod资源配置中用spec.volumes字段设置configMap类型的卷
在容器配置中用volumeMounts将卷挂载到容器的指定的目录,cm资源数据的键名会作为文件名,cm资源数据的键值会作为文件内容(支持热更新)
在容器配置中用volumeMounts.subPath字段指定文件名,实现将卷挂载到容器中指定的文件上(不支持热更新)

作为容器环境变量的方式:(不支持热更新)
在容器配置中用env.name字段自定义容器的环境变量名,用env.valueFrom.configMapKeyRef.key/name字段指定环境变量的值从哪个cm资源的键获取
在容器配置中用envFrom.configMapRef.name字段指定cm资源的名称,使得cm资源数据的键名和键值直接作为容器的环境变量名和值


Secret资源     用于保存密码文件、ssl证书/私钥文件、token令牌字符串、镜像私有仓库认证信息等需要加密的敏感信息
Secrets的主要目的是将敏感数据与应用程序代码分离,并提供一种安全的方式来存储和传递这些敏感数据给容器化的应用程序。它们以加密的形式保存,并且只能在需要时才能被解密和使用。

Secret的4种类型:
Opaque:默认的Secret资源类型,可以通过选项引用文件、目录、键值对的方式创建Secret资源,并且资源数据的键值会被自动转换为base64编码格式加密
kubernetes.io/service-account-token:当创建serviceaccout账户资源后K8S会自动创建同名的Secert资源,用于Pod访问apiserver时会使用此Secret卷中的token做认证
kubernetes.io/dockerconfigjson:用于存储K8S从Harbor等镜像私有仓库拉取镜像时做认证的信息
kubernetes.io/tls:用于存储tls/ssl证书和私钥文件的信息

创建Secret资源
kubectl create secret generic <资源名称> --from-file=文件|目录  --from-literal=<键名>=<键值>
kubectl create secret docker-registry <资源名称> --docker-server=<私有仓库URL路径> --docker-username=<仓库用户名> --docker-password=<用户密码> --docker-email=<邮箱地址>
kubectl create secret tls <资源名称> --cert=证书文件 --key=私钥文件

查看Secret资源(键值会以base64编码格式加密显示)
kubectl get -n <命名空间> secret <Secret资源名称> -o yaml
kubectl describe -n <命名空间> secret <Secret资源名称>

使用Secret资源
作为存储卷挂载的方式:
在Pod资源配置中用spec.volumes字段设置secret类型的卷
在容器配置中用volumeMounts将卷挂载到容器的指定的目录,Secret资源数据的键名会作为文件名,Secret资源数据的键值会作为文件内容

作为容器环境变量的方式:
在容器配置中用env.name字段自定义容器的环境变量名,用env.valueFrom.secretKeyRef.key/name字段指定环境变量的值从哪个Secret资源的键获取
在容器配置中用envFrom.secretRef.name字段指定Secret资源的名称,使得Secret资源数据的键名和键值直接作为容器的环境变量名和值

Pod配置从私有仓库拉取镜像:
在Pod资源配置中用spec.imagePullSecrets.name字段指定kubernetes.io/dockerconfigjson类型的Secret资源名称

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

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

相关文章

ARM TrustZone技术解析:构建嵌入式系统的安全扩展基石

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-dSk2aQ85ZR0zxnyI {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

STM32利用标准库的方式输出PWM(proteus仿真)

首先打开proteus仿真软件&#xff0c;绘制电路图&#xff1a; 其中示波器的添加很简单的&#xff0c;看图&#xff1a; 再来看看咱们最后程序的效果&#xff1a; 下面就是程序代码了&#xff0c;新建两个文件PWM.c和PWM.h文件&#xff0c;所属关系如图&#xff1a; 整个的编程思…

【Leetcode每日一题】 位运算 - 位1的个数(难度⭐)(32)

1. 题目解析 题目链接&#xff1a;191. 位1的个数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于计算题目所给32位二进制数1的个数返回即可。 2.算法原理 位运算特性&#xff1a;通过位运算&#xff0c;特别是按位与(&…

YOLO算法改进Backbone系列之:FocalNet

摘要&#xff1a;本文提出焦调制网络(FocalNets)&#xff0c;其中自注意(SA)完全被焦调制模块取代&#xff0c;用于建模视觉中的令牌交互。焦点调制包括三个组成部分&#xff1a;&#xff08;1&#xff09;焦点上下文化&#xff0c;使用深度卷积层堆栈实现&#xff0c;从短范围…

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型 Shepard模型(简称SP模型)就是一种直观的、可操作的相似预测法&#xff0c;常用于插值。相似预测法基本原理按照相似原因产生相似结果的原则&#xff0c;从历史样本中集中找出与现在的最相似的一…

SpringCloud使用

一 、SpringCloud项目简介 SpringCloud项目可划为三个角色&#xff0c;一个是服务的注册与发现中心&#xff08;Eureka &#xff09;&#xff0c;一个是服务的提供方&#xff08;Provider&#xff09;&#xff0c;最后一个是服务的消费方&#xff08;Consumer&#xff09;&…

C语言内存管理-堆内存

堆内存&#xff08;heap&#xff09;又被称为动态内存、自由内存&#xff0c;简称堆。堆是唯一可被开发者自定义的区段&#xff0c;开发者可以根据需要申请内存的大小、决定使用的时间长短等。但又由于这是一块系统“飞地”&#xff0c;所有的细节均由开发者自己把握&#xff0…

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript 不同版本4.8-4.28(最新版)离线部署

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript 不同版本4.8-4.28&#xff08;最新版&#xff09;SDK离线部署 测试资源4.18 以及之前版本4.19 以及之后版本 接触一段时间 ArcGIS JSAPI 之后&#xff0c;整体感觉还好&#xff0c;后来需要解决不同版本问题&#xff0…

学习Java的第六天

目录 一、变量 1、变量的定义 2、变量的声明格式 3、变量的注意事项 4、变量的作用域 二、常量 三、命名规范 Java 语言支持如下运算符&#xff1a; 1、算术运算符 解析图&#xff1a; 示例&#xff1a; 2、赋值运算符 解析图&#xff1a; 示例&#xff1a; 3、关…

若依项目部署之后页面无法展示,一直在加载的解决办法

解决办法 1. srore/modules/permission.js export const loadView (view) > {if (process.env.NODE_ENV "development") {return (resolve) > require([/views/${view}], resolve);} else {// return () > import(/views/${view});return (resolve) >…

如何从碎屏的华为手机恢复数据?6 种热门方法

“只是想知道是否可以从屏幕损坏的华为恢复数据&#xff1f;我尝试将其插入我的笔记本电脑&#xff0c;但手机不允许我进入&#xff0c;因为它要求我更改手机中的设置等.我最好的选择是什么&#xff1f; 当发生事故&#xff0c;我们的华为手机屏幕损坏时&#xff0c;访问这些关…

selenium也能过某数、5s盾..

文章转载于&#xff1a;selenium也能过某数、5s盾… 直接安装: pip install undetected_chromedriver运行代码&#xff1a; import undetected_chromedriver as uc import timedriver uc.Chrome(executable_pathrC:\Users\chromedriver.exe,version_main111) driver.get(网…

从element-plus 引入ILoadingInstance 出现类型错误

具体报错如下图所示&#xff1a; 1、引入ILoadingInstance 出现错误&#xff1a; 解决问题如下所示&#xff1a; 可能是因为element-plus 多次升级原因&#xff0c;将原来的内部代码多次改下了&#xff0c;原来是loading.type文件&#xff0c;现在变成loading.js&#xff0c;包…

传统FTP传输存在哪些局限性?如何进行FTP替代?

说到文件传输产品&#xff0c;很多人第一反应都是FTP&#xff0c;FTP是一种通用的文件传输协议&#xff0c;在各种操作系统和网络环境下都得到广泛支持&#xff0c;使用方便&#xff0c;确实在文件传输领域风靡了很多年&#xff0c;但随着互联网技术的发展和企业数字化需求的提…

HuggingFace团队亲授:如何使用HuggingFace上的开源模型

Open Source Models with Hugging Face 本文是 https://www.deeplearning.ai/short-courses/open-source-models-hugging-face/ 这门课程的学习笔记。 文章目录 Open Source Models with Hugging FaceWhat you’ll learn in this course Lesson 1: Selecting ModelsLesson 2: …

hutool,真香!

大家好&#xff0c;我是苏三&#xff0c;又跟大家见面了。 前言 今天给大家介绍一个能够帮助大家提升开发效率的开源工具包&#xff1a;hutool。 Hutool是一个小而全的Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&…

【Wio Terminal】使用WiFi(3)- Wi-F的高级使用

使用WiFi&#xff08;3&#xff09; Wi-F的高级使用HTTPClient 的使用HTTP GETHTTPs GETHTTP POSTWebServerHTTP Authentication Web ServerDNSServermDNSmDNS-SDWiFiManager Wi-F的高级使用 本节介绍了一些WiFi的高级库用法&#xff0c;如HTTPClient、DNSServer和WebServer库…

fastjson2 简单使用

参考 https://alibaba.github.io/fastjson2/ https://alibaba.github.io/fastjson2/annotations_cn.html https://alibaba.github.io/fastjson2/features_cn 基本操作 json 字符串转为 jsonObject&#xff1a; String json "{\"name\":\"tom\",\…

HTML5+CSS3+移动web——CSS基础

系列文章目录 HTML5CSS3移动web——HTML 基础-CSDN博客https://blog.csdn.net/ymxk2876721452/article/details/136070953?spm1001.2014.3001.5501HTML5CSS3移动web——列表、表格、表单-CSDN博客https://blog.csdn.net/ymxk2876721452/article/details/136221443?spm1001.2…

SOC的多核启动流程详解

目录 1、基础概念2、启动流程3、ATF(TF-A)代码的剖析5、软件如何判断当前是cold reset/warm reset/primary boot/senondary boot5.1 cold reset和warm reset5.2 primary boot和secondary boot 6、mailbox的介绍6.1 mailbox是什么6.2 mailbox的作用6.3 mailbox的示例 7、具体场景…