7.5.1 介绍 Secret
Secret 也是 key-value.
- 环境变量
- 卷
工作方式:
- 将 Secret 分发到 pod 所在机器节点
- 只存储在内存中
- 主节点本身, Secret 通常以非加密形式存储
7.5.2 默认令牌 Secret 介绍
默认被挂载至所有容器.
$ kubeclt get secrets
查看 Secret 详情:
- 三个条目用于从 pod 内部安全访问 Kubernetes API 服务器


7.5.3 创建 Secret
- 创建私钥与证书

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

7.5.4 对比 ConfigMap 与 Secret


- Secret 条目的内容被以 Base64 格式编码 (没有加密)
为二进制数据创建 Secret
- 因为使用 Base64, 所以 Secret 可以存储二进制
- Secret 的大小限于 1MB
stringData 字段介绍
- 设置纯文本条目
- stringData 字段是只写的
- 通过
kubectl get -o yaml获取的 Secret YAML 定义时, 不会显示 stringData 字段, 也在 data 字段中以 Base64 形式出现

在 pod 中读取 Secret 条目
- secret 卷
- 环境变量
自动解码, 应用程序无须主动解码.
7.5.5 在 pod 中使用 Secret
修改 fortune-config ConfigMap 以开启 HTTPS
$ kubectl edit configmap fortune-config

挂载 forune-secret 至 pod



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


Secret 卷存储于内存
secret 卷采用内存文件系统.

通过环境变量暴露 Secret 条目

使用环境来暴露 Secret 不是一个好方式:
- 应用可能在出错时把 Secret 打到日志中
- 子进程会继承父进程的所有环境变量, 如果子进程是第三方应用, 可能会有风险
了解镜像拉取 Secret
在 Docker Hub 上使用私有镜像仓库
- 创建 Secret
- imagePullSecrets 字段引用 Secret
创建用于 Docker 镜像仓库鉴权的 Secret

在 pod 定义中使用 docker-registry Secret

不需要为每个 pod 指定镜像拉取 Secret
添加 Secret 至 ServiceAccount.
