Knative 服务 URL

Knative services URLs

我目前正在评估 Knative,但我肯定找不到在 URL 中使用路径而不是子域来访问服务的方法。

默认情况下,在创建服务时,URL 是这样的:http://Name.Namespace.Domain 而我想要的是这样的 http:///Domain/Namespace/Name

有人知道这是否可能吗? 提前致谢,

塞德里克

Knative 使用子域而不是 URL 路径,因为底层容器可以处理许多不同的 URLs,并且可能使用绝对 URLs 编码请求(这可能指向不同的功能取决于部署)或相对 URLs(将指向当前应用程序)。

如果您想在单个域名下映射多个 Knative 服务,您可以使用 Ingress 实现或 API 服务器(如 Kong, Istio)或许多其他服务器。您将需要一个 HTTP 路由器,它可以重写 Host header 以指向有问题的 Knative 服务的主机名;默认的 Kubernetes Ingress 资源不公开此功能。

如果您选择设置它,您还需要决定映射 URL 路径的策略:您可以在将 URL 路径传递给Knative Service,或者让他们在场。去掉 URL 路径可能更有意义,否则你最终需要在你的应用程序代码和你选择的 namespacename 之间建立依赖关系将其部署在。

其他需要注意的陷阱:

  • 由于所有 Knative 服务都在一个主机名后面,它们将共享相同的 cookie 域,并且可能会无意中破坏或毒化彼此的 cookie。
  • 绝对与相对 URL 引用,正如我上面提到的。您的 HTTP 路由器可能无法 re-add 出站路径上的剥离 URL 前缀;如果你有 URLs 正在 HTML 或 Javascript 中构建,而不是简单地在 URL headers.
  • 中构建,那么加倍
  • 在创建新服务时自动对您的 HTTP 路由器进行编程并不是自动的——您需要自己来做。您 也可以 编写一个 Knative 服务来执行此路由,并使用 DomainMapping 将该 Knative 服务映射到您想要的域名。然后,Knative 服务可以自动进行 URL 重写,如果需要,您可以在出站上进行反向重写。