Secret详解
secret介绍
secret用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。用户可以创建自己的secret,系统也会有自己的secret。Pod需要先引用才能使用某个secretPod有2种方式来使用secret:1. 作为volume的一个域被一个或多个容器挂载2. 在拉取镜像的时候被kubelet引用。
secret类型
內建的Secrets:由ServiceAccount创建的API证书附加的秘钥k8s自动生成的用来访问apiserver的Secret,所有Pod会默认使用这个Secret与apiserver通信 创建自己的Secret:方式1:使用kubectl create secret命令方式2:yaml文件创建Secret
创建secret
命令方式创建secret
假如某个Pod要访问数据库,需要用户名密码,分别存放在2个文件中:username.txt,password.txteg:# echo -n 'admin' > ./username.txt# echo -n '1f2d1e2e67df' > ./password.txtkubectl create secret指令将用户名密码写到secret中,并在apiserver创建Secret# kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt多个文件可以使用多个 --from-filesecret "db-user-pass" created查看创建结果# kubectl get secretsNAME TYPE DATA AGEdb-user-pass Opaque 2 51s# kubectl describe secrets/db-user-passName: db-user-passNamespace: defaultLabels: <none>Annotations: <none>Type: OpaqueData====password.txt: 12 bytesusername.txt: 5 bytes
Yaml方式创建Secret
创建一个secret.yaml文件,内容用base64编码# echo -n 'admin' | base64YWRtaW4=# echo -n '1f2d1e2e67df' | base64MWYyZDFlMmU2N2Rmyaml文件内容[root@master kubernetes]# cat secret.yaml apiVersion: v1kind: Secretmetadata: name: mysecrettype: Opaquedata: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm 创建[root@master kubernetes]# kubectl create -f secret.yaml secret/mysecret created查看[root@master kubernetes]# kubectl get secretNAME TYPE DATA AGEdefault-token-cl8gq kubernetes.io/service-account-token 3 19dmysecret Opaque 2 5m23sbase64解码:[root@master kubernetes]# echo 'MWYyZDFlMmU2N2Rm'|base64 --decode1f2d1e2e67df[
secret查看
[root@master kubernetes]# kubectl describe secret mysecret Name: mysecretNamespace: defaultLabels: <none>Annotations: <none>Type: OpaqueData====password: 12 bytesusername: 5 bytes解析Secret中内容[root@master kubernetes]# kubectl get secret mysecret -o yamlapiVersion: v1data: password: MWYyZDFlMmU2N2Rm username: YWRtaW4=kind: Secretmetadata: creationTimestamp: "2022-09-26T10:57:55Z" name: mysecret namespace: default resourceVersion: "799379" selfLink: /api/v1/namespaces/default/secrets/mysecret uid: 55829a00-bc2a-4c58-8bac-26c7a46d15detype: Opaque[root@master kubernetes]# kubectl get secret mysecret -o json{ "apiVersion": "v1", "data": { "password": "MWYyZDFlMmU2N2Rm", "username": "YWRtaW4=" }, "kind": "Secret", "metadata": { "creationTimestamp": "2022-09-26T10:57:55Z", "name": "mysecret", "namespace": "default", "resourceVersion": "799379", "selfLink": "/api/v1/namespaces/default/secrets/mysecret", "uid": "55829a00-bc2a-4c58-8bac-26c7a46d15de" }, "type": "Opaque"}