此文档中的信息可能已过时

此文档的更新日期比原文晚,因此其中的信息可能已过时。如果能阅读英文,请查看英文版本以获取最新信息: Kubelet Configuration (v1)

Kubelet 配置 (v1)

资源类型

CredentialProviderConfig

CredentialProviderConfig 包含有关每个 exec 凭据提供程序的配置信息。 Kubelet 从磁盘上读取这些配置信息,并根据 CredentialProvider 类型启用各个提供程序。

字段描述
apiVersion
string
kubelet.config.k8s.io/v1
kind
string
CredentialProviderConfig
providers [必需]
[]CredentialProvider

providers 是一组凭据提供程序插件,这些插件会被 kubelet 启用。 多个提供程序可以匹配到同一镜像上,这时,来自所有提供程序的凭据信息都会返回给 kubelet。 如果针对同一镜像调用了多个提供程序,则结果会被组合起来。如果提供程序返回的认证主键有重复, 列表中先出现的提供程序所返回的值将被首先尝试。

CredentialProvider

出现在:

CredentialProvider 代表的是要被 kubelet 调用的一个 exec 插件。 这一插件只会在所拉取的镜像与该插件所处理的镜像匹配时才会被调用(参见 matchImages)。

字段描述
name [必需]
string

name 是凭据提供程序的名称(必需)。此名称必须与 kubelet 所看到的提供程序可执行文件的名称匹配。可执行文件必须位于 kubelet 的 bin 目录(通过 --image-credential-provider-bin-dir 设置)下。 在所有提供程序中,名称是唯一的。

matchImages [必需]
[]string

matchImages 是一个必须设置的字符串列表,用来匹配镜像以便确定是否要调用此提供程序。 如果字符串之一与 kubelet 所请求的镜像匹配,则此插件会被调用并给予提供凭据的机会。 镜像应该包含镜像库域名和 URL 路径。

matchImages 中的每个条目都是一个模式字符串,其中可以包含端口号和路径。 域名部分可以包含通配符,但端口或路径部分不可以。'*.k8s.io' 或 'k8s.*.io' 等子域名以及 'k8s.*' 这类顶级域名都支持通配符。

对于 'app.k8s.io' 这类部分子域名的匹配也是支持的。 每个通配符只能用来匹配一个子域名段,所以 *.io 不会匹配 *.k8s.io。

镜像与 matchImages 之间存在匹配时,以下条件都要满足:

  • 二者均包含相同个数的域名部分,并且每个域名部分都对应匹配;
  • matchImages 条目中的 URL 路径部分必须是目标镜像的 URL 路径的前缀;
  • 如果 matchImages 条目中包含端口号,则端口号也必须与镜像端口号匹配。

matchImages 的一些示例如下:

  • 123456789.dkr.ecr.us-east-1.amazonaws.com
  • *.azurecr.io
  • gcr.io
  • *.*.registry.io
  • registry.io:8080/path
defaultCacheDuration [必需]
meta/v1.Duration

defaultCacheDuration 是插件在内存中缓存凭据的默认时长, 在插件响应中没有给出缓存时长时,使用这里设置的值。此字段是必需的。

apiVersion [必需]
string

要求 exec 插件 CredentialProviderRequest 请求的输入版本。 所返回的 CredentialProviderResponse 必须使用与输入相同的编码版本。当前支持的值有:

  • credentialprovider.kubelet.k8s.io/v1
args
[]string

在执行插件可执行文件时要传递给命令的参数。

env
[]ExecEnvVar

env 定义要提供给插件进程的额外的环境变量。 这些环境变量会与主机上的其他环境变量以及 client-go 所使用的环境变量组合起来, 一起传递给插件。

tokenAttributes
ServiceAccountTokenAttributes

tokenAttributes 是将传递给插件的服务账号令牌的配置。 凭据提供程序通过设置此字段选择使用服务账号令牌进行镜像拉取。 当设置了此字段后,kubelet 将为正在拉取镜像的 Pod 生成一个绑定到此 Pod 的服务账号令牌, 并将其作为 CredentialProviderRequest 的一部分传递给插件,同时传递插件所需的其他属性。

服务账号的元数据和令牌属性将作为 kubelet 中缓存凭据的一个维度。 缓存键由服务账号的元数据(命名空间、名称、UID 以及 serviceAccountTokenAttribute.requiredServiceAccountAnnotationKeys 和 serviceAccountTokenAttribute.optionalServiceAccountAnnotationKeys 中定义的注解键及其对应的值)组合生成。 服务账号令牌中的 Pod 元数据(命名空间、名称、UID)不会作为 kubelet 缓存凭据的维度。 这意味着,使用相同服务账号的工作负载可能会共用相同的凭据进行镜像拉取。 对于不希望出现此行为的插件,或者以直通模式运行的插件(即直接返回服务账号令牌而不做处理),可以将 credentialProviderResponse.cacheDuration 设置为 0。这一设置将禁用 kubelet 中凭据的缓存机制, 每次镜像拉取时都会调用插件。虽然这样设置会导致每次镜像拉取时都要重新生成令牌,因而带来额外开销, 但这是确保凭据不会在使用相同服务账号的多个 Pod 之间共享的唯一方式。

ExecEnvVar

出现在:

ExecEnvVar 用来在执行基于 exec 的凭据插件时设置环境变量。

字段描述
name [必需]
string
环境变量名称
value [必需]
string
环境变量取值

ServiceAccountTokenAttributes

出现在

ServiceAccountTokenAttributes 是将被传递给插件的服务账号令牌的配置。

字段描述
serviceAccountTokenAudience [必需]
string

serviceAccountTokenAudience 是投射的服务账号令牌的目标受众。

requireServiceAccount [必需]
bool

requireServiceAccount 指示插件是否需要 Pod 拥有服务帐号。 如果设置为 true,kubelet 仅在 Pod 拥有服务账号时才会调用插件。 如果设置为 false,即使 Pod 没有服务账号,kubelet 也会调用插件, 并且不会在 CredentialProviderRequest 中包含令牌。 这对于用于拉取没有服务账号的 Pod(例如静态 Pod)镜像的插件非常有用。

requiredServiceAccountAnnotationKeys
[]string

requiredServiceAccountAnnotationKeys 是插件感兴趣的注解键列表;这些键需要存在于服务帐号中。 在此列表中定义的键将从相应的服务帐号中提取,并作为 CredentialProviderRequest 的一部分传递给插件。 如果此列表中定义的任何一个键不存在于服务账号中,kubelet 将不会调用插件并返回错误。 此字段是可选的,可以为空。插件可以使用此字段提取获取凭据所需的额外信息, 或允许工作负载选择使用服务帐号令牌进行镜像拉取。 如果非空,则 requireServiceAccount 必须设置为 true。

optionalServiceAccountAnnotationKeys
[]string

optionalServiceAccountAnnotationKeys 是插件感兴趣的注解键列表,并且这些键在服务帐号中是可选存在的。 在此列表中定义的键将从相应的服务账号中提取,并作为 CredentialProviderRequest 的一部分传递给插件。 插件负责验证注解及其值的存在性。此字段是可选的,可以为空。 插件可以使用此字段提取获取凭据所需的额外信息。

最后修改 May 07, 2025 at 9:22 AM PST: [zh] Sync config-api/kubelet-config.v1.md (3e487619f1)