【问题标题】:Port Binding - 12 Factor App端口绑定 - 12 因素应用程序
【发布时间】:2017-09-27 02:34:25
【问题描述】:
每当我部署一个 spring boot 应用程序时,它都会嵌入 tomcat 容器。它依赖于容器可用。这是否意味着这些应用程序不符合 12 因素应用程序,因为取决于网络服务器的运行时注入?
TCP 路由对非 http 服务意味着什么?
端口绑定
通过端口绑定导出服务。 12 因素应用程序是
完全独立,不依赖于运行时注入
Web 服务器进入执行环境以创建面向 Web 的
服务。
对于 Pivotal Cloud Foundry,非 HTTP 服务需要 TCP 路由
为了重新平台化。
【问题讨论】:
标签:
java
spring-boot
cloud-foundry
12factor
【解决方案1】:
当您在本地运行时,Spring Boot 应用程序会使用 default 配置文件运行。因此,Spring 将在运行时利用您的端口和其他设置。
当您推送到云端时,Spring Boot 应用会使用 cloud 配置文件运行。在cloud 配置文件中,端口设置由云决定,您提供的设置将被忽略。
在 PCF 中,Diego 单元托管所有应用实例。 Diego 单元有自己的 CIDR 块,用于托管应用程序。因此,您的应用实例将从该范围内获得 IP。而且您无法通过其 ip 访问该应用。
不过,Diego 单元 vm 运行网络的 CIDR 范围内的 IP。 Diego cell 还使用 NAT-ing 将您的应用 ip 映射到 Diego cell vm 上的端口。这就是将流量路由到您的应用程序的方式。
如您所见,PCF 中的 Diego 单元不能依赖您提供的端口。相反,它将在可能的地方运行应用程序,并 NAT 到可用端口。
看看Diego Reference Architecture。
关于您的第二个问题,Cloud Foundry 中的 Go-Routers 将请求路由到应用实例。默认情况下,Go-Router 上仅启用 http/https 流量。您可以在 Go-Routers 上启用 TCP 路由。我相信这是在 PCF 1.9 中添加的。
这是documentation。