Конфигурация Spring Cloud указывает сетевую маску

Я пытаюсь развернуть кластер микросервисов, используя Rancher на нескольких экземплярах Amazon.

Проблема, с которой я столкнулся, заключается в том, что каждый док-контейнер теперь имеет 2 IP-адреса; 1 локальный IP-адрес, определенный самим докером, и еще один 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-адрес, определенный Rancher, находится в диапазоне 10.42.*.* и уникален для каждого контейнера, поэтому я хочу, чтобы мои конфигурации облака Spring использовали этот IP-адрес.

Нет, я обнаружил, что в конфиге можно указать, какой интерфейс использовать, но можно ли указать и подсеть? Поскольку оба IP-адреса находятся на одном интерфейсе (eth0), службы должны использовать 10.42.. (например, чтобы зарегистрироваться в службе обнаружения).

Я надеюсь, что кто-то может помочь мне в этом.

Соответствующая часть моей конфигурации:

eureka:
    instance:
        preferIpAddress: true

(Эврика использует ту же конфигурацию, что и весеннее облако)


person Kaj    schedule 10.05.2016    source источник


Ответы (2)


Вы можете использовать API метаданных ранчера следующим образом:

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

вы можете получить service_name, hostname, primary_ip и другие.

Таким образом, вы можете использовать в Dockerfile, например:

введите здесь описание изображения

person De Zhang    schedule 02.09.2016

Я реализовал решение, подобное опубликованному Де Чжаном, с использованием IP-адреса, установленного владельцем ранчо в сети, управляемой IPSec, с этим мини-скриптом в качестве точки входа изображения:

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}
person Fernando Neto    schedule 04.01.2017