7.5.1 介绍 Secret

Secret 也是 key-value.

  • 环境变量

工作方式:

  • 将 Secret 分发到 pod 所在机器节点
  • 只存储在内存中
  • 主节点本身, Secret 通常以非加密形式存储

7.5.2 默认令牌 Secret 介绍

默认被挂载至所有容器.

  1. $ kubeclt get secrets

查看 Secret 详情:

  • 三个条目用于从 pod 内部安全访问 Kubernetes API 服务器

image.png

image.png

7.5.3 创建 Secret

  1. 创建私钥与证书

image.png

  1. 创建虚拟文件 foo
  1. $ echo bar > foo
  1. 创建 Secret
    1. 文件条目

image.png

7.5.4 对比 ConfigMap 与 Secret

image.png

image.png

  • Secret 条目的内容被以 Base64 格式编码 (没有加密)

为二进制数据创建 Secret

  • 因为使用 Base64, 所以 Secret 可以存储二进制
  • Secret 的大小限于 1MB

stringData 字段介绍

  • 设置纯文本条目
  • stringData 字段是只写的
  • 通过 kubectl get -o yaml 获取的 Secret YAML 定义时, 不会显示 stringData 字段, 也在 data 字段中以 Base64 形式出现

image.png

在 pod 中读取 Secret 条目

  • secret 卷
  • 环境变量

自动解码, 应用程序无须主动解码.

7.5.5 在 pod 中使用 Secret

修改 fortune-config ConfigMap 以开启 HTTPS

  1. $ kubectl edit configmap fortune-config

image.png

挂载 forune-secret 至 pod

image.png
image.png

image.png

测试 Nginx 是否正使用 Secret 中的证书与密钥

image.png

image.png

Secret 卷存储于内存

secret 卷采用内存文件系统.

image.png

通过环境变量暴露 Secret 条目

image.png

使用环境来暴露 Secret 不是一个好方式:

  • 应用可能在出错时把 Secret 打到日志中
  • 子进程会继承父进程的所有环境变量, 如果子进程是第三方应用, 可能会有风险

了解镜像拉取 Secret

在 Docker Hub 上使用私有镜像仓库

  1. 创建 Secret
  2. imagePullSecrets 字段引用 Secret

创建用于 Docker 镜像仓库鉴权的 Secret

image.png

在 pod 定义中使用 docker-registry Secret

image.png

不需要为每个 pod 指定镜像拉取 Secret

添加 Secret 至 ServiceAccount.