configMap原理
configMap 不提供加密功能,如果要存储机密数据,要使用 secret
使用ConfigMap来将你的配置数据和应用程序代码分开
比如,假设你正在开发一个应用,它可以在你自己的电脑上(用于开发)和在云上(用于实际流量)运
行。你的代码里有一段是用于查看环境变量DATABASE HOST,在本地运行时,你将这个变量设置为
localhost,在云上,你将其设置为引用Kubernetes集群中的公开数据库Service中的组件。
这让您可以获取在云中运行的容器镜像,并且如果有需要的话,在本地调试完全相同的代码。
ConfigMap对象
ConfigMap是一个API对象,让你可以存储其他对象所需要使用的配置。和其他Kubernetes对象都有
一个spec不同的是,ConfigMap使用data块来存储元素(键名)和它们的值。
ConfigMap的名字必须是一个合法的DNS子域名。
ConfigMaps和Pods
您可以写一个引用ConfigMap的Pod的spec,并根据ConfigMap中的数据在该Pod中配置容器。这
个Pod和ConfigMap必须要在同一个命名空间中。
这是一个ConfigMap的示例,它的一些键只有一个值,其他键的值看起来像是配置的片段格式。
代码配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
apiVersion: v1
kind: ConfigMap
metadata:
name: game-demo
data:
player_lives: 3
game.properties: |
player.x=5
user-interface.properties: |
color.good=purple
color.bad=red
allow.textmode=true
|
在环境变量使用 configMap
1
2
3
4
5
6
7
8
9
10
11
12
13
|
apiVersion: v1
kind: Pod
metadata:
name: podtest
spec:
containers:
- name: test
image: busybos
command: ["/bin/sh","-c","env|grep app"]
envfrom:
- configMapRef:
name: appvar
restartPolicy: Never
|
1
2
3
|
kc get configmap
kc create -f configmap.yaml
kc get configmap
|
secret密钥管理实战
secret 是一种包含少量敏感信息,如密码,令牌或者密钥的对象。
参考文章
1
2
3
4
5
|
$ echo -n "admin" > ./username.txt
$ echo -n "1f2d1e2e67df" > ./password.txt
$ kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
secret "db-user-pass" created
|
1
2
3
4
5
6
7
8
|
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
|
1
2
3
|
$ kubectl create -f ./secret.yaml
secret "mysecret" created
|
secret 设置为环境变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
restartPolicy: Never
|