【云原生】Kubernetes----配置资源管理Secrets与ConfigMaps

目录

一、Secrets

(一)Secrets概述

(二)Secrets类型

1.service-account-token

2.Opaque

3.Docker Config

4.TLS

(三)Secrets使用方式

(四)创建Secrets

1.陈述式命令创建

1.1 定义用户与密码文件

1.2 使用陈述式命令创建

2.使用base64创建 

 2.1 获取加密信息

2.2 使用yaml文件创建

(五)使用Secrets 

1.使用挂载的方式

1.1 定义文件

1.2 创建pod 

2.使用环境变量的方式

2.1 定义文件

2.2 创建pod 

(六)Secret的作用

(七)注意事项

二、ConfigMap 

(一)ConfigMap概述

(二)为什么需要ConfigMap

(三)特点及用途

1.特点

2.用途

(四)ConfigMap的创建方式

1.命令行直接创建

2.通过文件/目录创建

2.1 使用文件创建 

2.2 使用目录创建 

2.3 YAML创建 

(五)使用ConfigMap 

1.替代环境变量 

1.1 引用值

 1.2 引用键值

2.文件挂载 

2.1 准备挂载文件

2.2 创建configmap

2.3 数据挂载

 3.热更新

4.pod更新


在Kubernetes(k8s)中,应用程序的配置和数据存储是一个重要且敏感的议题。Kubernetes提供了两种主要的资源类型来管理这些敏感信息和配置数据:Secrets和ConfigMaps。本文将深入探讨这两种资源类型,以及如何在Kubernetes集群中有效地使用它们。

一、Secrets

(一)Secrets概述

在Kubernetes(k8s)中,Secrets是一种用于存储敏感信息的对象,如密码、OAuth令牌、SSH密钥等。这些信息在部署应用程序时可能需要,但又不希望直接硬编码在应用程序的代码中或者公开暴露。通过使用Secrets,我们可以将敏感信息与应用程序代码解耦,从而提高安全性

(二)Secrets类型

1.service-account-token

用于访问API的服务账户令牌。由 Kubernetes 自动创建,用来访问 APIServer 的 Secret,Pod 会默认使用这个 Secret 与 APIServer 通信, 并且会自动挂载到 Pod 的 /var/run/secrets/kubernetes.io/serviceaccount 目录中

[root@master01 ~]#kubectl run nginx --image=nginx:1.18.0
pod/nginx created
[root@master01 ~]#kubectl describe pod nginx |sed -n '/Mounts/{p;n;p}'
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-vgx6f (ro)
-------------------------------------------------------------------------------------
#新建立一个pod,它会自动以挂载的方式,使用serviceaccount来访问,并且权限是只读权限

2.Opaque

Base64 编码格式的Secret,用来存储用户自定义的密码、密钥等/Secrets中的敏感信息在存储之前会先被Base64编码。但是请注意,Base64编码并不提供安全性,它只是用来避免在YAML文件中直接暴露明文信息,是默认的Secret 类型 

3.Docker Config

用于认证私有Docker仓库的凭据。存储私有 docker registry 的认证信息,搭建私有仓库时,使用该类型,在客户端登录私有仓库时,可以免密登录

4.TLS

用于存储TLS证书和私钥。

(三)Secrets使用方式

可挂载为卷:Secrets可以挂载到Pod中的容器,以文件的形式提供敏感信息。

可作为环境变量:Secrets中的信息也可以被设置为Pod中容器的环境变量 

(四)创建Secrets

1.陈述式命令创建
1.1 定义用户与密码文件
[root@master01 data]#mkdir -p /data/secret/pass
[root@master01 data]#cd /data/secret
[root@master01 secret]#echo -n 'china' >/data/secret/pass/user.txt
#创建用户名文件
[root@master01 secret]#echo -n '19491001' >/data/secret/pass/passwd.txt
#创建密码文件

1.2 使用陈述式命令创建
[root@master01 secret]#kubectl create secret generic secret01 --from-file=/data/secret/pass/user.txt --from-file=/data/secret/pass/passwd.txt
secret/secret01 created
[root@master01 secret]#kubectl get secrets secret01
NAME                     TYPE                                  DATA   AGE
secret01                 Opaque                                2      11s
[root@master01 secret]#kubectl describe secrets secret01
Name:         secret01
Namespace:    default
Labels:       <none>
Annotations:  <none>
 
Type:  Opaque
 
Data
====
user.txt:    5 bytes
passwd.txt:  8 bytes
---------------------------------------------------------------------------------
#kubectl create secret generic secret01
#这一部分命令告诉Kubernetes创建一个新的泛型(generic)类型的Secret对象,命名为secret01。
#使用generic子命令来标明要创建的是一个Opaque类型的Secret
 
--from-file=/data/secret/pass/user.txt
#此选项指定了一个文件路径/data/secret/pass/user.txt,其内容将被用来创建Secret中的一个键值对。
#键(key)通常是文件名(即user.txt),值(value)是文件的内容。
#这意味着Secret将包含一个条目,其中键为user.txt,值为该文件中的文本内容。
 
--from-file=/data/secret/pass/passwd.txt
#同理,此选项也指定了另一个文件路径/data/secret/pass/passwd.txt,
#其内容也会被加入到Secret中作为一个独立的条
 
#不论是使用get命令还是describe查看,都不会显示实际的内容,而是以字节长度的信息显示

2.使用base64创建 

上述创建方式,虽然可以创建Secrets,但是它还是属于一种明文创建的方式,可以使用base方式进行加密

 2.1 获取加密信息
[root@master01 secret]#echo -n china |base64
Y2hpbmE=
[root@master01 secret]#echo -n 19491001 |base64
MTk0OTEwMDE=

2.2 使用yaml文件创建
[root@master01 secret]#vim secret.yaml
[root@master01 secret]#cat secret.yaml
apiVersion: v1
kind: Secret                   #指定资源的类型为Secret
metadata:
  name: secret-v1              #Secret资源的名称
type: Opaque                   #指定Secret的类型
data:                          #包含实际存储的秘密数据,以base64编码格式给出的键值对
  username: Y2hpbmE=           #base64编码后的“chance”字符串,表示用户名
  password: MTk0OTEwMDE=       #base64编码后的密码

[root@master01 secret]#kubectl apply -f secret.yaml
secret/secret-v1 created

[root@master01 secret]#kubectl get secrets secret-v1 
NAME        TYPE     DATA   AGE
secret-v1   Opaque   2      10s
--------------------------------------------------------------------------------
#使用这个Secret时,Kubernetes会自动处理这些值的base64解码,
#使Pod内的应用程序能够直接使用解码后的原始数据。

(五)使用Secrets 

1.使用挂载的方式
1.1 定义文件

在yaml文件中,通过挂载的方式,将指定的Secret资源,挂载到pod的指定目录下

[root@master01 secret]#vim secret-pod01.yaml 
[root@master01 secret]#cat secret-pod01.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: secret-pod01
spec:
  containers:
  - name: nginx
    image: nginx:1.18.0
    volumeMounts:                 #定义挂载Volume到容器内部的配置
    - name: secrets               #引用了在volumes部分定义的Volume名称
      mountPath: "/etc/secrets"   #容器内挂载点的路径,即Volume将在这个路径下可见
      readOnly: true              #以只读方式挂载,不能修改secret-v1的内容
  volumes:
  - name: secrets                 #secrets Volume的名称,需与volumeMounts中的name相匹配
    secret:
      secretName: secret-v1       #指定此Volume将挂载的Secret的名称

1.2 创建pod 

可以看到 账户名称和密码   以挂载的方式   在指定目录  且只读

[root@master01 secret]#kubectl apply -f secret-pod01.yaml 
pod/secret-pod01 created

[root@master01 secret]#kubectl get pod secret-pod01
NAME                          READY   STATUS              RESTARTS   AGE
secret-pod01                  1/1     Runn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值