Skip to content

Commit

Permalink
[zh] Tweak kubelet credential provider
Browse files Browse the repository at this point in the history
  • Loading branch information
tengqm committed Aug 7, 2022
1 parent 62f72f3 commit 743cf44
Showing 1 changed file with 38 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ Kubernetes versioned APIs. These plugins allow the kubelet to request credential
as opposed to storing static credentials on disk. For example, the plugin may talk to a local metadata server to retrieve
short-lived credentials for an image that is being pulled by the kubelet.
-->
从 Kubernetes v1.20 开始,kubelet 可以使用 exec 插件动态检索容器镜像注册中心的凭据。
kubelet 和 exec 插件使用 Kubernetes 版本化 API 通过标准输入输出(标准输入、标准输出和标准错误)通信。
这些插件允许 kubelet 动态请求容器注册中心的凭据,而不是将静态凭据存储在磁盘上。
例如,插件可能会与本地元数据通信,以检索 kubelet 正在拉取的镜像的短期凭据。
从 Kubernetes v1.20 开始,kubelet 可以使用 exec 插件动态获得针对某容器镜像库的凭据。
kubelet 使用 Kubernetes 版本化 API 通过标准输入输出(标准输入、标准输出和标准错误)
和 exec 插件通信。
这些插件允许 kubelet 动态请求容器仓库的凭据,而不是将静态凭据存储在磁盘上。
例如,插件可能会与本地元数据服务器通信,以获得 kubelet 正在拉取的镜像的短期凭据。

<!--
You may be interested in using this capability if any of the below are true:
Expand All @@ -40,9 +41,9 @@ This guide demonstrates how to configure the kubelet's image credential provider
-->
如果以下任一情况属实,你可能对此功能感兴趣:

* 需要调用云提供商的 API 来检索注册中心的身份验证信息
* 需要调用云提供商的 API 来获得镜像库的身份验证信息
* 凭据的到期时间很短,需要频繁请求新凭据。
* 将注册中心凭据存储在磁盘或者 imagePullSecret 是不可接受的。
* 将镜像库凭据存储在磁盘或者 imagePullSecret 是不可接受的。

## {{% heading "prerequisites" %}}

Expand All @@ -51,9 +52,10 @@ This guide demonstrates how to configure the kubelet's image credential provider
a feature gate `KubeletCredentialProviders` must be enabled on only the kubelet for the feature to work.
* A working implementation of a credential provider exec plugin. You can build your own plugin or use one provided by cloud providers.
-->
* kubelet 镜像凭证提供程序在 v1.20 版本作为 alpha 功能引入。
与其他 alpha 功能一样,当前仅当在 kubelet 启动 `KubeletCredentialProviders` 特性门禁才能使该功能正常工作。
* 凭据提供程序 exec 插件的工作实现。你可以构建自己的插件或使用云提供商提供的插件。
* kubelet 镜像凭证提供程序在 v1.20 版本作为 Alpha 特性引入。
与其他 Alpha 功能一样,当前仅当在 kubelet 启用 `KubeletCredentialProviders`
特性门控时,该功能才能正常工作。
* 凭据提供程序 exec 插件的一种可用的实现。你可以构建自己的插件或使用云提供商提供的插件。

<!-- steps -->

Expand All @@ -66,7 +68,7 @@ every node in your cluster and stored in a known directory. The directory will b
## 在节点上安装插件 {#installing-plugins-on-nodes}

凭据提供程序插件是将由 kubelet 运行的可执行二进制文件。
确保插件二进制存在于你的集群的每个节点上,并存储在已知目录中。
你需要确保插件可执行文件存在于你的集群的每个节点上,并存储在已知目录中。
稍后配置 kubelet 标志需要该目录。

<!--
Expand All @@ -82,7 +84,7 @@ In order to use this feature, the kubelet expects two flags to be set:
为了使用这个特性,kubelet 需要设置以下两个标志:

* `--image-credential-provider-config` —— 凭据提供程序插件配置文件的路径。
* `--image-credential-provider-bin-dir` —— 凭据提供程序插件二进制文件所在目录的路径
* `--image-credential-provider-bin-dir` —— 凭据提供程序插件二进制可执行文件所在目录的路径

<!--
### Configure a kubelet credential provider
Expand All @@ -93,7 +95,7 @@ should be invoked for which container images. Here's an example configuration fi
-->
### 配置 kubelet 凭据提供程序 {#configure-a-kubelet-credential-provider}

kubelet 会读取传入 `--image-credential-provider-config` 的配置文件
kubelet 会读取通过 `--image-credential-provider-config` 设定的配置文件
以确定应该为哪些容器镜像调用哪些 exec 插件。
如果你正在使用基于 [ECR](https://aws.amazon.com/ecr/) 的插件,
这里有个样例配置文件你可能最终会使用到:
Expand All @@ -103,7 +105,7 @@ apiVersion: kubelet.config.k8s.io/v1alpha1
kind: CredentialProviderConfig
# providers 是将由 kubelet 启用的凭证提供程序插件列表。
# 多个提供程序可能与单个镜像匹配,在这种情况下,来自所有提供程序的凭据将返回到 kubelet。
# 如果为单个镜像调用多个提供程序,则结果会合并
# 如果为单个镜像调用了多个提供程序,则返回结果会被合并
# 如果提供程序返回重叠的身份验证密钥,则使用提供程序列表中较早的值。
providers:
# name 是凭据提供程序的必需名称。
Expand All @@ -115,18 +117,20 @@ providers:
# 如果其中一个字符串与 kubelet 请求的镜像相匹配,则该插件将被调用并有机会提供凭据。
# 镜像应包含注册域和 URL 路径。
#
# matchImages 中的每个条目都是一个模式,可以选择包含端口和路径。
# 通配符可以在域中使用,但不能在端口或路径中使用。
# 支持通配符作为子域(例如*.k8s.io”或“k8s.*.io)和顶级域(例如k8s.*)。
# 还支持匹配部分子域,如app*.k8s.io
# 每个通配符只能匹配一个子域段,因此 *.io 不匹配 *.k8s.io。
# matchImages 中的每个条目都是一个模式字符串,可以选择包含端口和路径。
# 可以在域中使用通配符,但不能在端口或路径中使用。
# 支持通配符作为子域(例如 "*.k8s.io" 或 "k8s.*.io")和顶级域(例如 "k8s.*")。
# 还支持匹配部分子域,如 "app*.k8s.io"
# 每个通配符只能匹配一个子域段,因此 "*.io" 不匹配 "*.k8s.io"
#
# 当以下所有条件都为真时,镜像和 matchImage 之间存在匹配:
#
# - 两者都包含相同数量的域部分并且每个部分都匹配。
# - imageMatch 的 URL 路径必须是目标镜像 URL 路径的前缀。
# - 如果 imageMatch 包含端口,则该端口也必须在图像中匹配
# - 如果 imageMatch 包含端口,则该端口也必须在镜像中匹配
#
# matchImages 的示例值:
#
# - 123456789.dkr.ecr.us-east-1.amazonaws.com
# - *.azurecr.io
# - gcr.io
Expand All @@ -138,20 +142,20 @@ providers:
- "*.dkr.ecr-fips.*.amazonaws.com"
- "*.dkr.ecr.us-iso-east-1.c2s.ic.gov"
- "*.dkr.ecr.us-isob-east-1.sc2s.sgov.gov"
# defaultCacheDuration 是插件将在内存中缓存凭据的默认持续时间
# defaultCacheDuration 是插件将在内存中缓存凭据的默认持续时间
# 如果插件响应中未提供缓存持续时间。此字段是必需的。
defaultCacheDuration: "12h"
# exec CredentialProviderRequest 的必需输入版本。
# 返回的 CredentialProviderResponse 必须使用与输入相同的编码版本。当前支持的值为:
# - credentialprovider.kubelet.k8s.io/v1alpha1
apiVersion: credentialprovider.kubelet.k8s.io/v1alpha1
# 执行命令时传递给命令的参数。
# +可选
# 可选
args:
- get-credentials
# env 定义了额外的环境变量以暴露给进程。
# 这些与主机环境以及 client-go 用于将参数传递给插件的变量结合在一起。
# +可选
# 可选
env:
- name: AWS_PROFILE
value: example_profile
Expand All @@ -171,16 +175,17 @@ The `providers` field is a list of enabled plugins used by the kubelet. Each ent
Each credential provider can also be given optional args and environment variables as well.
Consult the plugin implementors to determine what set of arguments and environment variables are required for a given plugin.
-->
`providers` 字段是 kubelet 使用的已启用插件列表。每个条目都有几个必填字段:
`providers` 字段是 kubelet 所使用的已启用插件列表。每个条目都有几个必填字段:

* `name`:插件的名称,必须与传入`--image-credential-provider-bin-dir`
的目录中存在的可执行二进制文件的名称相匹配。
* `matchImages`:用于匹配镜像以确定是否应调用此提供程序的字符串列表。更多相关信息如下。
* `defaultCacheDuration`:如果插件未指定缓存持续时间,kubelet 将在内存中缓存凭据的默认持续时间。
* `matchImages`:字符串列表,用于匹配镜像以确定是否应调用此提供程序。
更多相关信息参见后文。
* `defaultCacheDuration`:如果插件未指定缓存时长,kubelet 将在内存中缓存凭据的默认时长。
* `apiVersion`:kubelet 和 exec 插件在通信时将使用的 API 版本。

每个凭证提供程序也可以被赋予可选的参数和环境变量。
咨询插件实现者以确定给定插件需要哪些参数和环境变量集
你可以咨询插件实现者以确定给定插件需要哪些参数和环境变量集

<!--
#### Configure image matching
Expand All @@ -193,9 +198,10 @@ a single subdomain segment, so `*.io` does NOT match `*.k8s.io`.
-->
#### 配置镜像匹配 {#configure-image-matching}

kubelet 使用每个凭证提供程序的 `matchImages` 字段来确定是否应该为 Pod 正在使用的给定镜像调用插件。
`matchImages` 中的每个条目都是一个镜像模式,可以选择包含端口和路径。
通配符可以在域中使用,但不能在端口或路径中使用。
kubelet 使用每个凭证提供程序的 `matchImages` 字段来确定是否应该为 Pod
正在使用的给定镜像调用插件。
`matchImages` 中的每个条目都是一个镜像模式字符串,可以选择包含端口和路径。
可以在域中使用通配符,但不能在端口或路径中使用。
支持通配符作为子域,如 `*.k8s.io` 或 `k8s.*.io`,以及顶级域,如 `k8s.*`。
还支持匹配部分子域,如 `app*.k8s.io`。每个通配符只能匹配一个子域段,
因此 `*.io` 不匹配 `*.k8s.io`。
Expand Down Expand Up @@ -230,6 +236,7 @@ Some example values of `matchImages` patterns are:
[kubelet configuration API (v1alpha1) reference](/docs/reference/config-api/kubelet-config.v1alpha1/).
* Read the [kubelet credential provider API reference (v1alpha1)](/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/).
-->
* 阅读 [kubelet 配置 API (v1alpha1) 参考](/zh-cn/docs/reference/config-api/kubelet-config.v1alpha1/)中有关 `CredentialProviderConfig` 的详细信息。
* 阅读 [kubelet 凭据提供程序 API 参考 (v1alpha1)](/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/)。
* 阅读 [kubelet 配置 API (v1alpha1) 参考](/zh-cn/docs/reference/config-api/kubelet-config.v1alpha1/)中有关
`CredentialProviderConfig` 的详细信息。
* 阅读 [kubelet 凭据提供程序 API 参考 (v1alpha1)](/zh-cn/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/)。

0 comments on commit 743cf44

Please sign in to comment.