首页 > 其他分享 >8.应用配置:特殊卷ConfigMap和Secret

8.应用配置:特殊卷ConfigMap和Secret

时间:2023-07-31 23:32:04浏览次数:43  
标签:ConfigMap name kubectl -- 配置 secret nginx Secret key

特殊卷

ConfigMap和Secret是Kubernetes系统上两种特殊类型的存储卷
    ◼ ConfigMap用于为容器中的应用提供配置数据以定制程序的行为,而敏感
的配置信息,例如密钥、证书等则通常由Secret来配置
    ◼ ConfigMap和Secret将相应的配置信息保存于资源对象中,而后在Pod对象
上支持以存储卷的形式将其挂载并加载相关的配置,从而降低了配置与镜
像文件的耦合关系,提高了镜像复用能力
    ◼ Kubernetes借助于ConfigMap对象实现了将配置文件从容器镜像中解耦,从
而增强了工作负载的可移植性,使其配置更易于更改和管理,并避免了将
配置数据硬编码到Pod配置清单中
此二者都属于名称空间级别,只能被同一名称空间中的Pod引用
ConfigMap和Secret资源都是数据承载类的组件,是Kubernetes API的标准资源类型,是一等公民
    ◼ 主要负责提供key-value格式的数据项,其值支持
         ◆单行字符串:常用于保存环境变量值,或者命令行参数等
         ◆多行字串:常用于保存配置文件的内容
         apiVersion: v1
         kind: ConfigMap
         metadata:
          name: myapp-confs
         data:
          PORT: "8080"
          myserver-status.cfg: |
           location /nginx-status {
             stub_status on;
             access_log off;
           }

    ◼ 资源规范中不使用spec字段,而是直接使用特定的字段嵌套定义key-value数据
         ◆ConfigMap支持使用data或binaryData字段嵌套一至多个键值数据项
         ◆Secret支持使用data或stringData(非base64编码的明文格式)字段嵌套一至多个键值数据项
    ◼ 从Kubernetes v1.19版本开始,ConfigMap和Secret支持使用immutable字段创建不可变实例

ConfigMap和Secret

卷插件:ConfigMap和Secret
资源类型:一等公民
名称空间级别的资源,只能用于配置同一名称空间中的pod中的容器化应用

创建ConfigMap对象

创建ConfigMap对象的方法有两种:
  ◼ 命令式命令
    字面量:kubectl create configmap NAME --from-litera=key1=value1
    从文件加载:kubectl create configmap NAME --from-file=[key=]/PATH/TO/DIR/FILE
    从目录加载:kubectl create configmap NAME --from-file=/PATH/TO/DIR
  ◼ 配置文件
    命令式:kubectl create -f
    声明式:kubectl apply -f

示例

字面量:kubectl create configmap nfs --from-litera=port="8080" --from-litera=host=10.0.0.1
从文件加载:kubectl create configmap nginx-cfg --from-file=nginx.conf/mysqlserver.conf --dry-run=client -o yaml > configmap-nginx-cfg.yaml
从目录加载:kubectl create configmap nginx-cfg --from-file=nginx-conf.d/ -o yaml > configmap-nginx-cfg.yaml

引用ConfigMap对象

◼环境变量赋值
  ◆引用ConfigMap对象上特定的key,以valueFrom赋值给Pod上指定的环境变量
  ◆在Pod上使用envFrom一次性导入ConfigMap对象上的所有key-value,key(也可以统一附加特定前缀)即为环境变量名,
value自动成为相应的变量值
◼ConfigMap卷
  ◆在Pod上将ConfigMap对象引用为存储卷,而后整体由容器mount至某个目录下
     ⚫ key转为文件名,value即为相应的文件内容
  ◆在Pod上定义configMap卷时,仅引用其中的部分key,而后由容器mount至目录下
  ◆在容器上仅mount configMap卷上指定的key
通过环境变量引用 
apiVersion: v1
kind: Pod
metadata:
 name: configmaps-env-demo
spec:
 containers:
 - image: ikubernetes/demoapp:v1.0
   name: demoapp
   env:
   - name: PORT                  #键的值赋给这个环境变量
    valueFrom:
     configMapKeyRef:
      name: demoapp-config        #cm的名字
      key: demoapp.port           #键的名字
      optional: false             #该键值是否可选
   - name: HOST
    valueFrom:
     configMapKeyRef:
      name: demoapp-config
      key: demoapp.host
      optional: true              #该键值是否可选,为true时如果cm或key不存在,不会导致失败
通过存储卷引用
apiVersion: v1
kind: Pod
metadata:
 name: configmaps-volume-demo
spec:
 containers:
 - image: nginx:alpine
  name: nginx-server
  volumeMounts:
  - name: ngxconfs                   #卷名
    mountPath: /etc/nginx/conf.d/    #挂载目录
    readOnly: true
volumes:
- name: ngxconfs                 #指定卷名
 configMap:
  name: nginx-config-files       #引用的configmap资源名
  optional: false

示例:

通过环境变量引用
[root@k8s-master02 Kubernetes_Advanced_Practical_2rd]#cd chapter6
[root@k8s-master02 chapter6]#vim configmaps-env-demo.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: demoapp-config
  namespace: default
data:
  demoapp.port: "8080"
  demoapp.host: 0.0.0.0
---
apiVersion: v1
kind: Pod
metadata:
  name: configmaps-env-demo
  namespace: default
spec:
  containers:
  - image: ikubernetes/demoapp:v1.0
    name: demoapp
    env:
    - name: PORT
      valueFrom:
        configMapKeyRef:
          name: demoapp-config
          key: demoapp.port
          optional: false
    - name: HOST
      valueFrom:
        configMapKeyRef:
          name: demoapp-config
          key: demoapp.host
          optional: true
 创建:        
[root@k8s-master02 chapter6]#kubectl apply -f configmaps-env-demo.yaml
configmap/demoapp-config created
pod/configmaps-env-demo created
查询已创建:
[root@k8s-master02 chapter6]#kubectl get cm
NAME               DATA   AGE
demoapp-config     2      46s
强制删除pod:
kubectl delete pods NAME --force --grace-period=0
创建cm卷:
[root@k8s-master02 chapter6]#kubectl create configmap nginx-config-files --from-file=nginx-conf.d/
通过存储卷引用:
[root@k8s-master02 chapter6]#vim configmaps-volume-demo.yaml
apiVersion: v1
kind: Pod
metadata:
  name: configmaps-volume-demo
  namespace: default
spec:
  containers:
  - image: nginx:alpine
    name: nginx-server
    volumeMounts:
    - name: ngxconfs
      mountPath: /etc/nginx/conf.d/
      readOnly: true
  volumes:
  - name: ngxconfs
    configMap:
      name: nginx-config-files
      optional: false
      
kubectl apply -f configmaps-volume-demo.yaml

进入交互式接口:
kubectl exec -it configmaps-volume-demo -- /bin/sh
cd /etc/nginx/conf.d
ls
syserver-gzip.cfg  syserver-status.cfd  syserver.conf

secret资源

secret命令三大类别:
docker-registry:docker镜像仓库服务上的docker认证信息
generic:一般类别,不便区分的类别
tls:专用于保存数字证书和匹配私钥的

资源类型:

创建Secret资源

支持类似于ConfigMap的创建方式,但Secret有类型子命令,而且不同类型在data或stringData字段中支
持嵌套使用的key亦会有所有同;
命令式命令
  ◼ generic
    ◆kubectl create secret generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1]
    ◆除了后面docker-registry和tls命令之外的其它类型,都可以使用该命令中的--type选项进行定义,但有些类型有key的特
定要求
  ◼ tls
    ◆kubectl create secret tls NAME --cert=path/to/cert/file --key=path/to/key/file
    ◆通常,其保存cert文件内容的key为tls.crt,而保存private key的key为tls.key
  ◼ docker-registry
    ◆kubectl create secret docker-registry NAME --docker-username=user --docker-password=password --docker-email=email [--
docker-server=string] [--from-file=[key=]source]
    ◆通常,从已有的json格式的文件加载生成的就是dockerconfigjson类型,命令行直接量生成的也是该类型

资源示例

generic

创建:
[root@k8s-master02 chapter6]#kubectl create secret generic mysql-secret --from-literal=root.pass=magedu.com --from-literal=db.name=wpdb --from-literal=db.user=wpuser --from-literal=db.pass=magedu123 -o yaml > secret-mysql.yaml
[root@k8s-master02 chapter6]#kubectl apply -f secret-mysql.yaml
secret/mysql-secret created
查看:
[root@k8s-master02 chapter6]#kubectl get secret
NAME           TYPE     DATA   AGE
mysql-secret   Opaque   4      23s
查看生成的yaml文件,密码是加密的:
[root@k8s-master02 chapter6]#kubectl get secret -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    db.name: d3BkYg==
    db.pass: bWFnZWR1MTIz
    db.user: d3B1c2Vy
    root.pass: bWFnZWR1LmNvbQ==
  kind: Secret
  metadata:
    creationTimestamp: "2022-11-13T10:40:17Z"
    name: mysql-secret
    namespace: default
    resourceVersion: "415590"
    uid: 24f53317-a4c8-4dd4-a5e1-b6793f20f163
  type: Opaque
kind: List
metadata:
  resourceVersion: ""
使用base64解码:
[root@k8s-master02 chapter6]#echo bWFnZWR1MTIz |base64 -d
magedu123
基于环境变量引用secret:
[root@k8s-master02 chapter6]#vim secrets-env-demo.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: secrets-env-demo
  namespace: default
spec:
  containers:
  - name: mariadb
    image: mariadb
    imagePullPolicy: IfNotPresent
    env:
    - name: MYSQL_ROOT_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysql-root-authn
          key: password

tls

基于证书和私钥文件创建文件yaml配置文件:
[root@k8s-master02 chapter6]#ls certs.d/
nginx.crt  nginx.key

[root@k8s-master02 chapter6]#kubectl create secret tls nginx-certs --cert=certs.d/nginx.crt --key=certs.d/nginx.key --dry-run=client -o yaml > secret-nginx-certs.yaml
[root@k8s-master02 chapter6]#vim secret-nginx-certs.yaml
kind: Secret
metadata:
  creationTimestamp: null
  name: nginx-ssl-secret      #引用哪个名字,这里就写哪个名字
type: kubernetes.io/tls


创建secret:
[root@k8s-master02 chapter6]#kubectl apply -f secret-nginx-certs.yaml 
secret/nginx-ssl-secret created

创建一个configmap:
[root@k8s-master02 chapter6]#kubectl create configmap nginx-sslvhosts-confs --from-file=nginx-ssl-conf.d
configmap/nginx-sslvhosts-confs created

配置pod实例文件:
# Maintainer: MageEdu <[email protected]>
# URL: http://www.magedu.com
---
apiVersion: v1
kind: Pod
metadata:
  name: secrets-volume-demo
  namespace: default
spec:
  containers:
  - image: nginx:alpine
    name: ngxserver
    volumeMounts:
    - name: nginxcerts
      mountPath: /etc/nginx/certs/
      readOnly: true
    - name: nginxconfs
      mountPath: /etc/nginx/conf.d/
      readOnly: true
  volumes:
  - name: nginxcerts
    secret:
      secretName: nginx-ssl-secret   #引用证书和私钥
  - name: nginxconfs
    configMap:
      name: nginx-sslvhosts-confs    #引用配置文件
      optional: false

创建pod:
[root@k8s-master02 chapter6]#kubectl apply -f secrets-volume-demo.yaml 
pod/secrets-volume-demo created
[root@k8s-master02 chapter6]#kubectl get pods
NAME                         READY   STATUS        RESTARTS       AGE
secrets-volume-demo          0/1     Pending       0              9s

查询证书等详细信息:
openssl s_client -connect  IP:端口

image pull secret

docker需要下载镜像时,有时候是从私有仓库下载,
需要先保存镜像仓库的地址和密码为一个secret,
然后在pod中引用这个secret
apiVersion: v1
kind: Pod
metadata:
 name: demoapp
 namespace: default
spec:
 containers:
  - name: demoapp
   image: ikubernetes/demoapp:v1.0
imagePullSecrets:
  - name: ikuberneteskey

标签:ConfigMap,name,kubectl,--,配置,secret,nginx,Secret,key
From: https://blog.51cto.com/lmm01/6914752

相关文章

  • Android SDK开发环境 配置
    AndroidSDK开发环境配置软件:Eclipse3.4,ADT-8.0.0,android-sdk_r08-windows下载地址:http://www.android123.com.cn/android_kit.html第一步运行android-sdk_r08-windows中SDKManager.exe下载安装相应版本SDK如android1.5,1.6,2.0,2.1,2.2,2.3在根目录/platforms中......
  • 配置samba-解决samba没有写权限的问题
    其他配置过程不重复写了,用户名添加好后,添加如下配置到/etc/samba/smb.conf可解决没有写权限的问题[usr_name]path=/home/usr_nameavailable=yesvalidusers=usr_namewriteable=yesguestok=yesbrowseable=yescreatemask=0664directorymask=......
  • Maven配置中pom.xml和setting.xml之间的关系
    在日常的开发中,我们拿IDEA举例,一般会在电脑上自行下载安装Maven,然后在IDEA中配置我们安装的Maven路径,通过修改setting.xml文件,例如配置公共的镜像仓库地址,来提高依赖下载速率;或者配置内部私有的镜像仓库地址,来引入一些私有的依赖等等。1、如何从指定的镜像仓库下载依赖如下图在......
  • Mybatis学习(1)——mybatis介绍 & 入门案例 & 全局配置文件详解 & 增删改查 + mybatis事
    Mybatis学习(1)——mybatis介绍&入门案例&全局配置文件详解&增删改查+mybatis事务&mapper.xml文件#{}和${}&动态SQL入门原文链接:https://blog.csdn.net/Pireley/article/details/131520252目录引出一、mybatis是啥1.官网&ORM(ObjectRelationMapping)对象关......
  • 如何安装 Angular Grid 与配置 Angular Grid
    要在Angular脚手架项目中安装和配置AngularGrid,可以按照以下步骤进行操作:在项目根目录下,打开终端或命令提示符。运行以下命令来安装AngularGrid包:npminstallag-grid-angularag-grid--save 这将安装ag-grid-angular和ag-grid包,并将它们添加到你的项目的p......
  • RabbitMQ配置和实战
    RabbitMQ安装dockerrun-d--namexd_rabbit-eRABBITMQ_DEFAULT_USER=admin-eRABBITMQ_DEFAULT_PASS=password-p15672:15672-p5672:5672rabbitmq:3.8.15-management#网络安全组记得开放端口4369erlang发现口5672client端通信口15672管理界面ui端口25672......
  • 开发环境搭配_后端环境搭建_前后端联调_Nginx反向代理和负载均衡配置
       ......
  • 关于自定义程序打包成jar包,并读取配置
    前言在实际开发过程中,我们有时候有把你编写的一段程序打成jar包的需求,而一些配置是需要去配置文件里面读取关于这项目的一些配置,本人在网络上查询了众多的资料,总的来说可以归为3类1.从数据库读取配置 老生常谈,在dao层从数据库获取配置信息,然后返回到Service层进行业务逻辑......
  • windows配置本地ssl证书
    打开php.ini文件,搜索curl.cainfo,替换为一下文件,cacert.pem是证书 curl.cainfo=D:\web\phpEnv\cacert.pem  ......
  • ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法
    ETHERNET/IP和ETHERCAT是两种不同的协议,它们在工业生产中都有广泛的应用。然而,由于协议不同,这两种设备之间无法通讯,这给工业生产带来了很大的麻烦。而捷米JM-EIP-ECAT网关应运而生,它能够连接到ETHERNET/IP总线和ETHERCAT总线中,实现两种不同协议设备之间的通讯。这个网关能够大大提......