Kubernetes 文档 / 概念 / Kubernetes 架构 / 混合版本代理
此文档从 Kubernetes 官网摘录
中文地址
英文地址
混合版本代理
启用混合版本代理时, 聚合层会加载一个特殊的过滤器, 完成以下操作:
- 当资源请求到达无法提供该 API 的 API 服务器时 (可能的原因是服务器早于该 API 的正式引入日期或该 API 在 API 服务器上被关闭), API 服务器会尝试将请求发送到能够提供所请求 API 的对等 API 服务器。 API 服务器通过发现本地服务器无法识别的 API 组/版本/资源来实现这一点, 并尝试将这些请求代理到能够处理这些请求的对等 API 服务器。
- 如果对等 API 服务器无法响应,则源 API 服务器将以 503(“Service Unavailable”)错误进行响应。
内部工作原理
当 API 服务器收到一个资源请求时,它首先检查哪些 API 服务器可以提供所请求的资源。 这个检查是使用内部的 StorageVersion API 进行的。
-
如果资源被收到请求(例如 GET /api/v1/pods/some-pod)的 API 服务器所了解,则请求会在本地处理。
-
如果没有找到适合所请求资源(例如 GET /my-api/v1/my-resource)的内部 StorageVersion 对象, 并且所配置的 APIService 设置了指向扩展 API 服务器的代理,那么代理操作将按照扩展 API 的常规流程进行。
-
如果找到了对应所请求资源(例如 GET /batch/v1/jobs)的合法的内部 StorageVersion 对象, 并且正在处理请求的 API 服务器(处理中的 API 服务器)禁用了 batch API, 则正处理的 API 服务器使用已获取的 StorageVersion 对象中的信息, 获取提供相关 API 组/版本/资源(在此情况下为 api/v1/batch)的对等 API 服务器。 处理中的 API 服务器随后将请求代理到能够理解所请求资源且匹配的对等 kube-apiserver 之一。
-
如果没有对等方了解所给的 API 组/版本/资源,则处理请求的 API 服务器将请求传递给自己的处理程序链, 最终应返回 404(“Not Found”)响应。
-
如果处理请求的 API 服务器已经识别并选择了一个对等 API 服务器,但该对等方无法响应 (原因可能是网络连接问题或正接收的请求与向控制平面注册对等信息的控制器之间存在数据竞争等), 则处理请求的 API 服务器会以 503(“Service Unavailable”)错误进行响应。