配置多个实例时,如何在我的应用程序中访问我的其他实例的IP

时间:2017-09-20 11:46:13

标签: pivotal-cloud-foundry bosh pcf bosh-deployer

我将在BOSH中部署我的应用程序并使用n个节点对其进行集群。  例如,2所以在我的应用程序中,当我在manifest.yml中部署应用程序时,我已在下面定义。  所以它从10.244.15.21开始,下一个节点从10.244.15.22开始,当我在manifest.yml中给出实例:2时

static: - 10.244.15.2 - 10.244.15.20 

因此,在我的每个应用程序中,我需要访问XML文件中的每个其他节点的IP。如何在xml文件中动态执行此操作。请指教。谢谢

,例如,

<parameter name="localMemberHost">127.0.0.1</parameter> 

<members> 
     <member> 
           <hostName>10.244.15.21</hostName>
           <port>4000</port> 
     </member> 
     <member> 
           <hostName>10.244.15.22</hostName> 
           <port>4000</port> 
     </member>

 </members>

1 个答案:

答案 0 :(得分:0)

根据您的示例,您应该能够使用作业模板的ERB评估和已知的IP范围组合来完成此任务。

首先在清单中定义与该作业的计数匹配的特定IP范围。您需要增加共享网络定义中的静态预留,以覆盖您需要的.21 +范围。然后该作业使用这些静态IP的分配。见https://bosh.io/docs/networks.html

jobs:
- name: clustered-job
  instances: 5
  templates:
    - name: jobname
      release: releasename
  networks:
  - name: default
    static_ips: [10.244.15.21 - 10.244.15.26] <-- you would need to make sure these are reserved in cloud config

我假设有问题的xml文件在您的工作规范中被定义为“模板”,这是使用可用属性启用ERB评估所必需的。 https://bosh.io/docs/jobs.html#templates https://bosh.io/docs/jobs.html#properties

您将使用循环和一些已知属性来定义所有集群成员。

 <%= spec.networks.default.static_ips %>

使循环摄取清单中指定的任何内容。您可能希望为作业添加一个属性来指定起始IP,因为我忘了如果上面给出了整个清单的IPS,或者只是作业(我认为它是后者)。

<% @spec.networks.default.static_ips.each do |static_ip| %>
    <member> 
           <hostName><%= static_ip %></hostName>
           <port>4000</port> 
     </member>
<% end %>

如果您需要将其从循环中排除,您还可以检查spec.ip以获取当前实例的IP。