Secret与ConfigMap配置与使用
在Kubernetes中,常常需要使用用户名,密码连接数据库或者需要提前准备一些相关的配置信息给Cluster。该信息不适合存储在container,该信息的存储可以通过Secret或者ConfigMap来实现。两者的区别在于Secret会把value以Base64编码形式存储而ConfigMap会以明文方式存储。
两者都可以通过命令行或者YAML文件配置来存储相应的信息,主要有4种方式来创建Secret或者ConfigMap。
以如下要求为例,配置username和password
username:admin password:1234
- 通过--from-literal方式
kubectl create secret generic my-secret --from-literal=user=admin --from-literal=password=1234
- 通过--from-file方式
echo -n admin > ./username echo -n 1234 > ./password kubectl create secret generic my-secret --from-file=./username --from-file=./password
- 通过--from-env-file方式。在此方式中,数据需要以key=value来存储在文件中
cat << EOF > ./config username=admin password=1234 EOF kubectl create secret generic my-secret --from-env-file=./config
- 通过YAML配置文件
echo -n admin | base64 => YWRtaW4= echo -n 1234 | base64 => MTIzNA== apiVersion: v1 kind: Secret metadata: name: my-secret # stringData以明文形式存储敏感信息 #stringData: # username: admin # password: 1234 data: username: YWRtaW4= password: MTIzNA==
通过运行命令
kubectl edit secret my-secret
可以查看到在Secret中username和password以密文即Base64编码形式存储下来
apiVersion: v1 data: password: MTIzNA== username: YWRtaW4= kind: Secret metadata: creationTimestamp: "2021-04-13T21:08:47Z" name: my-secret namespace: default
...
同理,对应的ConfigMap也可以同样相同的四种方式来存储配置信息,只列出第四种以YAML形式保存配置信息
apiVersion: v1 kind: ConfigMap metadata: name: my-config data: username: admin password: "1234"
如果读取的是某个文件的配置并创建到ConfigMap中,则需要添加“|”表示其为文件,之后内容则与配置文件中内容相同,如config文件中内容为
username:admin password:1234
则YAML文件的写法如下
apiVersion: v1 kind: ConfigMap metadata: name: my-config data: config: | username: admin password: "1234"
等同于
kubectl create configmap my-config --from-file=./config