我有一个Heroku应用程序对外部服务进行一些API调用。存在一些问题,服务想知道哪些IP正在进行呼叫。
许多基本工具如ifconfig
,traceroute
,netstat
等都不存在于计算机上。看起来他们正在运行Ubuntu 14.04.5的非常准确版本。
我能够使用heroku ps:exec -a <myapp>
通过SSH连接到我的应用并使用ip addr
但是存在一些问题:
1)看来这只允许我通过SSH进入web.1 dyno(我通过rest.1,rest.2等进行API调用) 2)这些电话通过Heroku一侧的路由器。
如何获取所有dyno实例和/或路由器的IP?
答案 0 :(得分:2)
根据docs,Heroku Dynos可以是来自AWS区域的任何IP。为您的Dynos提供专用/静态IP是enterprise offering的一部分。
但是,您可以通过添加附加组件(例如Fixie或Proximo)来获得专用/静态IP
此外,您可以让Dynos向https://httpbin.org/ip发出GET请求,它将使用Dynos公共IP进行回复(下面的评论部分中有更多想法)。
答案 1 :(得分:1)
使用heroku ps -a <app>
命令获取dynos列表。
您实际上可以使用heroku ps:exec -a <app> -d <dyno_instance> --ssh
ssh到单个dyno实例。
使用ip
命令获取单个dyno IP,例如ip addr | grep "global eth0" | awk '{ print $2 }'
。
使用curl 'https://api.ipify.org'
获取路由器IP。 http://httpbin.org/ip也很好。
您可以使用expect
以编程方式从每个dyno中检索IP,方法是运行Heroku SSH命令,等待提示,运行IP命令,注销,然后重复每个dyno实例。 / p>