人生苦短,我用k8s--------------secret和configmap的配置管理
时间:2022-07-28
本文章向大家介绍人生苦短,我用k8s--------------secret和configmap的配置管理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一:secret配置管理
1、Secret机密
Secret解决了密码、token、密钥等敏感数据的配置问题,将加密数据存放在etcd中,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。
Secret是用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。
用户可以创建自己的secret,系统也会有自己的secret。
Pod需要先引用才能使用某个secret,Pod有2种方式来使用secret:
- 1、作为volume的一个域被一个或多个容器挂载;
- 2、在拉取镜像的时候被kubelet引用。
2、创建secret
(1)方式一:基于文件创建secret
1、创建用户与密码文件
[root@master ~]# echo -n 'zhangsan' > /root/username.txt
[root@master ~]# echo -n 'zhangsan123' > /root/password.txt
[root@master ~]# kubectl create secret generic db-user-pass --from-file=/root/username.txt --from-file=/root/password.txt
secret/db-user-pass created
'//可以使用 kubectl create secret --help查看命令帮助'
2、查看secret资源
[root@master ~]# kubectl get secret
NAME TYPE DATA AGE
db-user-pass Opaque 2 11s
default-token-x8jtv kubernetes.io/service-account-token 3 21d
[root@master ~]# kubectl describe secret db-user-pass
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password.txt: 11 bytes
username.txt: 8 bytes
(2)方式二:基于参数创建secret
1、创建变量参数(进行base64解码 )
[root@master ~]# echo -n 'zhangsan' | base64
emhhbmdzYW4=
[root@master ~]# echo -n 'zhangsan123' | base64
emhhbmdzYW4xMjM=
2、创建yaml文件
[root@master ~]# vim secret.yaml
apiVersion: v1
kind: Secret '//指定secret类型'
metadata:
name: mysecret
type: Opaque
data:
username: emhhbmdzYW4= '//输入解码后的参数'
password: emhhbmdzYW4xMjM=
3、创建secret资源并查看详细信息
[root@master ~]# kubectl create -f secret.yaml
secret/mysecret created
[root@master ~]# kubectl get secret
NAME TYPE DATA AGE
db-user-pass Opaque 2 9m32s
default-token-x8jtv kubernetes.io/service-account-token 3 21d
mysecret Opaque 2 9s
[root@master ~]# kubectl describe secret mysecret
Name: mysecret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 11 bytes
username: 8 bytes
3、pod使用secret
(1)方式一:使用secret中的变量导入到pod中
1、调用secret资源中的变量
key: username赋值给SECRET_USERNAME
key: password 赋值给SECRET_PASSWORD
[root@master ~]# kubectl get secret mysecret -o yaml
apiVersion: v1
data:
password: emhhbmdzYW4xMjM=
username: emhhbmdzYW4=
kind: Secret
metadata:
creationTimestamp: 2020-05-20T15:05:48Z
name: mysecret
namespace: default
resourceVersion: "362715"
selfLink: /api/v1/namespaces/default/secrets/mysecret
uid: 635765b5-9aab-11ea-8c4f-000c294b2dd3
type: Opaque
2、创建yaml文件并创建资源
[root@master ~]# vim secret-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret '//指定mysecret资源pod'
key: username '//指定用户名'
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret '//指定mysecret资源pod'
key: password '//指定密码'
[root@master ~]# kubectl apply -f secret-pod.yaml
pod/mypod created
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 22s
3、登陆pod资源验证用户名和密码
[root@master ~]# kubectl exec -it mypod bash
root@mypod:/# echo $SECRET_USERNAME
zhangsan
root@mypod:/# echo $SECRET_PASSWORD
zhangsan123
root@mypod:/# exit
exit
(2)方式二使用挂载
以volume的形式挂载到pod的某个目录下
1、创建yaml文件资源
[root@master ~]# vim secret-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod01
spec:
containers:
- name: nginx01
image: nginx
volumeMounts:
- name: foo
mountPath: "/etc/foo" '//容器内的挂载路径'
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
[root@master ~]# kubectl create -f secret-volume.yaml
pod/mypod01 created
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 6m36s
mypod01 1/1 Running 0 36s
2、登陆pod资源验证用户密码
[root@master ~]# kubectl exec -it mypod01 bash
root@mypod01:/# cd /etc/foo
root@mypod01:/etc/foo# ls
password username
root@mypod01:/etc/foo# cat password
zhangsan123root@mypod01:/etc/foo# cat username
zhangsanroot@mypod01:/etc/foo# exit
exit
二、ConfigMap配置管理
configmap与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息
应用场景:应用配置
有两种创建方式:
- 1、使用kubectl创建(yaml文件)
- 2、使用变量参数创建
1、使用kubectl创建(yaml文件)
1、编写redis服务需要的配置并创建configmap资源
[root@master ~]# vim redis.properties
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
[root@master ~]# kubectl create configmap redis-config --from-file=redis.properties
configmap/redis-config created
2、查看configmap资源
[root@master ~]# kubectl get configmap
NAME DATA AGE
redis-config 1 7s
[root@master ~]# kubectl get cm '//configmap可以缩写成cm'
NAME DATA AGE
redis-config 1 15s
[root@master ~]# kubectl describe configmap redis-config
Name: redis-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
redis.properties:
----
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
Events: <none>
3、编写yaml文件并创建pod资源
[root@master ~]# vim cm.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod-2
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh","-c","cat /etc/config/redis.txt" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: redis-config
restartPolicy: Never
[root@master ~]# kubectl apply -f cm.yaml
pod/mypod02 created
[root@master ~]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 26m
mypod01 1/1 Running 0 20m
mypod02 0/1 ContainerCreating 0 6s
mypod02 0/1 Completed 0 43s
4、验证结果
[root@master ~]# kubectl logs mypod02
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
2、使用变量参数形式创建configmap资源
1、创建configmap资源
[root@master ~]# vim myconfig.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
[root@master ~]# kubectl create -f myconfig.yaml
configmap/myconfig created
[root@master ~]# kubectl get cm
NAME DATA AGE
myconfig 2 5s
redis-config 1 15m
2、创建测试pod
[root@master ~]# vim configmap-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-test
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 configmap-test.yaml
pod/configmap-test created
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
configmap-test 0/1 Completed 0 24s
mypod 1/1 Running 0 33m
mypod01 1/1 Running 0 27m
mypod02 0/1 Completed 0 7m40s
3、查看变量输出结果
[root@master ~]# kubectl logs configmap-test
info hello
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用ThreadLocal和ArgumentResolver方便开发
- 【Java8新特性】05 使用Optional取代null
- 在不被spring容器管理的类中使用ApplicationContext应用上下文bean
- Spring boot 在静态类中注入spring组件
- Spring boot 自定义配置文件
- 数据分析 常见技巧和经验总结
- Go by Example 中文版: Base64 编码
- Django3.0+supervisor+uvicorn+nginx进行线上部署
- 前端杂货铺上新
- 短视频系统源代码,实现前置摄像头水平翻转
- linux配置SOCK5代理
- 前端踩坑系列《五》
- linux上安装mitmproxy
- Jmeter(二十三) - 从入门到精通 - JMeter函数 - 上篇(详解教程)
- Elasticsearch学习笔记 -- 1