secret与configmap
Secret
Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用
创建方式
使用键值对
kubectl create secret generic mysecret --from-literal=username=test --from-literal=password=123456
secret/mysecret created
##generic 从本地 file, directory 或者 literal value 创建一个 secret
##--from-literal 对应一个键值对 。
查看
kubectl get secrets
NAME TYPE DATA AGE
default-token-hvq4p kubernetes.io/service-account-token 3 18d
mysecret Opaque 2 69s
查看详细
kubectl describe secrets mysecret
Name: mysecret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 6 bytes
username: 4 bytes
文件方式
mkdir secrets
cd secrets/
echo -n test>username
echo -n 123456 > password
kubectl create secret generic mysecret1 --from-file=username --from-file=password
secret/mysecret1 created
##--from-file 指定文件
查看
kubectl describe secrets mysecret1
Name: mysecret1
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 6 bytes
username: 4 bytes
yaml文件
kubectl create secret generic mysecret3 --from-literal=username=test --from-literal=password=123456 --dry-run -o yaml > mysecret.yml
cat mysecret.yml
apiVersion: v1
data:
password: YWJj
username: dGVzdA==
kind: Secret
metadata:
creationTimestamp: null
name: mysecret3
运行
Pod通过volume的方式使用secret
vim mypod.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 300000000
volumeMounts:
- mountPath: /etc/aa
name: aa
readOnly: true
volumes: ##定义volume的名字为aa 使用下面指定的secret
- name: aa
secret:
secretName: mysecret3
运行
kubectl apply -f mypod.yml
pod/mypod created
进入pod查看
kubectl exec -it mypod sh
/ # cd /etc/aa
cat username
test
cat password
123456
动态更新
修改mysecret文件
echo -n abc |base64
YWJj
vim mysecret.yml
apiVersion: v1
data:
password: YWJj
username: dGVzdA==
kind: Secret
metadata:
creationTimestamp: null
name: mysecret3
再次运行
kubectl apply -f mysecret.yml
secret/mysecret3 configured
进入pod查看
kubectl exec -it mypod sh
/ # cd /etc/aa/
cat password
abc
Pod通过环境变量的方式使用secret
vim msec.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 30000000000
env:
- name: myuser
valueFrom:
secretKeyRef:
name: mysecret3
key: username
- name: mypas
valueFrom:
secretKeyRef:
name: mysecret3
key: password
运行
kubectl apply -f msec.yml
pod/mypod created
进入pod查看
kubectl exec -it mypod sh
echo $myuser
test
echo $mypas
abc
环境变量的方式不支持动态更新,但是读取很方便
Configmap
Secret主要保存的是一些密码 等加密的信息,像一些配置文件则可以用configmap
创建方式
创建方式与secret很像
键值对
kubectl create configmap myconmap --from-literal=test=1 --from-literal=test1=2
文件
echo -n 1 > test
echo -n 2 > test1
kubectl create configmap myconmap1 --from-file=test --from-file=test1
cat <<EOF> envp.txt
test=1
test1=2
EOF
kubectl create configmap myconmap2 --from-env-file=envp.txt
yaml
kubectl create configmap myconmap2 --from-env-file=envp.txt --dry-run -o yaml > myconmap.yml
cat myconmap.yml
apiVersion: v1
data:
test: "1"
test1: "2"
kind: ConfigMap
metadata:
creationTimestamp: null
name: myconmap2
运行
kubectl apply -f myconmap.yml
查看
kubectl get configmaps
NAME DATA AGE
myconmap 2 2d
myconmap1 2 47h
myconmap2 2 47h
Pod通过volume使用configmap
vim myconf.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 300000000000
volumeMounts:
- mountPath: /etc/aa
name: aa
readOnly: true
volumes:
- name: aa
configMap:
name: myconmap2
运行
kubectl apply -f myconf.yml
pod/mypod created
进入pod查看
kubectl exec -it mypod sh
/ # cd /etc/
cat test
1
cat test1
2
Pod通过环境变量使用configmap
vim myconf1.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 300000000000
env:
- name: myuser
valueFrom:
configMapKeyRef:
name: myconmap2
key: test
- name: mypas
valueFrom:
configMapKeyRef:
name: myconmap2
key: test1
运行
kubectl apply -f myconf1.yml
pod/mypod created
进入pod查看
kubectl exec -it mypod sh
/ # echo $myuser
1
echo $mypas
2