Cloud foundry - 在没有 public 路由的情况下发现后端应用程序

Cloud foundy - Discovering backend application without public route

我想在 CF 上实现微服务架构 (run.pivotal.io),但在创建我的私有后端服务时遇到问题。

据我所知,我必须在部署时选择:有和没有路线。

  1. 通过路由,我的服务变为 public,这对我的 public 站点和我的 public REST API 来说是可以的,但我不希望它对我的后端服务。

  2. 没有路由,我不知道该如何进行服务发现。

我已经发现:

  1. 使用 VCAP_APPLICATION env 变量并基于此创建我自己的服务发现(或使用类似 Eureka 的东西)。这是否总是给我一个有效的 IP:PORT?无论我的应用运行的是什么 DEA,其他 DEA 上的其他应用都可以在此 IP:PORT 上访问它吗?

  2. 将我的后端应用程序注册为服务并绑定它,然后使用 VCAP_SERVICES。我想这样做,但只找到了关于在 CF 之外注册服务的文档。有没有一种简单的方法可以将我自己的应用程序绑定为服务?

所以真正好的是能够将应用程序标记为私有但仍为其分配主机和域,因此(仅)我的其他应用程序可以通过 CF 负载平衡器调用它但它会受到保护来自 public.

在线回答...

As I see I have to options at deployment: with and without route.

这取决于 Cloud Foundry 安装及其配置方式。在 PWS 上,您不能在应用程序实例之间直接对话。这是一个安全限制。你必须通过路由器。

With route my services becomes public which is ok for my public site and my public REST API, but I don't want it for my backend services.

您在这里可以做的最好的事情是添加应用程序级别(或容器级别,如果您愿意)安全性以防止未经授权的访问。

如果您不想进行基于密码的身份验证,您可以进行基于 IP 的过滤。在 PWS 上,我们刚刚添加了 Statica 的服务。您可以使用它通过代理发送出站流量,该代理将为该流量分配静态 IP。然后,您可以将对您的应用的访问限制为仅 Statica IP。

Without route I don't see how should I do service discovery.

如果删除路由,则无法向应用发送流量。

Use VCAP_APPLICATION env variable and create my own service discovery (or use something like Eureka) based on that. Does this give me always a valid IP:PORT? No matter what DEA my app is running it is reachable on this IP:PORT by other apps on other DEAs?

您可能需要使用 this enhancement。添加它是为了支持这种类型的部署。然而,这仅适用于放宽了应用程序实例之间的网络限制的 Cloud Foundry 安装。通常你不能在实例之间直接对话。

Register my backend app as a service and bind it, than use VCAP_SERVICES. I'd like to do this but only found documentation about registering services outside CF. Is there a simple way to bind my own app as a service?

您可以创建 "user provided" 服务。查看 cf cups 命令。它允许您使用任意一组参数和数据创建服务。这可能包含您的服务的 URL。创建服务后,您可以将其绑定到任意数量的应用程序。