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/ #
可以看到,信息注入后是明文的,可以設置查看訪問權限解決。
