K8s secret配置

secret

secret用于保存铭感信息,比如密码、ssh-key、令牌等等

  • 存储格式:K/V键值对
  • 使用方式:环境变量和挂载(volumes)
  • 密文方式:base64
  • 创建方式:命令行创建和配置清单
  • 使用场景:
    • opaque:通用自定义数据,base64编码
    • kubernetes.io/service-account-token:用于存储SA用户认证信息
    • kubernetes.io/dockerconfigjson:用户存储docker仓库认证信息
    • kubernetes.io/tls:用于tls通讯模式认证信息
    • kubernetes.io/ssh-auth:用于ssh认证信息
    • bootstrap.kubernetes.io/token:启动引导token

存储格式

secret以K/V键值对进行存储,节点加载到内存,而存储到etcd中是明文的

  • username: secret
  • passwd: YWRtaW4K

密文方式

base64原理其实就是通过64个字符对明文进行转码,变成由64个字符组成的密文

  • base64不能算加密的一种,是明文变密文的一种方式
  • base64是可以相互推导的

在这里插入图片描述
使用场景
默认常见使用为opaque定义K/V键值对信息,用来存储密码、ssh-key、令牌等

  • opaque:通用自定义数据,base64编码
  • kubernetes.io/service-account-token:用于存储SA用户认证信息
  • kubernetes.io/dockerconfigjson:用户存储docker仓库认证信息
  • kubernetes.io/tls:用于tls通讯模式认证信息
  • kubernetes.io/ssh-auth:用于ssh认证信息
  • bootstrap.kubernetes.io/token:启动引导token

创建方式

命令行

kubectl create secret generic test-secret --from-literal=username=test --from-literal=passwd=test
 #命令行generic代表就是opaque类型,定义了2个数据
kubectl create secret generic test-secret --from-file=test
#同样也支持文件指定,k就是文件名称,v就是内容

在这里插入图片描述查看yaml文件,明文的信息自动变成密文了
在这里插入图片描述在这里插入图片描述
确认是可以推导出来的

配置清单创建secret

相比之前的参数有了几个区别

  • data:定义K/V格式数据,需要提前把数据转换成base64格式
    • 加密:echo -n test | base64
    • 解密:echo -n test | base64 -d
  • stringData:以明文方式定义K/V格式数据,创建后会自动进行格式转换
  • type:就是上面说的使用场景了,默认为Opaque
apiVersion: v1
stringData:
  username: test
  password: test
kind: Secret
metadata:
  name: test-secret
type: Opaque

查看信息,由于之前的存在,直接重叠了之前的
在这里插入图片描述
使用方式

  • 环境变量:spec.containers.env.valueFrom,通过valueFrom字段下的secretKeyRef进行配置
    • 缺点:导致信息无法变更或者是对于程序调用子进程是无法读取到父环境变量
  • 存储卷:spec.volumes和spec.containers.volumeMounts配合使用
    • 当已经存储于卷中被使用的 Secret 被更新时,被映射的键也将终将被更新,由kubelet 在周期性同步时检查更新
apiVersion: v1
kind: Pod
metadata:
 name: nginx
 labels:
   app: nginx
spec:
 containers:
   - name: nginx
     image: nginx:1.19
     volumeMounts:
       - name: secret
         mountPath: /mnt/test-secret
 volumes:
   - name: secret
     secret:
      secretName: test-secret

kubectl exec nginx -it sh
ls -l /opt
在这里插入图片描述
查看文件是个软连接

测试修改secret信息后,发现Pod中也变化了

官方还介绍了使用其他类型,比如基于ssh认证信息,还可以设置secret的信息映射后的权限和信息个数

参考:https://v1-19.docs.kubernetes.io/zh/docs/concepts/configuration/secret/#using-secrets
参考:书籍-kubernetes进阶实战-马永亮

猜你喜欢

转载自blog.csdn.net/yangshihuz/article/details/113767800