一、为什么要有Secret?

我们知道ConfigMap用于存在镜像的配置数据,但ConfigMap存放的数据通常都是不敏感且明文的数据,而有些敏感的、需要加密存储的数据放在什么地方呢?Secret闪亮登场,Secret也是存在镜像的配置数据,作用基本与ConfigMap类似,只是Secret存在的大多是敏感数据,kubernetes默认会对这些数据进行Base64编码。

二、创建Secret

1. 通过–from-file 从文件导入数据创建

通过命令:kubectl create secret generic 名称 --from-file=文件名 来创建,如果有多个文件,则通过指定多个–from-file。

[root@k8s-master1 secrets]# echo -n '1f2d1e2e67df' > ./password.txt
[root@k8s-master1 secrets]# echo -n 'admin' > ./username.txt

[root@k8s-master1 secrets]# kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
secret/db-user-pass created

查询Secret列表:kubectl get secrets
查询配置文件:kubectl get secret db-user-pass -o yaml
对密文进行解密:echo “密文” | base64 --decode

[root@k8s-master1 secrets]# kubectl get secrets
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      7s
default-token-cb5j8   kubernetes.io/service-account-token   3      11d
[root@k8s-master1 secrets]# kubectl get secret db-user-pass -o yaml
apiVersion: v1
data:
  password.txt: MWYyZDFlMmU2N2Rm
  username.txt: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: "2022-12-25T02:12:44Z"
  name: db-user-pass
  namespace: default
  resourceVersion: "419263"
  uid: c50190ab-6a94-4bc1-a992-0c19e7431006
type: Opaque
You have new mail in /var/spool/mail/root
[root@k8s-master1 secrets]# echo "MWYyZDFlMmU2N2Rm" | base64 --decode
1f2d1e2e67df


2. 使用–from-literal 从字面量数据创建

通过命令:kubectl create secret generic 名称 --from-literal=key=value 来创建,如果有多个键值对,则通过指定多个–from-literal。

[root@k8s-master1 secrets]# kubectl create secret generic db-user-pass2 --from-literal=username=admin --from-literal=password='$123456*'  --from-literal=remark=\$remark
secret/db-user-pass2 created
[root@k8s-master1 secrets]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      6m29s
db-user-pass2         Opaque                                3      7s
default-token-cb5j8   kubernetes.io/service-account-token   3      11d
[root@k8s-master1 secrets]# kubectl get secret db-user-pass2 -o yaml
apiVersion: v1
data:
  password: JDEyMzQ1Nio=
  remark: JHJlbWFyaw==
  username: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: "2022-12-25T02:19:06Z"
  name: db-user-pass2
  namespace: default
  resourceVersion: "419923"
  uid: a567bcb5-4329-4fa8-9e70-8921b96438a1
type: Opaque
[root@k8s-master1 secrets]# echo "JDEyMzQ1Nio=" | base64 --decode
$123456*[root@k8s-master1 secrets]# echo "JHJlbWFyaw==" | base64 --decode
$remark[root@k8s-master1 secrets]# 

需要注意的是,如果创建的键值对包含特殊字符(、*、\、!)则需要通过单引号包起来,或者使用 \ 进行转码,例如 转码为 $ .

3. 通过yaml文件创建

(1)定义一个Secret,具体配置如下:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: JDEyMzQ1Nio=
stringData:
  username: admin2
  password2: 1f2d1e2e67df

从上面的配置文件中,我们发现了data和stringData两个配置块,data中的配置需要我们对value值先进行Base64编码,而stringData则不需要,只需要保持明文配置即可,kubernetes会帮我们进行Base64编码,如果data和stringData存在相同的配置项,则stringData会覆盖data的配置项。

[root@k8s-master1 secrets]# vim 01-create-secret.yml
[root@k8s-master1 secrets]# 
[root@k8s-master1 secrets]# 
[root@k8s-master1 secrets]# 
[root@k8s-master1 secrets]# kubectl apply -f 01-create-secret.yml 
secret/mysecret created
[root@k8s-master1 secrets]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      11m
db-user-pass2         Opaque                                3      5m36s
default-token-cb5j8   kubernetes.io/service-account-token   3      11d
mysecret              Opaque                                3      12s
[root@k8s-master1 secrets]# kubectl get secret mysecret
NAME       TYPE     DATA   AGE
mysecret   Opaque   3      29s
[root@k8s-master1 secrets]# kubectl get secret mysecret -o yaml
apiVersion: v1
data:
  password: JDEyMzQ1Nio=
  password2: MWYyZDFlMmU2N2Rm
  username: YWRtaW4y
kind: Secret
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"password":"JDEyMzQ1Nio=","username":"YWRtaW4="},"kind":"Secret","metadata":{"annotations":{},"name":"mysecret","namespace":"default"},"stringData":{"password2":"1f2d1e2e67df","username":"admin2"},"type":"Opaque"}
  creationTimestamp: "2022-12-25T02:24:30Z"
  name: mysecret
  namespace: default
  resourceVersion: "420410"
  uid: a6a79a6c-07d9-49db-82ef-a0e2e8ee485a
type: Opaque
[root@k8s-master1 secrets]# echo "YWRtaW4y" | base64 --decode
admin2[root@k8s-master1 secrets]# 


打赏
支付宝 微信
上一篇 下一篇