配置管理中心 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 信息实际已经被解密

浙公网安备 33010602011771号