第13章:Kubernetes Configmaps & Secret

Configmaps

Configmaps的定义

Configmap,KV格式,属于名称空间级别的资源,主要作用是让配置信息和镜像文件解耦,增强应用的可移植性,类似Kubernetes的配置中心,明文存储配置信息,不能包含敏感信息;(注入方式:环境变量或者存储卷)

集群外部向集群内部注入配置或密钥信息的通道;

统一配置中心,将配置信息放到统一的配置中心进行统一管理,当配置文件需要更新时,重载即可;

Configmaps的使用方式

配置容器化应用的几种方式:

  • 自定义命令行参数,,args:[];

  • 把配置文件直接写死在镜像中;(不灵活不建议)

  • 存储卷,即文件挂载方式,把configmap当作存储卷,挂载到pod内读取配置信息的文件目录上;(虽然相对笨拙,但可以动态修改,支持实时获取,具体时间取决于信息上传到API-server,以及下发到pod的时间; )

  • 环境变量

    环境变量注入,把configmap和pod做关联,把configmap里面的数据内容传递给pod内的变量;(前置条件:应用本身是支持通过环境变量加载配置的Cloud Native应用;或者针对传统cloudenabled应用,可以使用Entrypoint预处理脚本使得环境变量转换为配置文件中的配置信息;)通过环境变量加载配置或者读取配置文件加载配置;(注:支持动态修改,但是需要手动重载reload;)

环境变量的获取配置的方式,仅在pod启动时加载,后面修改需要重新启动才能生效;

  • (1) env

valueFrom: metedata.name/ metedata.namespace/ metedata.labels/ metedata.annotations……;

  • (2) envFrom

kubectl create configmap my-config --from-file=config-data/

或者使用环境变量env,示例如下:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env:
        # Define the environment variable
        - name: PLAYER_INITIAL_LIVES # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            configMapKeyRef:
              name: game-demo           # The ConfigMap this value comes from.
              key: player_initial_lives # The key to fetch.
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:
      - name: config
        mountPath: "/config"
        readOnly: true
  volumes:
  # You set volumes at the Pod level, then mount them into containers inside that Pod
  - name: config
    configMap:
      # Provide the name of the ConfigMap you want to mount.
      name: game-demo
      # An array of keys from the ConfigMap to create as files
      items:
      - key: "game.properties"
        path: "game.properties"
      - key: "user-interface.properties"
        path: "user-interface.properties"
        

然后可以通过命令进入容器:

Kubectl exec -it configmap-demo-pod – /bin/bash

最后使用命令printenv打印该容器的环境变量,验证是否注入成功;

或者直接使用命令:Kubectl exec -it configmap-demo-pod – printenv

Configmaps的创建方式

补充kubernetes中快速创建Configmap的几种方式:

在Kubernetes中,有几种常用的方法可以快速创建ConfigMap。以下是其中一些方法:

  1. 使用kubectl create configmap命令:
    你可以使用kubectl命令来创建ConfigMap。以下是一个示例命令,其中my-config是ConfigMap的名称,而key1=value1key2=value2是要添加的数据项。

    kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
    
  2. 使用配置文件创建ConfigMap:
    你可以创建一个YAML或JSON文件,其中包含ConfigMap的定义,然后使用kubectl apply命令将其部署到Kubernetes集群。以下是一个示例YAML文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-config
    data:
      key1: value1
      key2: value2
    

    然后,使用以下命令来创建ConfigMap:

    kubectl apply -f configmap.yaml
    
  3. 从文件创建ConfigMap:
    你可以从文件中创建ConfigMap,其中每个文件的内容将成为ConfigMap中的一个键值对。假设你有一个名为config-data的目录,其中包含多个配置文件。你可以使用以下命令将这些文件的内容添加到ConfigMap中:

    kubectl create configmap my-config --from-file=config-data/
    
  4. 从环境变量创建ConfigMap:
    你可以使用kubectl create configmap命令从环境变量创建ConfigMap。假设你的环境变量已经设置,你可以运行以下命令:

    kubectl create configmap my-config --from-env-file=my-env-file
    

    其中,my-env-file是包含环境变量的文件。

这些方法中的每一种都允许你以不同的方式创建ConfigMap,选择取决于你的需求和配置数据的来源。

Secret

Secret的定义

Secret,功能类似configmap,是base64编码加密存放的,用于存放敏感信息;

Secret,会进行64位加密,但不是真正的安全;

Secret的分类

  • Generic:保存密码数据;
  • TLS:保存私钥或者证书数据;——一般是使用挂在到存储卷的方式;
  • Docker Registery:保存Docker镜像仓库里面的凭证数据,如用户名、密码或令牌等;——imagePullSecret

使用echo [64位编码文件] | base64 -d,进行解密;

注意:尽量不要使用环境变量的方式注入secret,因为它会解密后直接显示;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Davidwatt

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值