如何从Cloud Foundry Task调用同平台服务实例的REST API
Cloud Foundry Task调用同环境REST接口问题解答
核心结论
可以通过Cloud Foundry(含PCF)的Task功能调用同环境下运行的应用REST接口,但你给出的示例命令写法存在错误,无法直接运行。
原命令错误原因
你写的cf run-task my-test-app curl /sayHello存在两处核心问题:
cf run-task的第一个参数是运行任务的载体应用,任务会在这个应用的容器环境内执行,需要确保该载体应用和你要调用的my-rest-app在同一网络空间(默认同一Org、同一Space下的应用网络互通)curl /sayHello缺少完整的请求地址,curl必须指定完整的请求域名+路径才能正常发起请求
正确调用示例
方式1:通过公网路由调用(通用方案)
先通过cf app my-rest-app命令查询该应用的公网路由(routes字段),假设查询到的公网路由为my-rest-app.apps.pcf.example.com,正确命令如下:
cf run-task my-test-app "curl https://my-rest-app.apps.pcf.example.com/sayHello" --name call-hello-task
说明:
--name参数为自定义任务名,方便后续查询任务状态和日志
方式2:通过内网域名调用(不走公网,性能更高)
如果你的PCF环境开启了默认的内部域名服务,同Space下的应用可以通过<应用名>.apps.internal的内网域名直接调用,无需走公网链路:
cf run-task my-test-app "curl http://my-rest-app.apps.internal/sayHello" --name call-hello-task
注意:使用内网域名前需要确认目标应用已绑定内部路由,绑定命令为
cf map-route my-rest-app apps.internal --hostname my-rest-app
查看调用结果
任务提交完成后可以通过以下命令查看请求返回内容:
- 查看载体应用的任务列表,获取对应任务的ID:
cf tasks my-test-app - 过滤任务日志即可看到curl的请求结果:
cf logs my-test-app --recent | grep <替换为实际任务ID>
内容的提问来源于stack exchange,提问作者Kevin Rave
相关产品推荐
相关产品推荐

