[转载] Kubernetes v1.36:混合版本代理升级到 Beta
本文为授权转载,非本账号原创。
原文: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 版本进行现代化改进的方式:
- 从 StorageVersion API 到聚合发现
在 Alpha 版本中,API 服务器依赖
StorageVersion API来确定哪些对等服务器提供哪些资源。 虽然功能正常,但这种方法有一个显著的局限性:StorageVersion API尚不支持 CRD 和聚合 API。 对于 Beta 版本,我们用Aggregated Discovery取代了对StorageVersion API调用的依赖。 API 服务器现在使用聚合发现数据来动态了解其对等服务器的能力。
- 缺失的部分:对等聚合发现
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 中成为默认功能,我们鼓励你:
- 检查你的 API 服务器标志,确保
--peer-ca-file已正确设置。 - 在准备 1.36 升级时,在你的暂存环境中测试此功能。
- 向 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/)
- 点赞
- 收藏
- 关注作者
评论(0)