一、Secret
1.1 Secret定义
Secret是用来保存密码、token、密钥等敏感数据的k8s资源,这类数据虽然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。
1.2 Secret类型
- kubernetes.io/service-account-token:由Kubernetes自动创建,用来访问APIServer的 Secret,Pod 会默认使用这个Secret与APIServer通信, 并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount目录中
- Opaque:base64 编码格式的Secret,用来存储用户自定义的密码、密钥等,默认的Secret 类型
- kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息
1.3 使用secret方式
- 作为挂载到一个或多个容器上的卷中的文件。
- 作为容器的环境变量。
- 由 kubelet 在为Pod拉取镜像时使用。
1.4 Secret应用场景
二、Secret应用实例
2.1 创建Secret
2.1.1 用kubectl create secret命令创建Secret,在Kubernetes集群中创建一个名为mysecret的通用(generic)类型的Secret对象,并从本地文件中加载用户名和密码信息作为Secret的数据
这个命令执行的操作包括:
- 创建一个名为mysecret的通用类型的Secret对象。
- 使用--from-file选项从本地文件中加载数据,其中username.txt文件的内容将作为Secret对象中的用户名数据,而password.txt文件的内容将作为Secret对象中的密码数据。
这样,Kubernetes将会创建一个包含用户名和密码信息的Secret对象,可以在容器中挂载并使用这些敏感数据,而无需明文暴露在Pod的配置文件中。
get或describe指令都不会展示secret的实际内容,这是出于对数据的保护的考虑
2.1.2 内容用base64编码,创建Secret
2.1.2.1 base64编码
echo -n zhangsan | base64
echo -n bac1234 | base64
2.1.2.2 编辑yaml文件
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: secrets
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: secrets