Kubernetes的Secret和ConfigMap实践

2023-05-16

欢迎大家进群,一起探讨学习

公众号

博主技术文档地址

博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star

1.Secret

Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。

1.1Secret类型

Secret有三种类型:

Opaque:base64编码格式的Secret,用来存储密码、密钥等;但数据也通过base64 –decode解码得到原始数据,所有加密性很弱。 kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。 kubernetes.io/service-account-token: 用于被serviceaccount引用。serviceaccout创建时Kubernetes会默认创建对应的secret。Pod如果使用了serviceaccount,对应的secret会自动挂载到Pod目录/run/secrets/ kubernetes.io/serviceaccount中。

1.2Opaque Secret 方式

Opaque类型的数据是一个map类型,要求value是base64编码格式:
echo -n"admin" | base64
YWRtaW4=
echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2Rm

1.3 secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

执行

kubectl create -f secret.yaml

1.4 secret-var.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

执行

kubectlapply -f secret-var.yaml

查看

kubectl exec -it mypod bash;
echo $SECRET_USERNAME

echo $SECRET_PASSWORD

1.5 secret-vol.yaml 以挂载的方式

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret

运行

kubectlapply -f secret-vol.yaml

查看

kubectl exec -it mypod bash;

1.6kubernetes.io/dockerconfigjson方式

kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
kubectlget secret myregistrykey  -o yaml

1.7也可以直接读取~/.dockercfg的内容来创建

kubectl create secret docker-registry myregistrykey \  --from-file="~/.dockercfg"

1.8在创建Pod的时候,通过imagePullSecrets来引用刚创建的myregistrykey:

apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
    - name: foo
      image: janedoe/awesomeapp:v1
  imagePullSecrets:
    - name: myregistrykey

1.9 kubernetes.io/service-account-token

kubernetes.io/service-account-token: 用于被serviceaccount引用。serviceaccout创建时Kubernetes会默认创建对应的secret。Pod如果使用了serviceaccount,对应的secret会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中。

$ kubectl run nginx --image nginx
deployment"nginx" created
$ kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
nginx-3137573019-md1u2   1/1       Running   0          13s
$ kubectl exec nginx-3137573019-md1u2 ls /run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token

2.configmap

ConfigMaps允许您将配置构件与映像内容解耦,以保持容器化应用程序的可移植性。本文展示如何创建configmap,修改configmap以及如何把configmap应用于pod.

2.1redis.properties

redis.host=127.0.0.1
redis.port=6379
redis.password=123456

2.2创建configmap

kubectlcreate configmap redis-config --from-file=redis.properties

2.3查询configmap

kubectlget cm

kubectl describe cm redis-config

2.3 volumes方式挂载

cm.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
    - name: config-volume
      configMap:
        name: redis-config
  restartPolicy: Never

2.4运行

kubectl create -f cm.yaml
kubectl logs mypod

2.5变量形式进行挂载

myconfig.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info
  special.type: hello
kubectl create -f myconfig.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
kubectlcreate -f config-var.yaml

3.Secret与ConfigMap对比

相同点: key/value的形式
属于某个特定的namespace
可以导出到环境变量
可以通过目录/文件形式挂载(支持挂载所有key和部分key)

不同点:

Secret可以被ServerAccount关联(使用)
Secret可以存储register的鉴权信息,用在ImagePullSecret参数中,用于拉取私有仓库的镜像
Secret支持Base64加密
Secret分为kubernetes.io/Service Account,kubernetes.io/dockerconfigjson,Opaque三种类型,Configmap不区分类型
Secret文件存储在tmpfs文件系统中,Pod删除后Secret文件也会对应的删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes的Secret和ConfigMap实践 的相关文章

随机推荐

  • Java IO流 使用流技术将一张图片从一个目录复制到另一个目录

    题目 xff1a 使用流技术将一张图片从F images目录下 xff0c 复制到D images目录下 复制图片需要使用字节流 xff0c 使用字符流复制会将图片字节码格式进行编码 xff0c 可能会导致图片数据丢失 span class
  • 卡尔曼滤波KF

    KF 根据贝叶斯估计的原理 xff0c 卡尔曼滤波是利用已知系统模型的确定性特性和统计特性等先验知识与观测量获得最有估计 xff0c 在有初始值的情况下 xff0c 从先验值和最新观测数据中得到的新值的加权平均来更新状态估计 1 卡尔曼滤波
  • 解决VS2019提示未能加载项目文件。缺少根元素的错误

    解决VS2019提示未能加载项目文件 缺少根元素的错误 上次win10自动更新关掉了打开的vs xff0c 导致开机后再打开解决方案 xff0c 某个项目一直无法加载 xff0c 提示未能加载项目文件 缺少根元素的错误 迁移报告上显示这个项
  • 实验二 串口通信及中断实验

    一 xff0e 实验目的 xff08 1 xff09 熟悉 MCU 的异步串行通信 Uart 的工作原理 xff08 2 xff09 掌握 Uart 的通信编程方法 xff08 3 xff09 掌握中断的编程方法 xff08 4 xff09
  • 多线程编程入门——C++ 「semaphore.h」

    回顾OS xff0c 发现自己基本没有实际操作过多线程编程 xff0c 所以想从今天开始学习 从Leedcode的 1114 按序打印开始 xff1a 信号量类型 sem t 原型 xff1a extern int sem init P s
  • 使用网络调试助手连接EMQ服务器

    一 使用MQTT协议与服务器建立连接 1 在图纸中的位置输入EMQ服务器地址与EMQ服务器的端口 2 接下来我们来看一下MQTT协议中的CONNECT报文 1 固定报头 byte1为0x10 xff0c 表示向服务器端发送的为CONNECT
  • npm下载以来版本问题 npm ERR! code ERESOLVE

    这里就是提示npm的版本太高 xff0c 这个时候 xff0c 需要我们问一下原来开发人员的npm的版本号 xff0c 在进行npm insdtall g npm 64 版本号 安装vue element admin项目问题补充 xff1a
  • 在机器人中执行完的仿真怎么移植到真实机器人上?

    最近在鱼香ROS上看了一篇文章 xff0c 在自己的号上记录一下用以保存 一 搞清楚数据流图 1 1建图 以常见的功能包来说 xff0c 一般都可以在运行的时候生成对应的话题输入与输出 xff0c cmd vel用于控制gazebo中的小车
  • 算法——最长公共子序列(动态规划)

    给定两个字符串 text1 和 text2 xff0c 返回这两个字符串的最长 公共子序列 的长度 如果不存在 公共子序列 xff0c 返回 0 一个字符串的 子序列 是指这样一个新的字符串 xff1a 它是由原字符串在不改变字符的相对顺序
  • VINF_FUSION编译出现大量的error: ‘CV_CALIB_CB_ADAPTIVE_THRESH’ was not declared in this scope错误

    错误 span class token operator span home span class token operator span lee span class token operator span catkin ws span
  • 在线古诗自动生成器的设计与实现

    在线古诗自动生成器的设计与实现 前言一 算法模型介绍LSTM简介模型框架实验环境实验与分析实验数据集数据集预处理训练过程模型训练结果模型的评估 二 在线古诗生成器的设计与实现系统结构远程服务器的项目部署系统测试 三 成品展示 前言 古诗 x
  • S7503E V7 snmpv3典型组网配置案例(与IMC联动)

    转载来源 xff1a S7503E V7 snmpv3典型组网配置案例 xff08 与IMC联动 xff09 https mp weixin qq com s idTHFiRDRRZX9nkd pOSiA 组网及说明 本案例为S7503E
  • OBS Studio录屏软件安装和使用教程

    OBS Studio 全称Open Broadcaster Software Studio 是一个免费的开源的无水印的且不限制时长的视频录制软件 1 首先百度搜索 34 联想软件商店 34 xff0c 单击带有 官方 的即可或直接打开htt
  • MARKDOWN-插入图片

    MARKDOWN 插入图片 1 markdown是什么 Markdown 是一种轻量级标记语言 xff0c 创始人为约翰 格鲁伯 xff08 John Gruber xff09 它允许人们使用易读易写的纯文本格式编写文档 xff0c 然后转
  • xshell6评估期已过,解决方法

    xshell6评估期已过一般因为下载的版本是evaluation 30天评估 版本 xff0c 是有期限的 xff0c 解决如下 xff1a 1 前往下载地址 xff0c 点击免费授权页面 xff1a 2 填写必填信息 xff0c 邮箱一定
  • JetsonNano配置RealSense D435i运行环境

    JetsonNano配置RealSense D435i运行环境 文章目录 JetsonNano配置RealSense D435i运行环境0 前言1 系统环境2 安装ubuntu源自带的SDK问题及解决问题解决方法 xff1a 3 源码编译S
  • LSTM详解

    LSTM详解 文章目录 LSTM详解改进记忆单元门控机制 LSTM结构LSTM的计算过程遗忘门输入门更新记忆单元 输出门LSTM单元的pytorch实现Pytorch中的LSTM参数输入输出 参考与摘录 LSTM是RNN的一种变种 xff0
  • 固定翼无人机结构分类

    一 固定翼无人机常见的气动布局 常规布局 常规布局就是水平尾翼在主翼之后 xff0c 有一个或者两个垂危的气动布局方式 这种布局技术最成熟 xff0c 理论研究已经非常完善 xff0c 生产技术也成熟而稳定 xff0c 同其他气动布局相比各
  • 互联网笔试——服务器启动题

    某厂笔试题 xff0c 居然瞎胡做出来了 xff0c 先把不优雅得答案记录一下 第一行n xff0c p表示有n台机器 xff0c p次操作 第 i 行第一个整数 c 表示第 i 个服务所依赖的服务数量 xff0c 后面 c 个整数表示它所
  • Kubernetes的Secret和ConfigMap实践

    欢迎大家进群 xff0c 一起探讨学习 公众号 博主技术文档地址 博主开源微服架构前后端分离技术博客项目源码地址 xff0c 欢迎各位star 1 Secret Secret解决了密码 token 密钥等敏感数据的配置问题 xff0c 而不