0

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

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

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

塞德里克

4

1 回答 1

1

Knative 使用子域而不是 URL 路径,因为底层容器可以处理许多不同的 URL,并且可能使用绝对 URL(根据部署可能指向不同的函数)或相对 URL(将指向当前应用程序内)对请求进行编码。

如果您想在一个域名下映射多个 Knative 服务,您可以使用 Ingress 实现或 API 服务器,如KongIstio或许多其他服务。您将需要一个 HTTP 路由器,它可以重写Host标头以指向相关 Knative 服务的主机名;默认的 KubernetesIngress资源不公开此功能。

如果您选择进行此设置,您还需要确定映射 URL 路径的策略:您可以在将 URL 路径传递给 Knative 服务时将其剥离,或者保留它们。剥离 URL 路径可能更有意义,因为否则您最终需要在您的应用程序代码和您选择部署它的 和 之间建立依赖namespace关系name

其他需要注意的问题:

  • 由于所有 Knative 服务都位于一个主机名后面,因此它们将共享同一个 cookie 域,并且可能会无意中踩踏或毒害彼此的 cookie。
  • 正如我上面提到的,绝对与相对 URL 引用。您的 HTTP 路由器可能无法在出站路径上重新添加已剥离的 URL 前缀;如果您的 URL 是用 HTML 或 Javascript 构建的,而不是简单地在 URL 标头中构建,则更是如此。
  • 在创建新服务时自动对 HTTP 路由器进行编程并不是自动化的——您需要自己进行。您还可以编写一个 Knative Service 来执行此路由,并使用 aDomainMapping将该 Knative Service 映射到您想要的域名。然后,Knative 服务可以自动进行 URL 重写,如果您愿意,您可以在出站上进行反向重写。
于 2022-02-25T18:08:21.183 回答