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