【云原生 • Kubernetes】配置管理 - Secret & ConfigMap

2年前Python源码5516
【云原生 • Kubernetes】配置管理 - Secret & ConfigMap Developer 小马 于2022-09-28 11:24:47发布 19693 收藏 76 分类专栏: 云原生 - 入门到实战 文章标签: kubernetes 云原生 docker 原力计划 云原生 - 入门到实战 专栏收录该内容 27 篇文章 241 订阅 订阅专栏

本文导读 一、机密配置抽象 Secret1. 认识 Secret2. Secret 的使用(1) 创建 Secret 加密数据(2) 将 Secret 以变量形式挂载到 pod 容器 二、配置抽象 ConfigMap1. 认识 ConfigMap2. ConfigMap 的使用(1) 创建配置文件(2) 创建 ConfigMap(3) 将 ConfigMap 以变量形式挂载到 pod 容器


一、机密配置抽象 Secret

Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。这样的信息可能会被放在 Pod 规约中或者镜像中。使用 Secret 意味着你不需要在应用程序代码中包含机密数据。由于创建 Secret 可以独立于使用它们的 Pod,因此在创建、查看和编辑 Pod 的工作流程中暴露 Secret 及其数据的风险较小。

1. 认识 Secret

Secret 用于 数据加密,并将它们存储到 etcd 当中,然后让 Pod 容器以挂载 Volume 的方式进行访问。一般情况下存储的数据并不是明文,而是会将它做一些编码或者加密。例如常见的 base64 就是一种编码方式。

明文:可以直接看懂的东西。

如下使用 base64 编码方式输出字符串 ‘majinjian’;

[root@master ~]# echo -n 'majinjian' | base64 bWFqaW5qaWFu [root@master ~]# 2. Secret 的使用 (1) 创建 Secret 加密数据

首先 vi secret.yaml 创建一个 Secret 加密数据(.yaml 文件),输入以下内容;

apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: cm9vdA== password: cXdlcnR5dWlvcDE5OTkuLg==

如下:

创建成功后执行该 yaml 文件;

[root@master ~]# kubectl apply -f secret.yaml

此时查看 secret,可以看到 mysecret 已创建成功;

(2) 将 Secret 以变量形式挂载到 pod 容器

vi secret-val.yaml 创建新的 yaml 文件 secret-val.yaml;

apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: nginx image: nginx env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password

其中:‘valueFrom’ 代表以变量形式挂载,挂载点就是我们上一步创建的 mysecret;

创建成功后执行该 yaml 文件;

[root@master ~]# kubectl apply -f secret-val.yaml

此时查看节点中的 pod,等待 mypod 运行(为 running 状态即可);

最后进入容器查看变量是否有没有我们挂载的值;

[root@master ~]# kubectl exec -it mypod bash

使用 echo $变量名(如echo $SECRET_USERNAME)即可查看我们存储的变量值。

二、配置抽象 ConfigMap

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时 Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。 ConfigMap 会将环境配置信息和容器镜像分开来,便于应用配置的修改。但是 ConfigMap 并不提供保密或者加密功能。

1. 认识 ConfigMap

ConfigMap 类似于 Secret,区别在于 Secret 储存加密数据,而 ConfigMap 存储的是 不加密数据,而且存储过程也与 Secret 基本相同。

2. ConfigMap 的使用

提示:为了便于区分操作前先删除之前创建的 secret 和容器。

[root@master ~]# kubectl delete secret --all [root@master ~]# kubectl delete Pod --all (1) 创建配置文件

此处要创建的是 properties 文件 vi redis.properties,输入以下内容;

redis.host=127.0.0.1 redis.port=6379 redis.password=123456 (2) 创建 ConfigMap [root@master ~]# kubectl create configmap redis-config --from-file=redis.properties configmap/redis-config created [root@master ~]#

此时查看 configmap(cm为它的简称),已创建成功;

(3) 将 ConfigMap 以变量形式挂载到 pod 容器

vi myconfig.yaml 创建配置文件 myconfig.yaml 文件,输入以下内容;

apiVersion: v1 kind: ConfigMap metadata: name: myconfig namespace: default data: special.level: info special.type: hello

创建成功后执行文件;

[root@master ~]# kubectl apply -f myconfig.yaml configmap/myconfig created

此时再次查看 ConfigMap,myconfig 也创建成功了;

vi config-var.yaml 创建挂载文件 config-var.yaml 文件,输入以下内容;

apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: busybox image: busybox command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ] env: - name: LEVEL valueFrom: configMapKeyRef: name: myconfig key: special.level - name: TYPE valueFrom: configMapKeyRef: name: myconfig key: special.type restartPolicy: Never

创建成功后执行文件;

[root@master ~]# kubectl apply -f config-var.yaml pod/mypod created

最受通过日志查看容器,可打印出 ‘info hello’,挂载完成;

[root@master ~]# kubectl logs mypod [root@master ~]# info hello

相关文章

Transformer:注意力机制(attention)和自注意力机制(self-attention)的学习总结

Transformer:注意力机制(attention)和自注意力机制(self-attention)的学习总结...

【2021年度总结】打破内卷——一个985边缘学生的挣扎与救赎

【2021年度总结】打破内卷——一个985边缘学生的挣扎与救赎...

【Springboot】动态配置数据源,系统自动辨认服务端与本地端数据源

【Springboot】动态配置数据源,系统自动辨认服务端与本地端数据源...

修改MySQL密码的四种方法(适合初学者)

修改MySQL密码的四种方法(适合初学者)...

2021年长安杯电子数据取证比赛复盘完整版(wp)

2021年长安杯电子数据取证比赛复盘完整版(wp)...

【SQL刷题】DAY18----SQL汇总数据专项练习

【SQL刷题】DAY18----SQL汇总数据专项练习...