Knative Serving 的 Activator 如何拦截缩小修订的请求?

How does Knative Serving's Activator intercept requests to scaled down revisions?

here所述,Knative 的 Activator 接收并缓冲对非活动修订的请求。

这个路由是如何实现的?我在我的应用程序的命名空间中看到的只是一个 VirtualService 路由请求到修订版,所以我看不到进入网格的流量是如何重定向到 Activator 的。

Knative 服务版本:0.9.0

Knative 有一个新概念 (CRD),称为无服务器服务,它是为每个 Knative 服务创建的。

无服务器服务创建两个 Kubernetes 服务:

  • 针对您的应用程序 私人服务 pods。需要它来发现 Pod IP。
  • Public 服务 正被入口网关 定位,并根据它所处的模式(更多关于稍后)它将指向与第一个服务相同的端点或激活器服务的端点。

无服务器服务模式

无服务器服务可以采用以下模式之一:

  • 发球
  • 代理

服务模式

只要您的应用程序有 pod 实例,无服务器服务就处于服务模式 运行。因此,您的 Public 服务配置了您的私有服务的端点,这意味着入口网关转发的请求到达您的应用程序,如下图所示:

  • hello-go-pb - 是 public 服务。
  • hello-go-pr - 是私人服务。

代理模式

当您的应用程序实例被自动缩放器缩减时,无服务器服务控制器更新 public 服务以使用 Activator 服务发现的 IP 配置。触发自动缩放会缓冲请求,直到一项服务启动并 运行 并转发请求。代理模式如下图所示:

总而言之,无服务器控制器设置 public 服务的端点 通过在 Private Service 的端点之间交替,或者如果它缩小到零到 Activator Service 的端点。