Kubernetes v1.35:通过 exec 插件 allowList 限制 kubeconfigs 调用的可执行文件(已添加到 kuberc)

发布: (2026年1月10日 GMT+8 02:30)
3 min read

Source: Kubernetes Blog

概览

Kubernetes v1.35 引入了凭证插件策略和白名单,允许您限制 kubeconfig 中 exec 插件定义的可执行文件由 kubectl 运行。这有助于缓解供应链攻击——即受损的 kubeconfig 可能在客户端机器上调用任意代码的风险。

工作原理

该功能在官方 kuberc 参考文档中有说明。它在 Kubernetes 1.35 中作为 beta 特性提供,无需任何功能门控。

默认行为

如果您未添加任何新字段,kubectl 的行为保持不变,所有凭证插件均被允许。

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference

显式允许全部

您可以通过将策略设置为 AllowAll 来显式声明默认行为。

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: AllowAll

拒绝全部(调试)

如果不确定您的 kubeconfig 是否使用了 exec 凭证插件,可将策略设为 DenyAllkubectl 将拒绝任何插件执行,并显示它本来会尝试运行的插件。

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: DenyAll

使用该策略运行命令时会产生类似以下的错误:

Unable to connect to the server: getting credentials: plugin "cloudco-login" not allowed: policy set to "DenyAll"

kubectl 的详细程度调高以获取更多细节:

kubectl get pods --v=5

有选择地允许插件

当您只需要特定插件时,使用 Allowlist 策略并列出被允许的可执行文件。

apiVersion: kubectl.config.k8s.io/v1beta1
kind: Preference
credentialPluginPolicy: Allowlist
credentialPluginAllowlist:
  - name: /usr/local/bin/cloudco-login   # 完整路径
  - name: get-identity                  # 基础名称,通过 exec.LookPath 解析
  • 完整路径 条目更受推荐,因为它们能够缩小允许的二进制范围。
  • 基础名称 条目通过 exec.LookPath 解析;不支持通配符或模式匹配。

未来改进

当前的白名单条目仅包含 name 字段。计划中的改进包括:

  • 校验和验证 – 仅在二进制文件的 SHA‑256 哈希与已知值匹配时才允许,例如:

    sha256: b9a3fad00d848ff31960c44ebb5f8b92032dc085020f857c98e32a5d5900ff9c
    path: /usr/bin/cloudco-login
  • 签名二进制 – 限制只能执行由受信任密钥签名的二进制文件。

参与贡献

凭证插件策略仍在不断演进中,SIG(SIG‑CLI、SIG‑AUTH)欢迎反馈和贡献。加入 Kubernetes Slack 频道参与讨论:

  • #sig-cli
  • #sig-auth
Back to Blog

相关文章

阅读更多 »

StatefulSet 项目

先决条件:StatefulSet 需要以下组件: - Headless Service —— 为每个 pod 提供稳定的 DNS。 - StatefulSet manifest —— 定义 pod……