【kubernetes】配置管理中心 Secret 运用

一,介绍

Secret用于存储密码、token、秘钥等敏感数据的配置,从而避免将这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。

【Secret与Configmap对比】

存储方式是否可以Volume挂载是否可以加入容器环境变量中
Configmap明文存储
Secret密文存储(base64编码)

二,两种方式

当使用 secret的时,pod 需要引用 secret。两种方式:

  • 作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里
  • 当 kubelet 为 pod 拉取镜像时,引用secret。

三,3种可选参数

generic: 通用类型,通常用于存储密码数据。
tls:仅用于存储私钥和证书。
docker-registry: 用于保存docker仓库的认证信息。

四,类型

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

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

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

五,创建和使用

0,yaml创建secret

# vim secret-pod.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque                       # 指定secret的类型,必须指定
data:                              # 指定数据
  user: a8df5aj2we1r0              # 定义具体数据的key/value
  pwd: YW8xsfjM0N66                # 定义具体数据的key/value

下面的案例,将通过命令行的形式创建secret后,测试。

1,通过环境变量引入

1-1【创建secret】

#把mysql的root用户的password创建成secret, 类型generic
kubectl create secret generic mysql-password --from-literal=password=admin123456

在这里插入图片描述
1-2【使用secret】

# vim pod-secret

apiVersion: v1
kind: Pod
metadata:
  name: myapp-secret
  labels:
    app: zw-secret
spec:
  containers:
  - name: zj-secret
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
      name: zj-secret-port
    env:                           # 通过env引入
    - name: POD-PASSWORD           # 定义注入pod的变量名称
      valueFrom:                   # 数据来源
        secretKeyRef:              # 采用secret
          name: mdy-secret         # 采用secret的资源名(提前已经定义)
          key: password            # 采用secret的资源的哪个字段
 

1-3【验证secret】
在这里插入图片描述
在pod中的secret信息实际已经被解密。

【扩展】:可以通过envFrom字段,直接将secret的定义,注入到容器内。

spec:
  containers:
  - name: zj-secret
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
      name: zj-secret-port
    envFrom:                 # 数据来源
    - secretRef:             # 采用secret
        name: mdy-secret     # 采用的secret资源名(所有定义的变量,都导入容器)

在这里插入图片描述
在pod中的secret信息实际已经被解密。

2,通过volume挂载Secret

2-1【创建secret】

#把mysql的用户root名administrator创建成secret, 类型generic
kubectl create secret generic mysql-root --from-literal=root=administrator

在这里插入图片描述

2-2【使用secret】


apiVersion: v1
kind: Pod
metadata:
  name: myapp-secret-volumes
  labels:
    app: zw-secret-volumes
spec:
  containers:
  - name: zj-secret
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
      name: zj-secret-port
    volumeMounts:           # 容器内 定义挂载
    - name: mdy-666         # 指定下面挂载卷的名称,必须一致
      mountPath: /tmp/mdy/  # 指定容器内挂载后的目录地址
  volumes:                   # 定义挂载卷
  - name: mdy-666            # 定义挂载卷名称,必须与上面一致
    secret:                  # 指定挂载卷类型为secret
      secretName: mdy-root   # 指定secret的名称(早先定义好生成后)

2-3【验证secret】
在这里插入图片描述
在pod中的secret信息实际已经被解密。

六,Secret不是真正加密

  • 使用base64“加密”:
echo -n 'admin' | base64

YWRtaW4=
  • 使用base64“解密”:
echo 'YWRtaW4=' | base64 -d

admin

“-n”表示:打印信息之后不换行

  • 33
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直奔跑在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值