kubernetes 的 Secret 对象可以存储和管理敏感信息,比如访问数据库的用户名,密码或者秘钥等等,Secret 会以密文的方式存储数据,避免直接在配置文件中保存敏感信息
Secret有三种类型:
- Service Account :用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;
- Opaque :base64编码格式的Secret,用来存储密码、密钥等;
- kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息。
创建方式
from-literal
每个—from-literal对应一个数据信息kubectl create secret generic mysecret --from-literal=usernarne=root --from-literal=password=123456
secret/mysecret created
from-file
$ echo -n root > ./username
$ echo -n 123456 > ./password
$ kubectl create secret generic mysecretfile --from-file=./username --from-file=./password
secret/mysecretfile created
from-env-file
文件中每行Key=Value 对应一个信息数据
$ cat << EOF > env.txt
> username=root
> password=123456
> EOF
$ kubectl create secret generic mysecretenv --from-env-file=env.txt
secret/mysecretenv created
YMAL配置
文件中敏感数据必须通过base64进行编码
$ echo -n root | base64
cm9vdA==
$ echo -n 123456 | base64
MTIzNDU2
创建yaml 文件
apiVersion: v1
kind: Secret
metadata:
name: admin
data:
username: cm9vdA==
password: MTIzNDU2
执行
$ kubectl apply -f admin.yaml
secret/admin created
查看
通过kubectl get secret 查看存在的secret
$ kubectl get secrets
NAME TYPE DATA AGE
admin Opaque 2 74s
default-token-zn6nr kubernetes.io/service-account-token 3 10d
mysecret Opaque 2 12h
mysecretenv Opaque 2 12h
mysecretfile Opaque 2 12h
查看详细信息
$ kubectl describe secret admin
Name: admin
Namespace: default
Labels: <none>
Annotations:
Type: Opaque
Data
====
password: 6 bytes
username: 4 bytes
查看具体值
通过base64 解析出原始值
$ echo -n MTIzNDU2 |base64 -D
kubernetes.io/dockerconfigjson
可以直接用kubectl命令来创建用于docker registry认证的secret:
kubectl create secret docker-registry regcred \
--docker-server=<你的镜像仓库服务器> \
--docker-username=<你的用户名> \
--docker-password=<你的密码> \
--docker-email=<你的邮箱地址>
查看创建结果
kubectl get secret -o wide
NAME TYPE DATA AGE
regcred kubernetes.io/dockerconfigjson 1 26m
创建my-private-reg-pod.yaml,要从私有仓库拉取镜像,Kubernetes 需要凭证。 配置文件中的 imagePullSecrets 字段表明 Kubernetes 应该通过名为 regcred 的 Secret 获取凭证。
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: baxiang/liveness:1.0
imagePullSecrets:
- name: regcred
执行
kubectl apply -f my-private-reg-pod.yaml
kubectl get pod private-reg