Coreos

CoreOS:在 etcd2 cloud-config 中註入一個真實的私有 IP

  • December 29, 2015

我在 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 地址,所以我認為它需要以某種方式獲取和注入。

解決了。Etcd2 現在在真正的專用網路上執行,而不是在 ServiceNet 上執行。方法如下 - 我創建了一個 systemd 外掛,用於etcd2.service顯式設置環境配置,ETCD_ADVERTISE_CLIENT_URLS=${URL}:2379而不是依賴於$private_ipv4和等變數$public_ipv4

我為這項工作編寫了一個快速工具——實現、範例和文件可以在這裡找到。如果您有任何問題或建議,請留言!

它們還提供了一種創建您自己的專用網路並將您的伺服器連接到它的方法。正如KB 文章 ID:2163所解釋的那樣。如果您這樣做並刪除了 servicenet 連接介面,那將不再是問題。但是,需要注意的是,您將無法再使用與 servicenet 相關的服務。更多關於這方面的錯綜複雜的資訊是他們的知識庫文章 ID:2250

或者,您可以配置防火牆,以便只有您使用/需要 servicenet 的服務才能訪問您的伺服器。您甚至可以冒險進入通過雲 Vyatta 設備編排真正的專用網路的世界,並且仍然保留對 Rackspace 服務的訪問權限,如知識庫文章 ID:3454中所述。

所有這些文章都可以在以下網址找到:http ://www.rackspace.com/knowledge_center/

最終,您必須權衡哪種選擇最適合您。

高溫高壓

引用自:https://serverfault.com/questions/745609