我目前正在评估 Knative,但我确实找不到在 URL 中使用路径而不是子域来访问服务的方法。
默认情况下,创建服务时,URL 的格式如下:http://Name.Namespace.Domain我想要的是这样的 http://Domain/Namespace/Name
有人知道这是否可能吗? 提前致谢,
塞德里克
最佳答案
Knative 使用子域而不是 URL 路径,因为底层容器可以处理许多不同的 URL,并且可能使用绝对 URL(这可能指向不同的函数,具体取决于部署)或相对 URL(这将指向当前应用程序内)对请求进行编码)。
如果您想在单个域名下映射多个 Knative 服务,您可以使用 Ingress 实现或 API 服务器,如 Kong , Istio ,或许多其他。您将需要一个 HTTP 路由器,它可以重写 Host
header 以指向相关 Knative 服务的主机名;默认的 Kubernetes Ingress
资源不公开此功能。
如果您选择进行此设置,您还需要决定映射 URL 路径的策略:您可以在将 URL 路径传递到 Knative 服务时将其剥离,也可以将其保留。去掉 URL 路径可能更有意义,否则您最终将需要应用程序代码与您拥有的 namespace
和 name
之间存在依赖关系选择将其部署在。
其他需要注意的问题:
- 由于所有 Knative 服务都位于同一个主机名后面,因此它们将共享相同的 Cookie 域,并且可能会无意中破坏或毒害彼此的 Cookie。
- 正如我上面提到的,绝对 URL 引用与相对 URL 引用。您的 HTTP 路由器可能无法在出站路径上重新添加剥离的 URL 前缀;如果您的 URL 是用 HTML 或 Javascript 构建的,而不是简单地在 URL header 中构建的,则情况会加倍。
- 在创建新服务时自动对 HTTP 路由器进行编程并不是自动化的 - 您需要自己执行此操作。您还可以编写 Knative 服务来执行此路由并使用
DomainMapping
将该 Knative 服务映射到您所需的域名。然后 Knative Service 可以自动进行 URL 重写,如果您愿意,您可以在出站上进行反向重写。
关于kubernetes - Knative 服务 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71268823/