这篇文章已经一年多了,较旧的文章可能包含过时的内容。请检查从发表以来,页面中的信息是否变得不正确。
作者: Richa Banker (Google)
译者: Xin Li (DaoCloud)
本博客介绍了混合版本代理(Mixed Version Proxy),这是 Kubernetes 1.28 中的一个新的 Alpha 级别特性。当集群中存在多个不同版本的 API 服务器时,混合版本代理使对资源的 HTTP 请求能够被正确的 API 服务器处理。例如,在集群升级期间或当发布集群控制平面的运行时配置时此特性非常有用。
当集群进行升级时,集群中不同版本的 kube-apiserver 为不同的内置资源集(组、版本、资源)提供服务。 在这种情况下资源请求如果由任一可用的 apiserver 提供服务,请求可能会到达无法解析此请求资源的 apiserver 中;因此,它会收到 404("Not Found")的响应报错,这是不正确的。 此外,返回 404 的错误服务可能会导致严重的后果,例如命名空间的删除被错误阻止或资源对象被错误地回收。
"混合版本代理"新特性为 kube-apiserver 提供了将请求代理到对等的、 能够感知所请求的资源并因此能够服务请求的 kube-apiserver。 为此,一个全新的过滤器已被添加到 API
X-Kubernetes-APIServer-Rerouted: true。将其设置为 true 意味着原始
API 服务器无法处理该请求,需要对其进行代理。如果目标侧对等 API 服务器看到此标头,则不会对该请求做进一步的代理操作。--advertise-address
或(当未指定--advertise-address时)--bind-address 标志所设置的值。
如果网络配置中不允许用户在对等 kube-apiserver 之间使用这些标志中指定的地址进行通信,
可以选择将正确的对等地址配置在此特性引入的 --peer-advertise-ip 和 --peer-advertise-port
参数中。以下是启用此特性的步骤:
v1.28.0 或更高版本)--feature-gates=UnknownVersionInteroperabilityProxy=true
打开特性门控--peer-ca-file 参数为源 kube-apiserver 提供 CA 证书,
用以验证目标 kube-apiserver 的服务证书。注意:这是此功能正常工作所必需的参数。
此参数没有默认值。--peer-advertise-port 命令行参数来配置 kube-apiserver。
--peer-advertise-port 命令行参数。
如果未设置这两个参数,则默认使用 --advertise-address 或 --bind-address 命令行参数的值。
如果这些也未设置,则将使用主机的默认接口。目前,我们仅在确定时将资源请求代理到对等 kube-apiserver。 接下来我们需要解决如何在这种情况下处理发现请求。 目前我们计划在测试版中提供以下特性:
通过 Slack:#sig-api-machinery 或邮件列表 联系我们。
非常感谢帮助设计、实施和评审此特性的贡献者: Daniel Smith、Han Kang、Joe Betz、Jordan Liggit、Antonio Ojea、David Eads 和 Ben Luddy!