我有一个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一侧的路由器。
我怎样才能得到所有dynamic实例和/或路由器的IP地址?
根据文档 ,Heroku Dynos可以是来自AWS地区的任何IP。 为您的Dynos 提供专用/静态IP是其企业产品的一部分。
但是,您可以通过添加附加组件(例如Fixie或Proximo)来获得专用/静态IP,
另外,你可以让Dynos向https://httpbin.org/ip发出一个GET请求,它将以Dynos公共IP进行响应(更多的想法在下面的注释部分)。
使用heroku ps -a <app>
命令获取dynos列表。
你实际上可以通过heroku ps:exec -a <app> -d <dyno_instance> --ssh
ssh进入单独的heroku ps:exec -a <app> -d <dyno_instance> --ssh
。
使用ip
命令获取单独的dyno IP,例如ip addr | grep "global eth0" | awk '{ print $2 }'
ip addr | grep "global eth0" | awk '{ print $2 }'
ip addr | grep "global eth0" | awk '{ print $2 }'
。
使用curl 'https://api.ipify.org'
获取路由器IP。 http://httpbin.org/ip也不错。
通过运行Heroku SSH命令,等待提示符,运行IP命令,注销,然后重复每个dyno实例,您可以使用expect
以编程方式从每个dyno检索IP。