0

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

我遇到的一个问题是每个 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

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

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

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

我的配置的相关部分:

eureka:
    instance:
        preferIpAddress: true

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

4

2 回答 2

0

我已经实现了一个类似于 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}
于 2017-01-04T17:22:44.023 回答
0

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

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

你可以得到service_name, hostname,primary_ip和其他的。

所以你可以在 Dockerfile 中使用,例如:

在此处输入图像描述

于 2016-09-02T05:19:37.000 回答