Kubernetes 服务 APIs(Service APIs)是由 SIG-NETWORK 社区管理的开源项目,项目地址:https://github.com/kubernetes-sigs/service-apis。该项目的目标是在 Kubernetes 生态系统中发展服务网络 API,服务 API 提供了暴露 Kubernetes 应用的接口-- Services、Ingress 等。
服务 API 是通过提供可表达的、可扩展的、面向角色的接口来改善服务网络,这些接口由许多厂商实现,并得到了广泛的行业支持。
服务 API 是一个 API 资源的集合 - Service、GatewayClass、Gateway、HTTPRoute、TCPRoute 等,这些资源共同为各种网络用例构建模型。
服务 API 如何改进当前的标准,如 Ingress?
其他一些显著的功能包括...
在服务 API 中有3个主要的角色。
在某些用例中,可能会有第四个角色应用程序管理员。
服务 API 的相关资源最初将作为 CRD 定义在 networking.x-k8s.io
API 组中。在我们的资源模型中,有3种主要类型的对象:
GatewayClass
定义了一组具有共同配置和行为的网关。Gateway
网关请求一个可以将流量转换到集群内服务的点。Routes
路由描述了通过网关而来的流量如何映射到服务。GatewayClass
定义了一组共享共同配置和行为的网关,每个GatewayClass 将由一个控制器处理,尽管控制器可以处理多个GatewayClass。
GatewayClass 是一个集群范围的资源,必须定义至少一个GatewayClass 才能提供 Gateways 功能。实现 Gateway API 的控制器通过提供相关联的 GatewayClass 资源来实现,用户可以从他们的Gateway 中引用该资源。
这类似于 Ingress 的 IngressClass
和 PersistentVolumes
的StorageClass
。在 Ingress v1beta1 中,最接近 GatewayClass 的是 ingress-class
注解,而在 IngressV1 中,最接近的就是 IngressClass
对象。
Gateway 网关描述了如何将流量路由到集群内的服务。也就是说,它定义了将流量从不了解 Kubernetes 的地方路由到 Kubernetes 的地方的方法请求。例如,由云负载均衡器、集群内代理或外部硬件负载均衡器发送到 Kubernetes 服务的流量,虽然许多用例的客户端流量源自集群的 "外部",但这并不是强制要求的。
它定义了对实现 GatewayClass 配置和行为协定的特定负载均衡器配置的请求。该资源可以由运维人员直接创建,也可以由处理 GatewayClass 的控制器创建。
由于 Gateway 规范声明了用户意图,因此它可能不包含规范中所有属性的完整规范。例如,用户可以省略地址、端口、TLS 等字段,这使得管理 GatewayClass 的控制器可以为用户提供这些设置,从而使规范更具可移植性,使用 GatewayClass Status 对象将使此行为更清楚。
一个 Gateway 可以包含一个或多个 *Route 引用,这些引用的作用是将一个子集的流量路由到一个特定的服务上。
Route 对象定义了特定协议的规则,用于将请求从网关映射到 Kubernetes 服务。
HTTPRoute
和 TCPRoute
是目前唯一定义的Route对象,未来可能会添加其他特定协议的 Route 对象。
BackendPolicy 提供了一种配置网关和后端之间连接的方法。在这个 API 中,后端是指路由可以转发流量的任何资源。这个级别的配置目前仅限于 TLS,但将来会扩展到支持更高级的策略,如健康检查。
一些后端配置可能会根据针对后端的 Route 而有所不同。在这些情况下,配置字段将放在 Routes 上,而不是 BackendPolicy 上,有关该资源未来可能配置的更多信息,请参考相关的 GitHub Issue。
GatewayClass、Gateway、xRoute 和 Service 的组合将定义一个可实现的负载均衡器,下图说明了这些资源之间的关系。
使用反向代理实现的网关的一个典型的客户端/网关 API 请求流程如下所示:
和/或
路径匹配。API 中提供了一些扩展点,以灵活处理大量通用 API 无法处理的用例。
以下是 API 中扩展点的摘要。
在最新的 traefikv2.4.0-rc1 版本中已经新增了一个 Kubernetes Gateway 的 Provider,该 Provider 是 Kubernetes SIGs 的服务 APIs 规范的 Traefik 实现。这个提供者是作为实验性功能提出的,部分支持服务 APIs v0.1.0 规范。
具体使用示例可以参考文档:https://doc.traefik.io/traefik/v2.4/providers/kubernetes-gateway/ 了解更多信息。