Назад | Перейти на главную страницу

CoreOS: добавить реальный частный IP-адрес в облачную конфигурацию etcd2

У меня на Rackspace есть три сети:

  1. Публичная сеть
  2. Сервисная сеть 10.181.XXX.XXX (иногда они называют это частной сетью, но она не является частной как таковая, она является частной для всего центра обработки данных, поэтому их арендаторы могут использовать ее совместно)
  3. Настоящая частная сеть 192.168.3.0/24 создается через сетевой интерфейс

Мой план - запустить безопасный кластер CoreOS, etcd одноранговые узлы и клиенты ограничены реальной частной сетью, поэтому она недоступна для внешнего мира.

Итак, я запустил сервер CoreOS, и у него было три интерфейса:

  1. eth0 имеет IP-адрес публичной сети - хорошо
  2. eth1 имеет IP-адрес обслуживающей сети - хорошо
  3. eth2 имеет IP-адрес частной сети - отлично!

Все выглядело хорошо, но etcd привязан к служебной сети, а не к частной, которую я создал вручную. Вот кусочек cloud-config:

#cloud-config
    coreos:
      etcd2:
        discovery: https://discovery.etcd.io/XXX
        advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001
        initial-advertise-peer-urls: http://$private_ipv4:2380
        listen-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001
        listen-peer-urls: http://$private_ipv4:2380

Которое значит что $private_ipv4 переменная расширяется до eth1 IP-адрес, вот содержимое /etc/environment:

COREOS_PUBLIC_IPV4=166.78.XXX.XXX
COREOS_PRIVATE_IPV4=10.181.XXX.XXX

Хорошо, похоже, что Rackspace внедряет свои сети, это объяснимо. Но означает ли это, что etcd заблокирован только для первых двух сетей и нет возможности настроить его для использования настоящей частной сети?

Я пробовал кучу таких хаков:

listen-peer-urls: http://`/usr/bin/ifconfig eth2 | /usr/bin/grep --word-regexp inet | /usr/bin/awk '{print $2}'`:2380

и другие, но не были должным образом выполнены или заменены в cloud-config.

Мои вопросы:

  1. Я делаю что-то странное в плане настройки кластера CoreOS, так что я не могу легко и естественно достичь цели? Если да, то как бы вы выложили безопасный кластер, etcd работает в реальной частной сети?
  2. Есть ли способы "добавить" динамические значения в cloud-init файл, чтобы он интерполировался во время выполнения? Проблема в том, что IP-адрес неизвестен заранее, поэтому я думаю, что его нужно как-то получить и ввести.

Они также предоставляют способ создать вашу собственную частную сеть и подключить к ней ваш сервер. Как объяснено KB Идентификатор статьи: 2163. Если бы вы сделали это и удалили интерфейс, подключенный к сервису, это больше не было бы проблемой. Однако предостережение здесь будет заключаться в том, что у вас больше не будет возможности использовать службы, связанные с сервисом. Подробнее о тонкостях этого их KB Идентификатор статьи: 2250.

Или вы можете настроить свой брандмауэр так, чтобы только те службы, которые вы используете / для которых требуется сервис, могли получить доступ к вашему серверу. Вы даже можете отправиться в мир организации настоящей частной сети с помощью облачного устройства vyatta и при этом сохранить доступ к сервисам Rackspace, как описано в KB Идентификатор статьи: 3454.

Все эти статьи можно найти по адресу: http://www.rackspace.com/knowledge_center/

В конечном итоге вам придется взвесить, какой вариант лучше всего подходит для вас.

HTH

Решено. Etcd2 теперь работает в реальной частной сети, а не в ServiceNet. Вот как - я создал drop-in systemd для etcd2.service где он явно устанавливает конфигурацию среды, такую ​​как ETCD_ADVERTISE_CLIENT_URLS=${URL}:2379 вместо того, чтобы полагаться на такие переменные, как $private_ipv4 и $public_ipv4.

Я написал быстрый инструмент для этой работы - реализация, образцы и документация. можно найти здесь. Напишите нам, если у вас есть вопросы или предложения!