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


在这里插入图片描述


一、机密配置抽象 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
评论 133
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敬 之

您的鼓励就是我持续创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值