配置 Secrets
目录
了解 Secrets使用特性支持的类型使用方式创建 Opaque 类型 Secret创建容器镜像仓库类型 Secret创建 Basic Auth 类型 Secret创建 SSH-Auth 类型 Secret创建 TLS 类型 Secret通过 web 控制台创建 Secret如何在 Pod 中使用 Secret作为环境变量作为挂载文件(Volume)后续操作操作使用新 web 控制台创建 Secret从 Applications 视图创建或更新从 Clusters 视图创建或更新验证工作负载影响了解 Secrets
在 Kubernetes (k8s) 中,Secret 是一种基础对象,专用于存储和管理敏感信息,例如密码、OAuth 令牌、SSH 密钥、TLS 证书和 API 密钥。其主要目的是防止敏感数据直接嵌入到 Pod 定义或容器镜像中,从而增强安全性和可移植性。
Secret 类似于 ConfigMap,但它们专门用于机密数据。它们通常以 Base64 编码形式存储,并且可以通过多种方式被 pods 使用,包括挂载为卷或暴露为环境变量。
使用特性
-
增强安全性:与明文配置映射(Kubernetes ConfigMap)相比,Secret 通过使用 Base64 编码存储敏感信息,提供了更好的安全性。该机制结合 Kubernetes 的访问控制能力,显著降低了数据泄露风险。
-
灵活性和管理:与将敏感信息直接硬编码到 Pod 定义文件或容器镜像中相比,使用 Secret 提供了一种更安全、更灵活的方式。这种分离简化了敏感数据的管理和修改,而无需更改应用代码或容器镜像。
支持的类型
Kubernetes 支持多种类型的 Secret,每种类型都针对特定使用场景进行了设计。平台通常支持以下类型:
-
Opaque:一种通用的 Secret 类型,用于存储任意键值对形式的敏感数据,例如密码或 API 密钥。
-
TLS:专门用于存储 TLS(Transport Layer Security)协议的证书和私钥信息,通常用于 HTTPS 通信和安全入口。
-
SSH Key:用于存储 SSH 私钥,常用于安全访问 Git 仓库或其他支持 SSH 的服务。
-
SSH Authentication (kubernetes.io/ssh-auth):用于存储通过 SSH 协议传输的数据的身份验证信息。
-
Username/Password (kubernetes.io/basic-auth):用于存储基本认证凭据(用户名和密码)。
-
Image Pull Secret:存储从私有镜像仓库拉取容器镜像所需的 JSON 身份验证字符串。
使用方式
应用程序可以通过以下不同方式在 pod 内使用 Secret:
-
作为环境变量:Secret 中的敏感数据可以直接注入容器的环境变量中。
-
作为挂载文件(Volume):Secret 可以作为文件挂载到 pod 的卷中,使应用程序能够从指定的文件路径读取敏感数据。
注意:工作负载中的 Pod 实例只能引用同一 namespace 内的 Secret。有关高级用法和 YAML 配置,请参阅 Kubernetes 官方文档。
创建 Opaque 类型 Secret
YAML
你可以像下面这样对其进行解码:
创建容器镜像仓库类型 Secret
YAML
K8s 会自动将你的用户名、密码、电子邮件和服务器信息转换为标准登录格式:
然后将该 JSON 进行 base64 编码,并将其用作 Secret 的 data 字段值。
在 Pod 中使用它:
创建 Basic Auth 类型 Secret
创建 SSH-Auth 类型 Secret
使用场景:存储 SSH 私钥(例如,用于 Git 访问)。
创建 TLS 类型 Secret
使用场景:TLS 证书(供 Ingress、webhooks 等使用)
YAML
通过 web 控制台创建 Secret
-
进入 Container Platform。
-
在左侧导航栏中,点击 Configuration > Secrets。
-
点击 Create Secret。
-
配置参数。
注意:在表单视图中,输入的用户名和密码等敏感数据会在存储到 Secret 之前自动进行 Base64 编码。转换后的数据可在 YAML 视图中预览。
-
点击 Create。
如何在 Pod 中使用 Secret
作为环境变量
从名为 my-secret 的 Secret 中,取出键 username 对应的值,并将其赋给环境变量 DB_USERNAME。
作为挂载文件(Volume)
后续操作
在同一 namespace 中创建原生应用的工作负载时,你可以引用已经创建好的 Secret。
操作
你可以点击列表页右侧的 (⋮),或者在详情页右上角点击 Actions,按需更新或删除 Secret。
使用新 web 控制台创建 Secret
本页主要描述的是旧版控制台的工作流,但在新版 web 控制台的不同视图中,也可以实现相同的功能。
从 Applications 视图创建或更新
当 Secret 作为当前项目范围的一部分进行管理时,请使用 Applications 视图。
在通过该视图创建或更新 Secret 之前,请确认:
- 所选集群已与当前项目关联
- 目标 namespace 与使用该 Secret 的工作负载所使用的 namespace 相同
- 所选 Secret 类型和键名与预期的工作负载配置一致
- 随后该 Secret 会出现在所选项目和集群上下文中
从 Clusters 视图创建或更新
当你从某个具体集群开始,并在该集群中将 Secret 作为 namespace 资源进行管理时,请使用 Clusters 视图。
在通过该视图创建或更新 Secret 之前,请确认:
- 你已先打开目标集群
- 你已选择或确认该集群中的目标 namespace
- 你正在查看该 namespace 中的工作负载启动、挂载文件或镜像拉取影响
- 随后该 Secret 会出现在预期的 namespace 中
验证工作负载影响
无论你使用哪个视图,还需要确认:
- 引用该 Secret 的工作负载仍然位于与该 Secret 相同的 namespace 中
- 所需的 Pod 重建、滚动更新、重启或镜像拉取重新验证已经完成
- 删除该 Secret 不会因为缺少引用而破坏后续的工作负载启动、挂载或镜像拉取
在删除平台生成的或对工作负载至关重要的 Secret 之前,请务必格外谨慎。