一、Secret的资源配置
1.1 Secret配置的相关说明
Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 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 的认证信息。
●kubernetes.io/tls:用于存储TLS证书和私钥,通常用于Ingress控制器或其他需要TLS加密通信的服务。
Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret:
●作为挂载到一个或多个容器上的卷 中的文件。
●作为容器的环境变量。
●由 kubelet 在为 Pod 拉取镜像时使用。
应用场景:凭据 Secret | Kubernetes
1.2 陈述式创建 Secret配置
Secret 的创建是根据文件中保存到相应信息 进行。例如我们要通过一个用户名文件和密码文件来创建具体的Secret资源配置。
#首先准备好相对应的用户和密码文件
#echo 中 “-n” 选项为不换行
echo -n 'limahua' > username.txt
echo -n 'qq666' > passwd.txt
用kubectl create secret命令创建Secret
kubectl create secret generic mysecret --from-file=username.txt --from-file=passwd.txt
kubectl describe secrets mysecret
1.3 声明式 + base64编码 创建Secret
echo limahua | base64
echo qq666 | base64
通过管道符base64 将明文进行转码
编写yaml文件
vim secret01.yaml
apiVersion: v1
kind: Secret #表明资源的类型为Secret,用于存储敏感信息
metadata:
name: my-secret1
type: Opaque # base64 进行转码信息保护
data: #定义secret的配置信息
username: bGltYWh1YQo= #Base64编码后的用户名
password: cXE2NjYK #Base64编码后的密码
kubectl apply -f secret01.yaml
1.4 将secret 以volume形式挂载到pod中
创建一个pod模板,对其进行修改编辑
kubectl run nginx-secret --image=nginx:1.18 --port=80 --dry-run=client -o yaml > ng-secret.yaml
vim ng-secret.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: nginx-secret
name: nginx-secret
spec:
containers:
- image: nginx:1.18
name: nginx-secret
ports:
- containerPort: 80
volumeMounts:
- name: secrets #引用一个卷(volume)的名称,该卷在此容器内挂载
mountPath: "/etc/secret" #指定容器内挂载的路径
readOnly: true #只读
volumes:
- name: secrets #卷的名称,与上述容器中引用的卷名对应
secret:
secretName: mysecret #指定了此卷的数据来源是一个名为mysecret的Secret对象
Kubernetes会自动将mysecret Secret中的数据挂载到指定的/etc/secret路径下,
所有数据都是以文件形式存在且根据Secret的原始内容Base64解码。
kubectl apply -f ng-secret.yaml