Secret详解

secret介绍

  1. secret用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。
  2. 这类数据当然也可以存放在Pod或者镜像中,
  3. 但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。
  4. 用户可以创建自己的secret,系统也会有自己的secret
  5. Pod需要先引用才能使用某个secret
  6. Pod2种方式来使用secret
  7. 1. 作为volume的一个域被一个或多个容器挂载
  8. 2. 在拉取镜像的时候被kubelet引用。

secret类型

  1. 內建的Secrets:
  2. ServiceAccount创建的API证书附加的秘钥
  3. k8s自动生成的用来访问apiserverSecret,所有Pod会默认使用这个Secretapiserver通信
  4. 创建自己的Secret:
  5. 方式1:使用kubectl create secret命令
  6. 方式2yaml文件创建Secret

创建secret

命令方式创建secret

  1. 假如某个Pod要访问数据库,需要用户名密码,分别存放在2个文件中:username.txtpassword.txt
  2. eg
  3. # echo -n 'admin' > ./username.txt
  4. # echo -n '1f2d1e2e67df' > ./password.txt
  5. kubectl create secret指令将用户名密码写到secret中,并在apiserver创建Secret
  6. # kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
  7. 多个文件可以使用多个 --from-file
  8. secret "db-user-pass" created
  9. 查看创建结果
  10. # kubectl get secrets
  11. NAME TYPE DATA AGE
  12. db-user-pass Opaque 2 51s
  13. # kubectl describe secrets/db-user-pass
  14. Name: db-user-pass
  15. Namespace: default
  16. Labels: <none>
  17. Annotations: <none>
  18. Type: Opaque
  19. Data
  20. ====
  21. password.txt: 12 bytes
  22. username.txt: 5 bytes

Yaml方式创建Secret

  1. 创建一个secret.yaml文件,内容用base64编码
  2. # echo -n 'admin' | base64
  3. YWRtaW4=
  4. # echo -n '1f2d1e2e67df' | base64
  5. MWYyZDFlMmU2N2Rm
  6. yaml文件内容
  7. [root@master kubernetes]# cat secret.yaml
  8. apiVersion: v1
  9. kind: Secret
  10. metadata:
  11. name: mysecret
  12. type: Opaque
  13. data:
  14. username: YWRtaW4=
  15. password: MWYyZDFlMmU2N2Rm
  16. 创建
  17. [root@master kubernetes]# kubectl create -f secret.yaml
  18. secret/mysecret created
  19. 查看
  20. [root@master kubernetes]# kubectl get secret
  21. NAME TYPE DATA AGE
  22. default-token-cl8gq kubernetes.io/service-account-token 3 19d
  23. mysecret Opaque 2 5m23s
  24. base64解码:
  25. [root@master kubernetes]# echo 'MWYyZDFlMmU2N2Rm'|base64 --decode
  26. 1f2d1e2e67df[

secret查看

  1. [root@master kubernetes]# kubectl describe secret mysecret
  2. Name: mysecret
  3. Namespace: default
  4. Labels: <none>
  5. Annotations: <none>
  6. Type: Opaque
  7. Data
  8. ====
  9. password: 12 bytes
  10. username: 5 bytes
  11. 解析Secret中内容
  12. [root@master kubernetes]# kubectl get secret mysecret -o yaml
  13. apiVersion: v1
  14. data:
  15. password: MWYyZDFlMmU2N2Rm
  16. username: YWRtaW4=
  17. kind: Secret
  18. metadata:
  19. creationTimestamp: "2022-09-26T10:57:55Z"
  20. name: mysecret
  21. namespace: default
  22. resourceVersion: "799379"
  23. selfLink: /api/v1/namespaces/default/secrets/mysecret
  24. uid: 55829a00-bc2a-4c58-8bac-26c7a46d15de
  25. type: Opaque
  26. [root@master kubernetes]# kubectl get secret mysecret -o json
  27. {
  28. "apiVersion": "v1",
  29. "data": {
  30. "password": "MWYyZDFlMmU2N2Rm",
  31. "username": "YWRtaW4="
  32. },
  33. "kind": "Secret",
  34. "metadata": {
  35. "creationTimestamp": "2022-09-26T10:57:55Z",
  36. "name": "mysecret",
  37. "namespace": "default",
  38. "resourceVersion": "799379",
  39. "selfLink": "/api/v1/namespaces/default/secrets/mysecret",
  40. "uid": "55829a00-bc2a-4c58-8bac-26c7a46d15de"
  41. },
  42. "type": "Opaque"
  43. }