应用配置管理Secret&ConfigMap

摘要:
用户名:-name:secretName:mysecret三种类型的秘密[root@k8s-master1~/relearn]#kubectlcreatesecret hCreateasecretusingspecifiedsubcommand.AvailableCommands:-hosts:-example.ctnrs.comsecretName:https://v1kind:

1.Secret

常见的应用配置方式

  • 镜像
  • 配置中心
  • 配置文件
  • 共享存储
  • 放到git 仓库

配置文件分类:

  • 敏感信息    
  • 非敏感信息 如账号密码 服务器地址

Secret再k8s中 的使用方式

加密数据并存放Etcd中,让Pod的容器以挂载Volume方式访问。

应用场景:凭据

Pod使用secret两种方式: 

  • 变量注入
  • 挂载

例:现在一对  用户名  密码  pod在运行的时候需要加载 注入到pod 中 

假如现在 用户名:admin  密码:password

echo -n "admin" |base64
YWRtaW4=

echo -n "password" |base64
cGFzc3dvcmQ=

passwdAndusername-secret.yaml

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

image.png

pod怎样注入secret中的变量

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

image.png

将secret挂载到pod文件中

secret-volume.yaml

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

image.png

三种类型secret

[root@k8s-master1 ~/learn]#  kubectl create secret -h
Create a secret using specified subcommand.

Available Commands:
  docker-registry Create a secret for use with a Docker registry
  generic         Create a secret from a local file, directory or literal value
  tls             Create a TLS secret

docker-registry 是配置docker私有仓库的认证信息,当yaml中指定了相应的secret 就可以获取到对应的变量值

kubectl create secret docker-registry myregistry --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=benjami
n7788 --docker-password=a7260488
imagePullSecrets:
- name: myregistry

generic 通过传值 或者 指定本地文件的方式 创建secret

传值:

kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123456

传文件:

echo -n admin > ./username
echo -n 123456 > ./password
kubectl create secret generic mysecret --from-file=./username --from-file=./password

tls 创建证书型secret一般用于 ingress 配置https 场景中

kubectl create secret tls secret-tls --cert=/root/learn/ssl/example.ctnrs.com.pem --key=/root/learn/ssl/example.ctnrs.com-ke
y.pem
tls:
  - hosts:
    - example.ctnrs.com
    secretName: secret-tls

Secret官网:https://kubernetes.io/docs/concepts/configuration/secret/

2.ConfigMap

与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息。

应用场景:应用配置

引用变量方式

configmap-string.yaml

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

image.png

 config-var.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: mypod3
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

image.png

挂载数据卷方式

cat config-volume.yaml 

---

apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
data:
  redis.properties: |
    redis.host=127.0.0.1
    redis.port=6379
    redis.password=123456
---

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

image.png

应用程序动态更新配置

ConfigMap更新时,业务也随之更新的方案:

  • 当ConfigMap发生变更时,应用程序动态加载 
  • 触发滚动更新,即重启服务

 但是问题是,如何触发应用reload?如何周期性的检查文件是否变化?

比如 我将configMap中定义的密码 由 123456 改为 password

然后重新应用程序,发现应用并未使用更新后的配置

image.png

只有将pod 进行重建后,才能加载到修改后的配置

kubectl delete po mypod4

kubectl apply -f config-volume.yaml 

image.png

ConfigMap 官网:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

免责声明:文章转载自《应用配置管理Secret&ConfigMap》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇矩阵理论 第三讲 线性变换及其矩阵2.4 Nginx服务器基础配置指令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle监听服务开启

输入命令netca即可开启oracle的监听服务 弹出对话框 选择监听服务配置,单击下一步 选择增加监听,单击下一步 监听的名字,默认即可,下一步 监听链接的协议,默认TCP协议即可,下一步 监听默认端口号1521即可,下一步,下一步会询问是否想在创建一个监听,我这里选择NO(一个监听即可),单击下一步,完成监听的配制。...

redhat7 升级openssh openssl

部署telnet,防止ssh启动失败  1、关闭防火墙或者开放23端口  2、安装启动服务,并开启root访问 yum install -y telnet-server.x86_64 yum install -y telnet.x86_64 yum install -y xinetd.x86_64 systemctl enable xinetd.ser...

gulp前端自动化环境搭建详解

  1、安装 nodejs    Grunt和所有grunt插件都是基于nodejs来运行的, https://nodejs.org/    安装完成之后在终端 node -v 查看安装版本  npm -v 查看npm版本        选装cnpm 1.1、说明:因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常, 如果npm的服务器在中...

ant design pro项目配置路由菜单

有两种菜单格式,一种是就只有一层,一种是有多层的 一、单层的菜单  首先在pages目录下新建一个文件目录  然后在config.js中进行配置 { name: 'new_test', icon: 'table', path: '/new_test', component: './TestRoute/test_rout...

Zabbix+Grafana 展示示例1

Zabbix+Grafana 展示示例 Grafana是一个跨平台的开源度量分析和可是化的工具,可以通过该将采集的数据查询然后可视化的展示,并及时通知. 1. Grafana 特性 1. 展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图,折线图,图表等多种展示方式. 2. 数据源: Grap...

SpringCloud之Hystrix Dashbord监控中心+分布式配置中心

HystrixDashbord Hystrix(注意 是单纯的Hystrix) 提供了对于微服务调用状态的监控(信息), 但是,需要结合spring-boot-actuator 模块一起使用。 在包含了 hystrix的项目中, 引入依赖: <dependency>   <groupId>org.springframework.bo...