[转载] Kubernetes v1.36:混合版本代理升级到 Beta

举报
yd_266879620 发表于 2026/11/15 01:14:55 2026/11/15
【摘要】 早在 Kubernetes 1.28 中, 我们在 之前的博客文章 中引入了 Mixed Version Proxy (MVP) 作为 Alpha 特性(在特性门控 UnknownVersionInteroperabilityProxy 下)。 目标简单但关键:通过确保对旧版 API 服务器尚不了解的资源请求被正确路由到较新的对等 API 服务器, 而不是返回不正确的 404 Not Fou...

本文为授权转载,非本账号原创。

原文:Kubernetes v1.36:混合版本代理升级到 Beta(参考地址:https://kubernetes.io/zh-cn/blog/2026/05/15/kubernetes-1-36-feature-mixed-version-proxy-beta/)

原作者及译者:借由 Richa Banker (Google) | 译者 Xin Li (DaoCloud) | 2026.05.15

来源:Kubernetes 官方中文博客;许可:CC BY 4.0(参考地址:https://creativecommons.org/licenses/by/4.0/)。保留原作者和译者署名,正文仅做适配博客编辑器的排版与链接格式转换,未改写技术内容。

内容不代表原作者或 Kubernetes 项目对本账号的认可或背书。

早在 Kubernetes 1.28 中, 我们在之前的博客文章(参考地址:https://kubernetes.io/blog/2023/08/28/kubernetes-1-28-feature-mixed-version-proxy-alpha/)中引入了 Mixed Version Proxy (MVP) 作为 Alpha 特性(在特性门控 UnknownVersionInteroperabilityProxy 下)。 目标简单但关键:通过确保对旧版 API 服务器尚不了解的资源请求被正确路由到较新的对等 API 服务器, 而不是返回不正确的 404 Not Found,从而使集群升级更安全。

我们很高兴地宣布,Mixed Version Proxy 将在 Kubernetes 1.36 中升级到 Beta 版本, 并将默认启用!该特性自首次发布以来有了显著发展,解决了关键差距并实现了架构现代化。

以下介绍该特性的发展历程以及在集群中使用它需要了解的内容。

我们正在解决什么问题?(参考地址:https://kubernetes.io/zh-cn/blog/2026/05/15/kubernetes-1-36-feature-mixed-version-proxy-beta/#%e6%88%91%e4%bb%ac%e6%ad%a3%e5%9c%a8%e8%a7%a3%e5%86%b3%e4%bb%80%e4%b9%88%e9%97%ae%e9%a2%98)

在正在升级的高可用控制平面中,你通常会有运行不同版本的 API 服务器。 这些服务器可能提供不同的 API 集(Groups、Versions、Resources)。 没有 MVP,如果客户端请求落在不提供所请求资源的 API 服务器上(例如,升级中引入的新 API 版本), 该服务器会返回 404 Not Found。这在技术上是不正确的,因为资源在集群中是可用的, 只是不在该特定服务器上。这可能导致严重的副作用,例如错误的垃圾收集或命名空间删除被阻止。 MVP 通过将请求代理到能够提供该资源的对等 API 服务器来解决这个问题。

sequenceDiagram
    participant Client
    participant API_Server_A as API Server A (Older/Different)
    participant API_Server_B as API Server B (Newer/Capable)
    
    Client->>API_Server_A: 1. Request for Resource (e.g., v2)
    Note over API_Server_A: Determines it cannot serve locally
    API_Server_A->>API_Server_A: 2. Looks up capable peer in Discovery Cache
    API_Server_A->>API_Server_B: 3. Proxies request (adds x-kubernetes-peer-proxied header)
    API_Server_B->>API_Server_B: 4. Processes request locally
    API_Server_B-->>API_Server_A: 5. Returns Response
    API_Server_A-->>Client: 6. Forwards Response

自 1.28 以来的发展(参考地址:https://kubernetes.io/zh-cn/blog/2026/05/15/kubernetes-1-36-feature-mixed-version-proxy-beta/#%e8%87%aa-1-28-%e4%bb%a5%e6%9d%a5%e7%9a%84%e5%8f%91%e5%b1%95)

最初的 Alpha 实现是一个很好的概念证明,但它有一些局限性并且依赖于旧机制。 以下是我们为 Beta 版本进行现代化改进的方式:

  1. 从 StorageVersion API 到聚合发现 在 Alpha 版本中,API 服务器依赖 StorageVersion API 来确定哪些对等服务器提供哪些资源。 虽然功能正常,但这种方法有一个显著的局限性:StorageVersion API 尚不支持 CRD 和聚合 API。 对于 Beta 版本,我们用 Aggregated Discovery 取代了对 StorageVersion API 调用的依赖。 API 服务器现在使用聚合发现数据来动态了解其对等服务器的能力。
  1. 缺失的部分:对等聚合发现 1.28 博客文章(参考地址:https://kubernetes.io/blog/2023/08/28/kubernetes-1-28-feature-mixed-version-proxy-alpha/)指出了一个显著的差距: 虽然我们可以代理资源请求,但发现请求仍然只显示本地 API 服务器知道的内容。 在 1.36 中,我们添加了 Peer-Aggregated Discovery 支持! 现在,当客户端执行发现(例如,列出可用的 API)时,API 服务器会将其本地视图与所有活动对等服务器的发现数据合并。 这为客户端提供了整个集群中所有可用 API 的完整、统一视图,无论它们连接到哪个 API 服务器。
sequenceDiagram
    participant Client
    participant API_Server_A as API Server A
    participant API_Server_B as API Server B
    
    Client->>API_Server_A: 1. Request Discovery Document
    API_Server_A->>API_Server_A: 2. Gets Local APIs
    API_Server_A->>API_Server_B: 3. Gets Peer APIs (Cached or Direct)
    API_Server_A->>API_Server_A: 4. Merges and sorts lists deterministically
    API_Server_A-->>Client: 5. Returns Unified Discovery Document

虽然对等聚合发现将是默认行为(请注意,如果设置了 --peer-ca-file 标志, 则启用对等聚合发现,否则服务器将回退到仅显示其本地 API),但在某些情况下, 你可能需要只检查你连接的特定 API 服务器提供的资源。 你可以通过在请求的 Accept 头中包含 profile=nopeer 参数来请求此非聚合视图(例如,Accept: application/json;g=apidiscovery.k8s.io;v=v2;as=APIGroupDiscoveryList;profile=nopeer)。

必需的配置(参考地址:https://kubernetes.io/zh-cn/blog/2026/05/15/kubernetes-1-36-feature-mixed-version-proxy-beta/#%e5%bf%85%e9%9c%80%e7%9a%84%e9%85%8d%e7%bd%ae)

虽然特性门控将默认启用,但它需要设置某些标志以允许对等 API 服务器之间的安全通信。 要正常工作,请确保你的 API 服务器配置了以下标志:

  • --feature-gates=UnknownVersionInteroperabilityProxy=true:这在 1.36 中将是默认值,但最好进行验证
  • --peer-ca-file=<path-to-ca>:[CRITICAL] 这是必需的标志。 你必须提供源 API 服务器将用于验证目标对等 API 服务器服务证书的 CA 包。没有这个,代理将因 TLS 验证错误而失败。
  • --peer-advertise-ip 和 --peer-advertise-port:这些标志用于设置对等服务器应使用的网络地址来访问此 API 服务器。 如果未设置,则使用 --advertise-address 或 --bind-address 的值。 如果你的网络拓扑复杂,API 服务器通过特定内部接口通信,强烈建议显式设置这些标志。

使用 kubeadm 配置(参考地址:https://kubernetes.io/zh-cn/blog/2026/05/15/kubernetes-1-36-feature-mixed-version-proxy-beta/#%e4%bd%bf%e7%94%a8-kubeadm-%e9%85%8d%e7%bd%ae)

如果你使用 kubeadm 管理集群,可以在 ClusterConfiguration 文件中配置这些标志:

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
apiServer:
  extraArgs:
    peer-ca-file: "/etc/kubernetes/pki/ca.crt"
    # `eer-advertise-ip 和端口(如果需要)

行动号召(参考地址:https://kubernetes.io/zh-cn/blog/2026/05/15/kubernetes-1-36-feature-mixed-version-proxy-beta/#%e8%a1%8c%e5%8a%a8%e5%8f%b7%e5%8f%ac)

如果你运行多主集群并定期升级它们,Mixed Version Proxy 是一项重大的安全改进。 随着它在 1.36 中成为默认功能,我们鼓励你:

  1. 检查你的 API 服务器标志,确保 --peer-ca-file 已正确设置。
  2. 在准备 1.36 升级时,在你的暂存环境中测试此功能。
  3. 向 SIG API Machinery 提供反馈(Slack(参考地址:https://kubernetes.slack.com/messages/sig-api-machinery/)、 邮件列表(参考地址:https://groups.google.com/g/kubernetes-sig-api-machinery), 或通过参加 SIG API Machinery 会议(参考地址:https://github.com/kubernetes/community/tree/master/sig-api-machinery#meetings)) 分享你的体验。
  • ←上一页(参考地址:https://kubernetes.io/zh-cn/blog/2026/05/14/kubernetes-v1-36-deprecation-and-removal-of-service-externalips/)
  • 下一页→(参考地址:https://kubernetes.io/zh-cn/blog/2026/05/15/ccm-new-metric-route-sync-total/)
最后修改 May 27, 2026 at 2:57 PM PST: [zh-cn]Add blog: mixed-version-proxy (3c9c51e97f)(参考地址:https://github.com/kubernetes/website/commit/3c9c51e97f135a3ba7735fee1e6dd61e46f1cf55)
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。