k8s的secret基本概念及案例
secret相对于configMap,功能上是相似的
但是secret是以其他编码方式去记录配置信息的,但是也可以被解读,只不过有技术门槛,不是那么容易就被解读。
使用base64可以解码:echo ******** | base64 -d
********是kubectl describe secret secretName -o yaml中的值的编码
pod.spec.volumes.secret
secret有三种类型:(查看:kubectl create secret --help)
docker-registry 一般保存docker-registry的认证信息
generic 通用的,一般保存一些密码数据
tls 一般保存私钥或证书
pod创建时若连接到私有仓库中需要认证,则要创建专用的secret (docker-registry)类型的
pod.spec.imagePullSecrets字段中需要指明secret的name
generic方式的secret,里面的键值虽说不是铭文,但是解码的技术手段要求不高。
对于密码类型的信息,最好用数据卷挂载方式来实现信息的注入,然后以文件形式挂载到挂载点,设置权限。
例:用数据卷方式,将mysql的密码注入到pod的容器中。
1.创建secret
kubectl create secret generic test --from-literal=MYSQL_ROOT_PASSWORD=smb@nds
2.创建pod
1 vim myapp-demo.yaml
2 apiVersion: apps/v1
3 kind: Deployment
4 metadata:
5 name: myapp-demo
6 namespace: default
7 spec:
8 replicas: 1
9 selector:
10 matchLabels:
11 app: myapp
12 template:
13 metadata:
14 labels:
15 app: myapp
16 spec:
17 containers:
18 - name: myapp
19 image: ikubernetes/myapp:v1
20 imagePullPolicy: IfNotPresent
21 ports:
22 - name: http
23 containerPort: 80
24 volumeMounts:
25 - name: mysql
26 mountPath: /test/
27 volumes:
28 - name: mysql
29 secret:
30 secretName: test
3.启动pod,查看信息是否注入
1 kubectl apply -f myapp-demo.yaml
2 kubectl exec -it myapp-demo-75f8f9bf9f-8nbdv -- /bin/sh
3 / # cat test/MYSQL_ROOT_PASSWORD
4 smb@nds/ #
可以看到,信息注入后是明文的,可以设置查看访问权限解决。