CloudFoundry 应用开放两个端口
CloudFoundry application opening two ports
我有一个打开两个端口的 CF 应用程序。 AFAIK CF 只能为其中之一创建路由 - 到位于 VCAP_APP_PORT
或 PORT
中的路由。如何创建到第二个端口的路由?我不介意使用单独的名称指向其他端口。
Cloud Foundry 会将来自 80/443 的 TCP/WebSocket 流量路由到一个分配的端口。您的应用程序无法侦听任何其他端口。
https://docs.cloudfoundry.org/devguide/deploy-apps/prepare-to-deploy.html#ports
您可以创建多个 url 映射,或者让两个应用程序使用消息传递或数据库服务相互通信。
目前,Cloud Foundry 上的应用程序无法将两个端口映射到其容器环境中。作为新 Diego 运行时的一部分,多个端口映射已公开,但目前无法通过 API.
根据你的需要,你可以看看Lattice, which uses the Diego runtime. Some documentation can be found here。
复活一个老问题,但现在 Cloud Foundry 支持这个问题。 2019 年 4 月左右添加了支持。请检查您的版本以查看是否支持此功能。
大致流程是:
- 使用 cf cli 更新您的应用程序以列出它侦听的所有端口
- 使用路由应使用的特定端口更新应用程序的每个路由。如果你有两个端口,你将需要两条或多条路线,每条路线一个端口。
- 重启应用程序
现在您必须使用 cf curl
手动更新这些记录。说明可在此处找到:https://docs.cloudfoundry.org/devguide/custom-ports.html。希望未来的 cf cli 版本能让这更容易。
如其他一些评论所述,现在可以在 CF 中为您的应用程序使用多个端口。 CF 文档中有一个 chapter 描述了如何做。
我按照说明进行操作,但仍然难以完全理解它,这就是为什么我在这里提供了一步一步的指导和一些解释(将 [] 中的所有变量替换为实际值):
- 将您的应用程序配置为侦听多个端口。在我的例子中,我配置了一个 spring 引导应用程序来侦听端口 8080 上的 HTTPS 请求和端口 8081 上的 HTTP 请求(用于调用执行器端点,如 health/prometheus 所述,如 here 所述)。这意味着我已经在 CF 中配置了一个 TCP 路由和一个 HTTP 路由,并将这些路由映射到 CF 应用程序。
- 获取应该可以在多个端口上访问的 CF 应用程序的 [APP_GUID]:
cf app [APP_NAME] --guid
- 将端口(例如 8080、8081)添加到 CF 应用程序:
cf curl /v2/apps/[APP_GUID] -X PUT -d '{"ports": [8080, 8081]}'
- 现在还必须调整指向 CF 应用程序的路由(例如,在本例中为 HTTP 路由),以使其指向正确的 CF 应用程序端口。首先你需要获取路线信息,你可以用
cf curl /v2/routes?q=host:[HOST_NAME]
或 cf curl /v2/apps/[APP_GUID]/routes
并保存指向您的应用程序的路线的 guid ([ROUTE_GUID])。
- 对于这条特定的路线,您必须调整路线映射。每个 CF 路由可以有多个路由映射。您可以使用此命令显示路由的当前路由映射:
cf curl /v2/routes/[ROUTE_GUID]/route_mappings
。使用 cf curl /v2/route_mappings -X POST -d '{"app_guid": "[APP_GUID]", "route_guid": "[ROUTE_GUID]", "app_port": 8081}'
您可以添加到路由的映射(例如,此处为 8081)。
- 该路由现在有两个映射,一个指向 8080,一个指向 8081。如果您希望该路由仅指向其中一个端口(例如 8081),则必须删除与您做的端口的映射不想拥有。 运行
cf curl /v2/routes/[ROUTE_GUID]/route_mappings
显示所有路由映射。然后提取应删除的路由映射的 guid(例如到端口 8080 的那个)。最后运行cf curl /v2/route_mappings/[GUID_ROUTE_MAPPING] -X DELETE
删除不需要的路由映射
现在,当使用新配置的路由时,您的 CF 应用应该可以通过 8080 以外的其他端口访问。
我有一个打开两个端口的 CF 应用程序。 AFAIK CF 只能为其中之一创建路由 - 到位于 VCAP_APP_PORT
或 PORT
中的路由。如何创建到第二个端口的路由?我不介意使用单独的名称指向其他端口。
Cloud Foundry 会将来自 80/443 的 TCP/WebSocket 流量路由到一个分配的端口。您的应用程序无法侦听任何其他端口。
https://docs.cloudfoundry.org/devguide/deploy-apps/prepare-to-deploy.html#ports
您可以创建多个 url 映射,或者让两个应用程序使用消息传递或数据库服务相互通信。
目前,Cloud Foundry 上的应用程序无法将两个端口映射到其容器环境中。作为新 Diego 运行时的一部分,多个端口映射已公开,但目前无法通过 API.
根据你的需要,你可以看看Lattice, which uses the Diego runtime. Some documentation can be found here。
复活一个老问题,但现在 Cloud Foundry 支持这个问题。 2019 年 4 月左右添加了支持。请检查您的版本以查看是否支持此功能。
大致流程是:
- 使用 cf cli 更新您的应用程序以列出它侦听的所有端口
- 使用路由应使用的特定端口更新应用程序的每个路由。如果你有两个端口,你将需要两条或多条路线,每条路线一个端口。
- 重启应用程序
现在您必须使用 cf curl
手动更新这些记录。说明可在此处找到:https://docs.cloudfoundry.org/devguide/custom-ports.html。希望未来的 cf cli 版本能让这更容易。
如其他一些评论所述,现在可以在 CF 中为您的应用程序使用多个端口。 CF 文档中有一个 chapter 描述了如何做。 我按照说明进行操作,但仍然难以完全理解它,这就是为什么我在这里提供了一步一步的指导和一些解释(将 [] 中的所有变量替换为实际值):
- 将您的应用程序配置为侦听多个端口。在我的例子中,我配置了一个 spring 引导应用程序来侦听端口 8080 上的 HTTPS 请求和端口 8081 上的 HTTP 请求(用于调用执行器端点,如 health/prometheus 所述,如 here 所述)。这意味着我已经在 CF 中配置了一个 TCP 路由和一个 HTTP 路由,并将这些路由映射到 CF 应用程序。
- 获取应该可以在多个端口上访问的 CF 应用程序的 [APP_GUID]:
cf app [APP_NAME] --guid
- 将端口(例如 8080、8081)添加到 CF 应用程序:
cf curl /v2/apps/[APP_GUID] -X PUT -d '{"ports": [8080, 8081]}'
- 现在还必须调整指向 CF 应用程序的路由(例如,在本例中为 HTTP 路由),以使其指向正确的 CF 应用程序端口。首先你需要获取路线信息,你可以用
cf curl /v2/routes?q=host:[HOST_NAME]
或cf curl /v2/apps/[APP_GUID]/routes
并保存指向您的应用程序的路线的 guid ([ROUTE_GUID])。 - 对于这条特定的路线,您必须调整路线映射。每个 CF 路由可以有多个路由映射。您可以使用此命令显示路由的当前路由映射:
cf curl /v2/routes/[ROUTE_GUID]/route_mappings
。使用cf curl /v2/route_mappings -X POST -d '{"app_guid": "[APP_GUID]", "route_guid": "[ROUTE_GUID]", "app_port": 8081}'
您可以添加到路由的映射(例如,此处为 8081)。 - 该路由现在有两个映射,一个指向 8080,一个指向 8081。如果您希望该路由仅指向其中一个端口(例如 8081),则必须删除与您做的端口的映射不想拥有。 运行
cf curl /v2/routes/[ROUTE_GUID]/route_mappings
显示所有路由映射。然后提取应删除的路由映射的 guid(例如到端口 8080 的那个)。最后运行cf curl /v2/route_mappings/[GUID_ROUTE_MAPPING] -X DELETE
删除不需要的路由映射
现在,当使用新配置的路由时,您的 CF 应用应该可以通过 8080 以外的其他端口访问。