2.3.6. 输入 secret 和配置映射
有时候,构建操作需要凭证或其他配置数据才能访问依赖的资源,但又不希望将这些信息放在源代码控制中。您可以定义输入 secret 和输入配置映射。
例如,在使用 Maven 构建 Java 应用程序时,可以设置通过私钥访问的 Maven Central 或 JCenter 的私有镜像。要从该私有镜像下载库,您必须提供以下内容:
-
配置了镜像的 URL 和连接设置的
settings.xml文件。 -
设置文件中引用的私钥,例如
~/.ssh/id_rsa。
为安全起见,不应在应用程序镜像中公开您的凭证。
示例中描述的是 Java 应用程序,但您可以使用相同的方法将 SSL 证书添加到 /etc/ssl/certs 目录,以及添加 API 密钥或令牌、许可证文件等。
2.3.6.1. 什么是 secret? 复制链接链接已复制到粘贴板!
Secret 对象类型提供了一种机制来保存敏感信息,如密码、OpenShift Container Platform 客户端配置文件、dockercfg 文件和私有源存储库凭证等。secret 将敏感内容与 Pod 分离。您可以使用卷插件将 secret 信息挂载到容器中,系统也可以使用 secret 代表 Pod 执行操作。
YAML Secret 对象定义
apiVersion: v1
kind: Secret
metadata:
name: test-secret
namespace: my-namespace
type: Opaque
data:
username: dmFsdWUtMQ0K
password: dmFsdWUtMg0KDQo=
stringData:
hostname: myapp.mydomain.com
2.3.6.1.1. secret 的属性 复制链接链接已复制到粘贴板!
主要属性包括:
- Secret 数据可以独立于其定义来引用。
- Secret 数据卷由临时文件工具 (tmpfs) 支持,永远不会停留在节点上。
- secret 数据可以在命名空间内共享。
2.3.6.1.2. secret 的类型 复制链接链接已复制到粘贴板!
type 字段中的值指明 secret 的键名称和值的结构。此类型可用于强制使 secret 对象中存在用户名和密钥。如果您不想进行验证,请使用 opaque 类型,这也是默认类型。
指定以下一种类型来触发最小服务器端验证,确保 secret 数据中存在特定的键名称:
-
kubernetes.io/service-account-token。使用服务帐户令牌。 -
kubernetes.io/dockercfg。将.dockercfg文件用于所需的 Docker 凭证。 -
kubernetes.io/dockerconfigjson。将.docker/config.json文件用于所需的 Docker 凭证。 -
kubernetes.io/basic-auth。与基本身份验证搭配使用。 -
kubernetes.io/ssh-auth。搭配 SSH 密钥身份验证使用。 -
kubernetes.io/tls。搭配 TLS 证书颁发机构使用。
如果不想进行验证,设置 type= Opaque。这意味着,secret 不声明符合键名称或值的任何约定。opaque secret 允许使用无结构 key:value 对,可以包含任意值。
您可以指定其他任意类型,如 example.com/my-secret-type。这些类型不在服务器端强制执行,但代表 secret 的创建者意在符合该类型的键/值要求。
2.3.6.1.3. 更新 secret 复制链接链接已复制到粘贴板!
当修改 secret 的值时,已在被运行的 Pod 使用的 secret 值不会被动态更新。要更改 secret,必须删除原始 pod 并创建一个新 pod,在某些情况下,具有相同的 PodSpec。
更新 secret 遵循与部署新容器镜像相同的工作流。您可以使用 kubectl rolling-update 命令。
secret 中的 resourceVersion 值不在引用时指定。因此,如果在 pod 启动的同时更新 secret,则将不能定义用于 pod 的 secret 版本。
目前,无法检查 Pod 创建时使用的 secret 对象的资源版本。按照计划 Pod 将报告此信息,以便控制器可以重启使用旧 resourceVersion 的 Pod。在此期间,请勿更新现有 secret 的数据,而应创建具有不同名称的新数据。