Merge pull request #35284 from windsonsea/secretyhf

[zh-cn] updated /concepts/configuration/secret.md
This commit is contained in:
Kubernetes Prow Robot
2022-07-23 10:42:56 -07:00
committed by GitHub
@@ -4,7 +4,7 @@ content_type: concept
feature: feature:
title: Secret 和配置管理 title: Secret 和配置管理
description: > description: >
部署和更新 Secrets 和应用程序的配置而不必重新构建容器镜像,且 部署和更新 Secret 和应用程序的配置而不必重新构建容器镜像,且
不必将软件堆栈配置中的秘密信息暴露出来。 不必将软件堆栈配置中的秘密信息暴露出来。
weight: 30 weight: 30
--- ---
@@ -295,7 +295,7 @@ You can package many keys and values into one Secret, or use many Secrets, which
--> -->
这一示例清单定义了一个 Secret,其 `data` 字段中包含两个主键:`username``password` 这一示例清单定义了一个 Secret,其 `data` 字段中包含两个主键:`username``password`
清单中的字段值是 Base64 字符串,不过,当你在 Pod 中使用 Secret 时,kubelet 为 Pod 清单中的字段值是 Base64 字符串,不过,当你在 Pod 中使用 Secret 时,kubelet 为 Pod
及其中的容器提供的是解码后的数据。 及其中的容器提供的是**解码**后的数据。
你可以在一个 Secret 中打包多个主键和数值,也可以选择使用多个 Secret, 你可以在一个 Secret 中打包多个主键和数值,也可以选择使用多个 Secret,
完全取决于哪种方式最方便。 完全取决于哪种方式最方便。
@@ -437,7 +437,7 @@ invalidated when the Pod they are mounted into is deleted.
Kubernetes v1.22 版本之前都会自动创建用来访问 Kubernetes API 的凭证。 Kubernetes v1.22 版本之前都会自动创建用来访问 Kubernetes API 的凭证。
这一老的机制是基于创建可被挂载到 Pod 中的令牌 Secret 来实现的。 这一老的机制是基于创建可被挂载到 Pod 中的令牌 Secret 来实现的。
在最近的版本中,包括 Kubernetes v{{< skew currentVersion >}} 中,API 凭据是直接通过 在最近的版本中,包括 Kubernetes v{{< skew currentVersion >}} 中,API 凭据是直接通过
[TokenRequest](/docs/reference/kubernetes-api/authentication-resources/token-request-v1/) [TokenRequest](/zh-cn/docs/reference/kubernetes-api/authentication-resources/token-request-v1/)
API 来获得的,这一凭据会使用[投射卷](/zh-cn/docs/reference/access-authn-authz/service-accounts-admin/#bound-service-account-token-volume) API 来获得的,这一凭据会使用[投射卷](/zh-cn/docs/reference/access-authn-authz/service-accounts-admin/#bound-service-account-token-volume)
挂载到 Pod 中。使用这种方式获得的令牌有确定的生命期,并且在挂载它们的 Pod 挂载到 Pod 中。使用这种方式获得的令牌有确定的生命期,并且在挂载它们的 Pod
被删除时自动作废。 被删除时自动作废。
@@ -452,7 +452,7 @@ command to obtain a token from the `TokenRequest` API.
--> -->
你仍然可以[手动创建](/zh-cn/docs/tasks/configure-pod-container/configure-service-account/#manually-create-a-service-account-api-token) 你仍然可以[手动创建](/zh-cn/docs/tasks/configure-pod-container/configure-service-account/#manually-create-a-service-account-api-token)
服务账号令牌。例如,当你需要一个永远都不过期的令牌时。 服务账号令牌。例如,当你需要一个永远都不过期的令牌时。
不过,仍然建议使用 [TokenRequest](/docs/reference/kubernetes-api/authentication-resources/token-request-v1/) 不过,仍然建议使用 [TokenRequest](/zh-cn/docs/reference/kubernetes-api/authentication-resources/token-request-v1/)
子资源来获得访问 API 服务器的令牌。 子资源来获得访问 API 服务器的令牌。
你可以使用 [`kubectl create token`](/docs/reference/generated/kubectl/kubectl-commands#-em-token-em-) 你可以使用 [`kubectl create token`](/docs/reference/generated/kubectl/kubectl-commands#-em-token-em-)
命令调用 `TokenRequest` API 获得令牌。 命令调用 `TokenRequest` API 获得令牌。
@@ -845,7 +845,7 @@ level.
### 容器镜像拉取 Secret {#using-imagepullsecrets} ### 容器镜像拉取 Secret {#using-imagepullsecrets}
如果你尝试从私有仓库拉取容器镜像,你需要一种方式让每个节点上的 kubelet 如果你尝试从私有仓库拉取容器镜像,你需要一种方式让每个节点上的 kubelet
能够完成与镜像库的身份认证。你可以配置 *镜像拉取 Secret* 来实现这点。 能够完成与镜像库的身份认证。你可以配置 **镜像拉取 Secret** 来实现这点。
Secret 是在 Pod 层面来配置的。 Secret 是在 Pod 层面来配置的。
<!-- <!--
@@ -859,7 +859,7 @@ for more information about the `imagePullSecrets` field.
Pod 的 `imagePullSecrets` 字段是一个对 Pod 所在的名字空间中的 Secret Pod 的 `imagePullSecrets` 字段是一个对 Pod 所在的名字空间中的 Secret
的引用列表。你可以使用 `imagePullSecrets` 来将镜像仓库访问凭据传递给 kubelet。 的引用列表。你可以使用 `imagePullSecrets` 来将镜像仓库访问凭据传递给 kubelet。
kubelet 使用这个信息来替你的 Pod 拉取私有镜像。 kubelet 使用这个信息来替你的 Pod 拉取私有镜像。
参阅 [Pod API 参考](/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) 参阅 [Pod API 参考](/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec)
中的 `PodSpec` 进一步了解 `imagePullSecrets` 字段。 中的 `PodSpec` 进一步了解 `imagePullSecrets` 字段。
<!-- <!--
@@ -875,7 +875,7 @@ See the [PodSpec API](/docs/reference/generated/kubernetes-api/{{< param "versio
`imagePullSecrets` 字段是一个列表,包含对同一名字空间中 Secret 的引用。 `imagePullSecrets` 字段是一个列表,包含对同一名字空间中 Secret 的引用。
你可以使用 `imagePullSecrets` 将包含 Docker(或其他)镜像仓库密码的 Secret 你可以使用 `imagePullSecrets` 将包含 Docker(或其他)镜像仓库密码的 Secret
传递给 kubelet。kubelet 使用此信息来替 Pod 拉取私有镜像。 传递给 kubelet。kubelet 使用此信息来替 Pod 拉取私有镜像。
参阅 [PodSpec API ](/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) 参阅 [PodSpec API ](/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec)
进一步了解 `imagePullSecrets` 字段。 进一步了解 `imagePullSecrets` 字段。
<!-- <!--
@@ -1113,7 +1113,7 @@ secret "test-db-secret" created
Special characters such as `$`, `\`, `*`, `=`, and `!` will be interpreted by your [shell](https://en.wikipedia.org/wiki/Shell_(computing)) and require escaping. Special characters such as `$`, `\`, `*`, `=`, and `!` will be interpreted by your [shell](https://en.wikipedia.org/wiki/Shell_(computing)) and require escaping.
--> -->
特殊字符(例如 `$``\``*``=``!`)会被你的 特殊字符(例如 `$``\``*``=``!`)会被你的
[Shell](https://en.wikipedia.org/wiki/Shell_(computing))解释,因此需要转义。 [Shell](https://zh.wikipedia.org/wiki/Shell_(computing)) 解释,因此需要转义。
<!-- <!--
In most shells, the easiest way to escape the password is to surround it with single quotes (`'`). In most shells, the easiest way to escape the password is to surround it with single quotes (`'`).
@@ -1355,7 +1355,7 @@ Kubernetes imposes on them.
--> -->
## Secret 的类型 {#secret-types} ## Secret 的类型 {#secret-types}
创建 Secret 时,你可以使用 [Secret](/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1/) 创建 Secret 时,你可以使用 [Secret](/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1/)
资源的 `type` 字段,或者与其等价的 `kubectl` 命令行参数(如果有的话)为其设置类型。 资源的 `type` 字段,或者与其等价的 `kubectl` 命令行参数(如果有的话)为其设置类型。
Secret 类型有助于对 Secret 数据进行编程处理。 Secret 类型有助于对 Secret 数据进行编程处理。
@@ -1420,8 +1420,8 @@ command creates an empty Secret of type `Opaque`.
### Opaque Secret ### Opaque Secret
当 Secret 配置文件中未作显式设定时,默认的 Secret 类型是 `Opaque` 当 Secret 配置文件中未作显式设定时,默认的 Secret 类型是 `Opaque`
当你使用 `kubectl` 来创建一个 Secret 时,你会使用 `generic` 子命令来标明 当你使用 `kubectl` 来创建一个 Secret 时,你会使用 `generic`
要创建的是一个 `Opaque` 类型 Secret。 子命令来标明要创建的是一个 `Opaque` 类型 Secret。
例如,下面的命令会创建一个空的 `Opaque` 类型 Secret 对象: 例如,下面的命令会创建一个空的 `Opaque` 类型 Secret 对象:
```shell ```shell
@@ -1626,11 +1626,10 @@ server doesn't validate if the JSON actually is a Docker config file.
When you do not have a Docker config file, or you want to use `kubectl` When you do not have a Docker config file, or you want to use `kubectl`
to create a Secret for accessing a container registry, you can do: to create a Secret for accessing a container registry, you can do:
--> -->
当你使用清单文件来创建这两类 Secret 时,API 服务器会检查 `data` 字段中是否 当你使用清单文件来创建这两类 Secret 时,API 服务器会检查 `data` 字段中是否存在所期望的主键,
存在所期望的主键,并且验证其中所提供的键值是否是合法的 JSON 数据。 并且验证其中所提供的键值是否是合法的 JSON 数据。
不过,API 服务器不会检查 JSON 数据本身是否是一个合法的 Docker 配置文件内容。 不过,API 服务器不会检查 JSON 数据本身是否是一个合法的 Docker 配置文件内容。
当你没有 Docker 配置文件,或者你想使用 `kubectl` 创建一个 Secret 当你没有 Docker 配置文件,或者你想使用 `kubectl` 创建一个 Secret
来访问容器倉庫时,你可以这样做: 来访问容器倉庫时,你可以这样做:
@@ -1750,8 +1749,8 @@ key authentication:
--> -->
### SSH 身份认证 Secret {#ssh-authentication-secrets} ### SSH 身份认证 Secret {#ssh-authentication-secrets}
Kubernetes 所提供的内置类型 `kubernetes.io/ssh-auth` 用来存放 SSH 身份认证中 Kubernetes 所提供的内置类型 `kubernetes.io/ssh-auth` 用来存放 SSH 身份认证中所需要的凭据。
所需要的凭据。使用这种 Secret 类型时,你就必须在其 `data` (或 `stringData` 使用这种 Secret 类型时,你就必须在其 `data` (或 `stringData`
字段中提供一个 `ssh-privatekey` 键值对,作为要使用的 SSH 凭据。 字段中提供一个 `ssh-privatekey` 键值对,作为要使用的 SSH 凭据。
下面的清单是一个 SSH 公钥/私钥身份认证的 Secret 示例: 下面的清单是一个 SSH 公钥/私钥身份认证的 Secret 示例:
@@ -1900,8 +1899,8 @@ well-known ConfigMaps.
--> -->
### 启动引导令牌 Secret {#bootstrap-token-secrets} ### 启动引导令牌 Secret {#bootstrap-token-secrets}
通过将 Secret 的 `type` 设置为 `bootstrap.kubernetes.io/token` 可以创建 通过将 Secret 的 `type` 设置为 `bootstrap.kubernetes.io/token`
启动引导令牌类型的 Secret。这种类型的 Secret 被设计用来支持节点的启动引导过程。 可以创建启动引导令牌类型的 Secret。这种类型的 Secret 被设计用来支持节点的启动引导过程。
其中包含用来为周知的 ConfigMap 签名的令牌。 其中包含用来为周知的 ConfigMap 签名的令牌。
<!-- <!--
@@ -1913,8 +1912,8 @@ As a Kubernetes manifest, a bootstrap token Secret might look like the
following: following:
--> -->
启动引导令牌 Secret 通常创建于 `kube-system` 名字空间内,并以 启动引导令牌 Secret 通常创建于 `kube-system` 名字空间内,并以
`bootstrap-token-<令牌 ID>` 的形式命名;其中 `<令牌 ID>` 是一个由 6 个字符组成 `bootstrap-token-<令牌 ID>` 的形式命名;
的字符串,用作令牌的标识。 其中 `<令牌 ID>` 是一个由 6 个字符组成的字符串,用作令牌的标识。
以 Kubernetes 清单文件的形式,某启动引导令牌 Secret 可能看起来像下面这样: 以 Kubernetes 清单文件的形式,某启动引导令牌 Secret 可能看起来像下面这样: