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/ #
可以看到,信息注入后是明文的,可以设置查看访问权限解决。