CoreOS:在 etcd2 cloud-config 中註入一個真實的私有 IP
我在 Rackspace 上有三個網路:
- 公共網路
- 服務網路
10.181.XXX.XXX
(他們有時稱其為私有網路,但它本身並不是私有的,它是數據中心範圍內的私有網路,因此他們的租戶可以共享它)192.168.3.0/24
通過網路 UI 創建的真正的專用網路我的計劃是啟動一個安全的 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
.我的問題是:
- 我是否在 CoreOS 集群設置領域做了一些奇怪的事情,以至於我無法輕鬆自然地實現目標?如果是這樣,您將如何佈置一個
etcd
在真正的專用網路中執行的安全集群?- 有沒有辦法將動態值“注入”到
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/
最終,您必須權衡哪種選擇最適合您。
高溫高壓