Linux高级---configmap和secret

news/2024/11/8 20:46:17/

文章目录

    • 一、ConfigMap
      • 1、介绍
      • 2、创建configmap
      • 3、使用configmap
      • 4、引入环境变量的另一种方式
    • 二、Secret
      • 1、介绍
      • 2、创建secret
      • 3、使用secret
      • 4、引入环境变量的另一种方式

一、ConfigMap

在这里插入图片描述

1、介绍

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。

ConfigMap 将你的环境配置信息和 容器镜像 解耦,便于应用配置的修改。

注意:

ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是机密的,请使用 Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。

使用

你可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:

  1. 在容器命令和参数内
  2. 容器的环境变量
  3. 在只读卷里面添加一个文件,让应用来读取
  4. 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap

这些不同的方法适用于不同的数据使用方式。 对前三个方法,kubelet 使用 ConfigMap 中的数据在 Pod 中启动容器。第四种方法意味着你必须编写代码才能读取 ConfigMap 和它的数据。

2、创建configmap

[root@master demo]# vi configMap.yamlapiVersion: v1kind: ConfigMapmetadata:name: test-configdata:username: zhangsanpassword: yuankeusername: lisi[root@master demo]# kubectl create -f configMap.yaml
configmap/test-config created
[root@master demo]# vi configMap.yaml
[root@master demo]# kubectl get configMaps
NAME          DATA   AGE
test-config   2      45s
[root@master demo]# kubectl describe configmaps test-config
Name:         test-config
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
password:
----
yuanke
username:
----
lisi
Events:  <none>

3、使用configmap

vim test-configMap-env-pod.yaml

apiVersion: v1
kind: Pod
metadata:name: test-configmap-env-pod
spec:containers:- name: test-containerimage: radial/busyboxplusimagePullPolicy: IfNotPresentcommand: ["/bin/sh","-c","sleep 1000000"]envFrom:- configMapRef:name: test-config
[root@master demo]# kubectl create -f test-configMap-env-pod.yaml
pod/test-configmap-env-pod created
[root@master demo]# kubectl get pod
NAME                                  READY   STATUS      RESTARTS   AGE
test-configmap-env-pod                1/1     Running     0          42s
[root@master demo]# kubectl exec -it test-configmap-env-pod -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=test-configmap-env-pod
TERM=xterm
username=lisi
password=yuanke

4、引入环境变量的另一种方式

apiVersion: v1
kind: Pod
metadata:name: test-configmap-env-pod
spec:containers:- name: test-containerimage: radial/busyboxplusimagePullPolicy: IfNotPresentcommand: ["/bin/sh","-c","echo ${MYSQLUSER} ${MYSQLPASSWD};sleep 1000000"]env:- name: MYSQLUSERvalueFrom:configMapKeyRef:name: test-configkey: username- name: MYSQLPASSWDvalueFrom:configMapKeyRef:name: test-configkey: password
[root@master demo]# kubectl create -f test-configMap-env-pod.yaml
pod/test-configmap-env-pod created
[root@master demo]# kubectl get pod
NAME                                  READY   STATUS      RESTARTS   AGE
test-configmap-env-pod                1/1     Running     0          5s
[root@master demo]# kubectl exec -it test-configmap-env-pod -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=test-configmap-env-pod
TERM=xterm
MYSQLUSER=lisi
MYSQLPASSWD=yuanke

二、Secret

1、介绍

Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。

由于创建 Secret 可以独立于使用它们的 Pod, 因此在创建、查看和编辑 Pod 的工作流程中暴露 Secret(及其数据)的风险较小。 Kubernetes 和在集群中运行的应用程序也可以对 Secret 采取额外的预防措施, 例如避免将机密数据写入非易失性存储。

Secret 类似于 ConfigMap 但专门用于保存机密数据。

注意:

默认情况下,Kubernetes Secret 未加密地存储在 API 服务器的底层数据存储(etcd)中。 任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。 此外,任何有权限在命名空间中创建 Pod 的人都可以使用该访问权限读取该命名空间中的任何 Secret; 这包括间接访问,例如创建 Deployment 的能力。

为了安全地使用 Secret,请至少执行以下步骤:

  1. 为 Secret 启用静态加密。
  2. 以最小特权访问 Secret 并启用或配置 RBAC 规则。
  3. 限制 Secret 对特定容器的访问。
  4. 考虑使用外部 Secret 存储驱动。

Secret 的使用

Pod 可以用三种方式之一来使用 Secret:

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

2、创建secret

您也可以先以 json 或 yaml 格式在文件中创建一个 secret 对象,然后创建该对象。

每一项必须是 base64 编码:

$ echo -n "admin" | base64
YWRtaW4=
$ echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2Rm

解密:

echo 'YWRtaW4=' | base64 --decode
返回admin

vim secret-env.yaml

apiVersion: v1
kind: Secret
metadata:name: mysecret-env
type: Opaque
data:username: YWRtaW4=password: MWYyZDFlMmU2N2Rm
[root@master demo]# kubectl create -f secret-env.yaml
secret/mysecret-env created
[root@master demo]# kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-mp2h9   kubernetes.io/service-account-token   3      21d
mysecret-env          Opaque                                2      10s
tls-secret            kubernetes.io/tls                     2      23h

3、使用secret

vim secret-pod-env1.yaml

apiVersion: v1
kind: Pod
metadata:name: envfrom-secret
spec:containers:- name: test-nginximage: nginxenvFrom:- secretRef:name: mysecret-env
[root@master secret]# kubectl apply -f secret-pod-env1.yaml 
pod/envfrom-secret created
[root@master secret]# kubectl get pod 
NAME                                READY   STATUS    RESTARTS   AGE
envfrom-secret                      1/1     Running   0          16s
[root@master secret]# kubectl exec -it envfrom-secret -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=envfrom-secret
TERM=xterm
password=1f2d1e2e67df
username=admin

4、引入环境变量的另一种方式

vim secret-pod-env2.yaml

apiVersion: v1
kind: Pod
metadata:name: test-secret-env-pod
spec:containers:- name: test-containerimage: radial/busyboxplusimagePullPolicy: IfNotPresentcommand: ["/bin/sh","-c","echo ${MYSQLUSER} ${MYSQLPASSWD};sleep 1000000"]env:- name: MYSQLUSERvalueFrom:secretKeyRef:name: mysecret-envkey: username- name: MYSQLPASSWDvalueFrom:secretKeyRef:name: mysecret-envkey: password
[root@master secret]# kubectl apply -f secret-pod-env2.yaml 
pod/test-secret-env-pod created
[root@master secret]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
test-secret-env-pod                 1/1     Running   0          5s
[root@master secret]# kubectl exec -it test-secret-env-pod -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=test-secret-env-pod
TERM=xterm
MYSQLUSER=admin
MYSQLPASSWD=1f2d1e2e67df

http://www.ppmy.cn/news/93320.html

相关文章

MATLAB仿真建模:Simulink和Stateflow的应用和模型设计

第一章&#xff1a;引言 在当今的科学研究和工程领域中&#xff0c;仿真建模是一项非常重要的技术。通过仿真建模&#xff0c;我们可以在计算机上创建模拟真实系统行为的模型&#xff0c;并通过模型的分析和测试来优化系统设计。MATLAB是一种广泛应用于科学和工程领域的强大工…

09 - 进程长参数编程

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. 短选项扩展编程1.1 再论进程参数&#xff08;短选项&#xff09;1.2 进程短选项示例 2. 进程长参数编程2.1 进程长参数示例2.2 进程长参…

在windows下安装linux和kali子系统

目录 安装子系统 报错解决官方方法 步骤 1 - 启用适用于 Linux 的 Windows 子系统 步骤 2 - 检查运行 WSL 2 的要求 步骤 3 - 启用虚拟机功能 步骤 4 - 下载 Linux 内核更新包 步骤 5 - 将 WSL 2 设置为默认版本 步骤 6 - 安装所选的 Linux 分发 排查安装问题 下载发行…

Mongodb——快速入门,2个小时足够了

目录 1、Mongodb概述 1.1、为何使用Mongodb&#xff1f; 1.2、业务应用场景 1.3、Mongodb和MySQL的区别 2、Mongodb安装 2.1、Windows系统中安装启动 3、Mongodb的操作 3.1、数据库操作 3.2、集合操作 3.2.1、集合显式创建 3.2.2、集合的隐式创建 3.2.3集合的删除 …

语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

1、微信小程序 1.1、wx 小程序 工程目录 其中&#xff0c; pages目录/index目录【必有】&#xff1a; index.js 编写业务逻辑 【初始数据&#xff0c;生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 1.2、wx…

Vue+Element-ui实现表格导出和导入

表格导出&#xff0c;填写数据&#xff0c;导入表格 需求&#xff1a;表格导出&#xff0c;填写数据&#xff0c;导入数据表格文件存储在前端表格文件不存储 需求&#xff1a;表格导出&#xff0c;填写数据&#xff0c;导入数据 分析需求&#xff1a; &#xff08;1&#xff0…

Windows Subsystem for Linux (WSL)安装Ubuntu 0x80070005的问题

文章目录 小结问题解决参考 小结 在Windows 11中安装Windows Subsystem for Linux (WSL)&#xff0c; 并安装Ubuntu 22.04.2 LTS&#xff0c;碰到了棘手的问题报错&#xff1a;0x80070005&#xff0c; 进行了解决。 问题 在Windows 11的微软应用商店Microsoft Store中安装Ub…

C++中读写文件方法(fstream用法)

文章目录 前言一、 打开文件方法二、读写方法三、读写文本示例1、文本文件操作示例&#xff1a;2、二进制文件读写示例&#xff1a; 总结 前言 日常工作中肯定会用到文件读写操作&#xff0c;C STL中 fstream 是一种用于文件读写的流类&#xff0c;它可以方便地对文件进行输入…