我在Rackspace上有三个networking:
10.181.XXX.XXX (他们有时把它称为私有networking,但它不是私有的,它是数据中心私有的,因此它们的租户可以共享它) 192.168.3.0/24通过networking用户界面创build 我的计划是推出一个安全的etcd集群,其etcd对等端和客户端仅限于真正的专用networking,因此无法用于外部世界。
所以,我推出了一个CoreOS服务器,它有三个接口:
eth0有公网的IP地址 – 很好 eth1有服务networking的IP地址 – 很好 eth2具有专用networking的IP地址 – 太棒了! 所有看起来不错,但etcd绑定到服务networking,而不是我手动创build的私人。 这是一个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_ipv4variables被扩展到eth1 IP地址,这里是/etc/environment的内容:
COREOS_PUBLIC_IPV4=166.78.XXX.XXX COREOS_PRIVATE_IPV4=10.181.XXX.XXX
好吧,看起来像Rackspace注入自己的networking,这是可以解释的。 但是这是否意味着etcd只locking到前两个networking,并且没有办法将其configuration为使用真正的私有networking?
我已经尝试了一堆这样的黑客:
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地址是不知道的,所以它需要得到和注入我想。 他们还提供了一种方法来创build您自己的专用networking并将您的服务器连接到它。 正如解释KB文章ID:2163 。 如果你这样做,并已经连接servicenet连接界面,这将不再是一个问题。 但是,对此的警告将是,你将不再有办法利用servicenet相关的服务。 更多有关错综复杂的是他们的KB文章ID:2250 。
或者,您可以configuration您的防火墙,以便只有您使用/需要servicenet的服务才能够到达您的服务器。 您甚至可以冒险进入通过云vyatta设备编排真正的专用networking的世界,并仍然保留访问Rackspace服务的知识库文章ID:3454 。
所有这些文章可在以下urlfind: http : //www.rackspace.com/knowledge_center/
最终,你必须权衡什么select最适合你。
HTH
它解决了。 Etcd2现在运行在真正的专用networking上而不是ServiceNet上。 以下是我如何为etcd2.service创build一个systemd etcd2.service ,其中它明确设置了诸如ETCD_ADVERTISE_CLIENT_URLS=${URL}:2379类的环境configuration,而不是依赖诸如$private_ipv4和$public_ipv4variables。
我为这个工作写了一个快速工具 – 实现,样本和文档可以在这里find 。 如果您有任何问题或build议,请删除一行!