CoreOS:在 etcd2 cloud-config 中注入真实私有 IP

CoreOS:在 etcd2 cloud-config 中注入真实私有 IP

我在 Rackspace 上有三个网络:

  1. 公共网络
  2. 服务网络10.181.XXX.XXX(他们有时称之为私有网络,但它本身并不是私有的,而是数据中心范围的私有网络,因此他们的租户可以共享它)
  3. 192.168.3.0/24通过网络 UI 创建的真正的私有网络

我的计划是启动一个安全的 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变量扩展为eth1IP 地址,其内容如下/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 地址事先是未知的,所以我认为需要以某种方式获取并注入。

答案1

它们还提供了创建您自己的专用网络并将您的服务器连接到该网络的方法。如所解释的知识库文章 ID:2163。如果您这样做并删除了 servicenet 连接接口,那么这将不再是一个问题。但是,这样做的警告是,您将无法再使用与 servicenet 相关的服务。有关这方面的更多复杂性,请参阅他们的知识库文章 ID:2250

或者,您可以配置防火墙,以便只有您使用/需要 servicenet 的服务才能访问您的服务器。您甚至可以通过云 vyatta 设备进入编排真正私有网络的世界,同时仍保留对 Rackspace 服务的访问权限,如中所述知识库文章 ID:3454

所有这些文章都可以在以下位置找到:http://www.rackspace.com/knowledge_center/

最终,您必须权衡哪种选择最适合您。

高血压

答案2

问题解决了。Etcd2 现在在真正的私有网络(而不是 ServiceNet)上运行。方法如下 - 我创建了一个 systemd 插件,etcd2.service它明确设置了环境配置,而ETCD_ADVERTISE_CLIENT_URLS=${URL}:2379不是依赖于变量,例如$private_ipv4$public_ipv4

我为这项工作编写了一个快速工具 - 实现、示例和文档可以在这里找到。如果您有任何问题或建议,请留言!

相关内容