У меня на Rackspace есть три сети:
10.181.XXX.XXX
(иногда они называют это частной сетью, но она не является частной как таковая, она является частной для всего центра обработки данных, поэтому их арендаторы могут использовать ее совместно)192.168.3.0/24
создается через сетевой интерфейсМой план - запустить безопасный кластер CoreOS, etcd
одноранговые узлы и клиенты ограничены реальной частной сетью, поэтому она недоступна для внешнего мира.
Итак, я запустил сервер CoreOS, и у него было три интерфейса:
eth0
имеет IP-адрес публичной сети - хорошоeth1
имеет IP-адрес обслуживающей сети - хорошо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
.
Мои вопросы:
etcd
работает в реальной частной сети?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
.
Я написал быстрый инструмент для этой работы - реализация, образцы и документация. можно найти здесь. Напишите нам, если у вас есть вопросы или предложения!