目录

  • 概念
  • 模板
  • secret的类型
  • 实战
    • 创建
      • 使用kubectl
      • 使用yaml文件创建
    • 使用
      • 环境变量
      • 挂载
      • imagePullSecret
    • 更新
    • 删除
  • 注意项
  • 参考

概念

Secret 是一个主要用来存储密码、token 等一些敏感信息的资源对象。其中,敏感信息是采用 Base64 编码保存起来的。

注意:Base64只是一种编码,不含密钥的,并不安全。默认情况下,Kubernetes Secret 未加密地存储在 API 服务器的底层数据存储(etcd)中。 任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。 此外,任何有权限在命名空间中创建 Pod 的人都可以使用该访问权限读取该命名空间中的任何 Secret;
secret安全相关的静态加密等,将在k8s学习-思维导图与学习笔记中的安全部分详细展开。

模板

secret_test.yaml

apiVersion: v1
kind: Secret
metadata:name: secret-test
type: Opaque
data:username: YWRtaW4=
stringData:username: administrator

secret的类型

内置类型 用法
Opaque 用户定义的任意数据
kubernetes.io/service-account-token 服务账号令牌
kubernetes.io/dockercfg ~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson ~/.docker/config.json 文件的序列化形式
kubernetes.io/basic-auth 用于基本身份认证的凭据
kubernetes.io/ssh-auth 用于 SSH 身份认证的凭据
kubernetes.io/tls 用于 TLS 客户端或者服务器端的数据
bootstrap.kubernetes.io/token 启动引导令牌数据

实战

创建

使用kubectl

命令
写入账号密码

echo -n 'lady-killer9' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt

创建secret

kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt -n killer

结果


可以看到默认密钥名称是文件名,值是base64编码的。
注意,特殊字符需要使用 \ 进行转义,例如$

使用yaml文件创建

可以base64编码后放到data或者明文放到stringData,同时存在时,后者优先级更高。

命令

结果

使用

环境变量

与k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致,configMapRef改为secretKeyRef即可。
示例

apiVersion: v1
kind: Pod
metadata:name: secret-test-pod
spec:containers:- name: test-containerimage: k8s.gcr.io/busyboxcommand: [ "/bin/sh", "-c", "env" ]envFrom:- secretRef:name: mysecretrestartPolicy: Never

挂载

与k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致
示例

apiVersion: v1
kind: Secret
metadata:name: dotfile-secret
data:.secret-file: dmFsdWUtMg0KDQo=
---
apiVersion: v1
kind: Pod
metadata:name: secret-dotfiles-pod
spec:volumes:- name: secret-volumesecret:secretName: dotfile-secretcontainers:- name: dotfile-test-containerimage: k8s.gcr.io/busyboxcommand:- ls- "-l"- "/etc/secret-volume"volumeMounts:- name: secret-volumereadOnly: truemountPath: "/etc/secret-volume"

imagePullSecret

imagePullSecrets 字段中包含一个列表,列举对同一名字空间中的 Secret 的引用。 你可以使用 imagePullSecrets 将包含 Docker(或其他)镜像仓库密码的 Secret 传递给 kubelet。kubelet 使用此信息来替你的 Pod 拉取私有镜像

手动指定 imagePullSecret
可以阅读容器镜像文档 以了解如何设置 imagePullSecrets。

设置自动附加 imagePullSecrets
可以手动创建 imagePullSecret,并在 ServiceAccount 中引用。 使用该 ServiceAccount 创建的任何 Pod 和默认使用该 ServiceAccount 的 Pod 将会将其的 imagePullSecret 字段设置为服务帐户的 imagePullSecret 值。 详细说明请参阅 将 ImagePullSecrets 添加到服务帐户。

自动挂载手动创建的 Secret
手动创建的 Secret(例如包含用于访问 GitHub 帐户令牌的 Secret)可以根据其服务帐户自动附加到 Pod。

更新

与k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致

删除

命令

kubectl delete secret db-user-pass -n killer

结果

注意项

  • 第一个是 Secret 的文件大小限制。这个跟 ConfigMap 一样,也是1MB
  • 第二个是 Secret 采用了 base64编码,但是它跟明文也没有太大区别。所以说,如果有一些机密信息要用 Secret来存储的话,还是要很慎重考虑。也就是说谁会来访问你这个集群,谁会来用你这个Secret,还是要慎重考虑,因为它如果能够访问这个集群,就能拿到这个 Secret。 如果是对 Secret敏感信息要求很高,对加密这块有很强的需求,推荐可以使用 Kubernetes 和开源的vault做一个解决方案,来解决敏感信息的加密和权限管理。
  • 第三个就是 Secret 读取的最佳实践,建议不要用list/watch,如果用 list/watch 操作的话,会把 namespace 下的所有 Secret全部拉取下来,这样其实暴露了更多的信息。推荐使用 GET 的方法,这样只获取你自己需要的那个 Secret。

更多k8s相关内容,请看文章:k8s学习-思维导图与学习笔记

参考

k8s-secret
k8s-使用kubectl管理secret
k8s-secret-spec
阿里云-应用配置管理

k8s学习-Secret(创建、使用、更新、删除等)相关推荐

  1. k8s学习-CKS真题-secret创建、使用

    目录 题目 环境搭建 解题 任务一 任务二 任务三 模拟题 参考 题目 Task 在 namespace istio-system 中获取名为 db1-test 的现有 secret 的内容 将 us ...

  2. k8s学习-持久化存储(Volumes、hostPath、emptyDir、PV、PVC)详解与实战

    目录 概念 Volumes ConfigMap && Secret hostPath 模版 emptyDir 模版 PV 模版 PVC 模版 实战 volumes - hostPath ...

  3. k8s学习-污点和容忍(概念、模版、创建、删除)

    目录 概念 模版 实战 添加污点 添加容忍 移除污点 参考 概念 污点(Taint)使节点能够排斥/驱逐一类特定的 Pod,通过给 Node 打一些污点,来限制 Pod 调度到某些 Node 上. 容 ...

  4. 文章目录 | .NET Core on K8s学习之旅 (更新至20200618)

    .NET Core on K8s学习之旅 更新记录: -- 20200511 增加Ingress & Nginx Ingress介绍 -- 20200515 增加Ocelot API网关集成示 ...

  5. .NET Core on K8S 学习与实践系列文章索引 (更新至20191126)

    更新记录: -- 2019-11-26 增加Docker容器日志系列文章 近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给自己立一个flag:完成这个<.NET ...

  6. Abp vnext Web应用程序开发教程 3 —— 创建、更新和删除书籍

    文章目录 关于本教程 下载源代码 创建新书 创建模态表单 添加"新书"按钮 更新书 EditModal.cshtml.cs 从BookDto映射到CreateUpdateBookD ...

  7. k8s学习笔记:缩扩容更新

    1. 前言 自动缩扩容是现代化的容器调度平台带给我们的最激动人心的一项能力.在上规模的业务系统中我们无时无刻不面临着这样的难题:用户的流量往往随着时间波动,甚至偶尔出现不可预测的峰值(毛刺流量),每当 ...

  8. Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略

    Python语言学习:创建/删除文件/文件夹.获取当前文件/文件夹路径(系统环境路径/目录).获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略 目录 系统环境路径的设置 1.sys ...

  9. .NET Core on K8S 学习与实践系列文章索引 (更新至20191116)

    更新记录: -- 2019-11-16 增加Docker容器监控系列文章 // 此外,今天是11月17日,我又老了一岁,祝我自己生日快乐! 近期在学习Kubernetes,基于之前做笔记的习惯,已经写 ...

最新文章

  1. Java学习(Map接口)
  2. 寒冰王座(DGA最长路/完全背包)
  3. 国产OS推广应从娃娃和体制内双管齐下
  4. comptia a+_我如何通过CompTIA Linux +考试
  5. 微软MSDN提供的Visual Studio开发文档
  6. 通过编写串口助手工具学习MFC过程——(三)Unicode字符集的宽字符和多字节字符转换...
  7. 卷积神经网络VGG16这么简单,为什么没人能说清?
  8. mysql视图子查询_MySQL:FROM子句限制中的带有子查询的视图
  9. 思考Hadoop权威指南的一段话
  10. noob之MySQL基本查询
  11. OpenGL ES:相机预览添加滤镜效果
  12. 15.7 项目:多线程 XKCD 下载程序
  13. Python基础之闭包函数
  14. Android5.0以上系统的移动网络开关
  15. HTML小游戏20 —— html5版开心斗地主小游戏(附完整源码)
  16. for循环与range方法
  17. tracking里面的性能图怎么画,类似ocean论文中的
  18. 洛谷P1556 幸福的路
  19. 如何通过自己的app打开twitter的指定功能
  20. 史上最难的初等几何问题?

热门文章

  1. 基于Self-Hosted模式搭建K8S可观测平台Pixie(内附填坑方法)
  2. play框架在idea开发工具上的简单配置
  3. QQ三国华容道拼图脚本(半成品,成功率不高)
  4. flowable-ui(v6.7.2)简单的请假流程审批操作(一)
  5. 刷卡分期的套路有多深?信用卡、花呗、白条没有善人
  6. 射频信号空间衰减计算
  7. 【操作系统】第2章 进程与线程
  8. boto3 连接aws_Python,Boto3和AWS S3:神秘化
  9. 靶机渗透测试实战(三)——Bulldog1渗透实战
  10. 华为虚拟化服务服务器忘记密码,华为云linux服务器 忘记密码