【问题标题】:Spring cloud config specify netmaskSpring Cloud 配置指定网络掩码
【发布时间】:2016-09-06 03:00:00
【问题描述】:

我正在尝试在多个 Amazon 实例上使用 Rancher 部署微服务集群。

我遇到的一个问题是每个 docker 容器现在都有 2 个 IP 地址; 1 个本地 IP 地址,由 docker 自己定义,另一个 IP 地址被路由到 Rancher 网桥。

45: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:b4:d3:52:be:25 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.4/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.42.232.123/16 scope global eth0
       valid_lft forever preferred_lft forever

Rancher 定义的 IP 地址是 10.42.*.* 范围内的一个,并且对于每个容器都是唯一的,这就是为什么我想让我的 Spring 云配置使用这个 IP 地址。

不,我发现您可以在配置中指定要使用的接口,但也可以指定子网吗?因为两个 IP 都在同一个接口上 (eth0),但服务应该使用 10.42..(例如,在发现服务中注册自己)。

我希望有人可以进一步帮助我。

我的配置的相关部分:

eureka:
    instance:
        preferIpAddress: true

(Eureka 使用与 spring cloud 相同的配置)

【问题讨论】:

    标签: java spring microservices netflix-eureka rancher


    【解决方案1】:

    我已经实现了一个类似于 De Zhang 发布的解决方案,使用由 Rancher 在 IPSec 托管网络上设置的 IP 地址,并以这个迷你脚本作为图像的入口点:

    echo "Setting rancher managed ip address on MANAGED_IP environment variable"
    export MANAGED_IP=$(curl --retry 5 --connect-timeout 3 -s 169.254.169.250/latest/self/container/primary_ip)
    echo "Rancher IP is ${MANAGED_IP}"
    java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
    

    在应用程序启动之前设置从元数据服务获取的IP地址并存储在环境变量MANAGED_IP中,然后打印出来。

    我的配置仓库(我正在使用 Spring Cloud Config Server)看起来像这样

    eureka:
      {...}
      shouldUseDns: false
      instance:
        preferIpAddress: true
        ip-address: ${MANAGED_IP}
    

    【讨论】:

      【解决方案2】:

      您可以像这样使用 rancher-metadata api:

      http://rancher-metadata/latest/self/container/service_name

      您可以获取service_namehostnameprimary_ip 等。

      所以你可以在 Dockerfile 中使用:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多