配置管理中心 Secret

 Configmap 一般是用来存放明文数据的,如配置文件,对于一些敏感
数据,如密码、私钥等数据时,要用 secret 类型。

Secret 解决了密码、token、秘钥等敏感数据的配置问题,而不需要把这些敏感数据
暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。

要使用 secret,pod 需要引用 secret。Pod 可以用两种方式使用 secret:作为
volume 中的文件被挂载到 pod 中的一个或者多个容器里,或者当 kubelet 为 pod 拉取
镜像时使用。

 

secret 可选参数有三种:

generic: 通用类型,通常用于存储密码数据。
tls:此类型仅用于存储私钥和证书。
docker-registry: 若要保存 docker 仓库的认证信息的话,就必须使用此种类型来创建。

Secret 类型:
Service Account:用于被 serviceaccount 引用。serviceaccout 创建时
                             Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。

Opaque:base64 编码格式的 Secret,用来存储密码、秘钥等。可以通过 base64 --decode 解码获得原始数据,因此安全性弱

kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息。

 

通过环境变量引入 Secret

[root@xksmaster1 04_Secret]# kubectl create secret generic mysql-password --from-literal=password=xks**xks123
secret/mysql-password created
[root@xksmaster1 04_Secret]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-ps7pf   kubernetes.io/service-account-token   3      4d21h
mysql-password        Opaque                                1      6s
You have new mail in /var/spool/mail/root
[root@xksmaster1 04_Secret]# kubectl describe secret mysql-password
Name:         mysql-password
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  11 bytes
[root@xksmaster1 04_Secret]# vim pod-secret.yaml


[root@xksmaster1 04_Secret]# kubectl apply -f pod-secret.yaml
pod/pod-secret created
[root@xksmaster1 04_Secret]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-secret 1/1 Running 0 7s
[root@xksmaster1 04_Secret]# kubectl exec -it pod-secret -- /bin/sh
# printenv | grep MYSQL
MYSQL_ROOT_PASSWORD=xks**xks123


通过 volume 挂载 Secret

 [root@xksmaster1 04_Secret]# echo -n 'admin' | base64 
YWRtaW4
=
 [root@xksmaster1 04_Secret]# echo -n 'xks123456xks' | base64 
eGtzMTIzNDU2eGtz

[root@xksmaster1 04_Secret]#
echo eGtzMTIzNDU2eGtz | base64 -d
xks123456xks
[root@xksmaster1 04_Secret]# vim secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: eGtzMTIzNDU2eGtz

[root@xksmaster1 04_Secret]# kubectl apply -f secret.yaml
error: error validating "secret.yaml": error validating data: [ValidationError(Secret.metadata): unknown field "data" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta, ValidationError(Secret.metadata): unknown field "type" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta]; if you choose to ignore these errors, turn validation off with --validate=false
[root@xksmaster1 04_Secret]# vim secret.yaml
[root@xksmaster1 04_Secret]# kubectl apply -f secret.yaml
Error from server (BadRequest): error when creating "secret.yaml": Secret in version "v1" cannot be handled as a Secret: v1.Secret.ObjectMeta: v1.ObjectMeta.TypeMeta: Kind: Data: decode base64: illegal base64 data at input byte 4, error found in #10 byte of ...|:"YWRtaW4"},"kind":"|..., bigger context ...|"password":"eGtzMTIzNDU2eGtz","username":"YWRtaW4"},"kind":"Secret","metadata":{"annotations":{"kube|...
[root@xksmaster1 04_Secret]# vim secret.yaml
You have new mail in /var/spool/mail/root
[root@xksmaster1 04_Secret]# kubectl apply -f secret.yaml
secret/mysecret created
[root@xksmaster1 04_Secret]#  kubectl describe secret mysecret
Name:         mysecret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  12 bytes
username:  5 bytes
[root@xksmaster1 04_Secret]# vim  pod_secret_volume.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-secret-volume
spec:
  containers:
  - name: myapp
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secret
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: mysecret


[root@xksmaster1 04_Secret]# kubectl apply -f pod_secret_volume.yaml pod/pod-secret-volume created [root@xksmaster1 04_Secret]# kubectl get pods NAME READY STATUS RESTARTS AGE pod-secret-volume 1/1 Running 0 6s [root@xksmaster1 04_Secret]# clear [root@xksmaster1 04_Secret]# kubectl exec -it pod-secret-volume -- /bin/sh # ls /etc/secret password username # cat /etc/secret/username admin# cat /etc/secret/password xks123456xks#

#由上可见,在 pod 中的 secret 信息实际已经被解密

 

posted @ 2023-03-13 11:13  しみずよしだ  阅读(31)  评论(0)    收藏  举报