2016-12-20 32 views
0

我在Consul做POC支持服務發現和多個微服務版本。 Consul客戶端和服務器集羣(3臺服務器)在Linux VM上進行設置。我遵循Consul的文檔,並且設置成功。設置無碼頭的生產用領事

這是我的疑問。我的設置完全在虛擬機上。我已經使用HTTP API添加了一個服務定義。相同的服務正在兩個節點上運行。 的服務是正確註冊:

curl http://localhost:8600/v1/catalog/service/my-service 

給了我兩個節點的詳細信息。

當我做一個DNS查詢:

dig @127.0.0.1 -p 8600 my-service.service.consul 

我能看到它承載的服務節點的預期結果。但由於服務名稱未解析,我無法ping服務。

ping -c4 my-service or ping -c4 my-service.service.consul 

ping:unknown host。

如果我進入一個映射在/ etc/hosts文件my-service,我只能從同一個VM ping此。我將無法在同一LAN或WAN上的另一臺虛擬機上ping此信息。 DNS的默認端口是53. Consul DNS接口監聽8600.我無法使用Docker進行DNS轉發。我可能在這裏錯過了什麼嗎?無需Docker/dnsmasq或iptables更新,可以讓DNS查詢工作嗎? 需要明確的是,這裏是我想有最後的結果是什麼:

ping my-service 

這需要萍我已經配置的節點,在一個循環的方式。

請多多包涵,如果這個問題是基本的,我已經通過各領事相關的問題在這樣走了。

也經歷了thisthis這些也說我需要做額外的設置。

回答

2

等等!請不要這樣做!

DO。不。跑。 CONSUL。如。根。

請。你可以,但不要。請執行以下操作:

  1. 在虛擬機上運行緩存或轉發DNS服務器。我傾向於dnsmasq,因爲它在普通情況下簡單而穩定。
  2. 配置dnsmasq將TLD .consul轉發到consul代理正在監聽127.0.0.1:8600(默認值)。
  3. 更新您的/etc/resolv.conf文件以指向127.0.0.1作爲您的域名服務器。

有這樣做的幾種方法,而官方的文檔有寫起來是值得探討:

https://www.consul.io/docs/guides/forwarding.html

這應該讓你開始。

+0

謝謝你的回答,肖恩。我沒有以領導身份運行領事,而是減少了DNS端口的權限。 –

+0

您會發現在端口53上運行緩存DNS服務器的其他好處:在網絡中斷或領事中斷的情況下應用程序的性能和穩定性,但是感謝您使用'setcap'(這不是便攜式的,但工作正常) 。 – Sean

+1

嗨肖恩,我決定和dnsmasq一起去。沒有麻煩和更少的步驟。 –

1

這可能是一個相當複雜的話題,但最簡單的方法是使用ports指令將consul改爲綁定到端口53,並將一些遞歸添加到consul配置可以將真正的DNS請求傳遞到已滿的主機DNS功能。像這些位:

{ 「recursors」:[ 「8.8.8.8」, 「8.8.4.4」 ], 「端口」:{ 「DNS」:53 } }

然後修改您的系統,以使用具有/etc/resolve.conf中的名稱服務器條目的dns的consul服務器。根據您的操作系統,您可能能夠在resolv.conf文件中使用端口,並避免必須處理需要root的Consul以綁定端口53.

在更復雜的情況下,我知道很多人使用未綁定或綁定來完成拆分DNS,本質上做相反的事情,將.consul域路由到其DNS基礎結構的組織級別的非特權端口上的consul集羣。

+1

謝謝你的回答,傑伊。我一直試圖避免做根用戶的任何事情。你有什麼想法嗎? –

+0

我得到這個錯誤,因爲我不能以root用戶身份登錄:'錯誤啓動dns服務器:dns udp安裝失敗:監聽udp 127.0.0.1:53:綁定:權限被拒絕 –

+1

如果你沒有root權限或類似的東西sudo,在系統級別上你可能不太會運氣。爲了使主機上的所有東西都被動地工作,你需要在端口53上綁定* something *。這不一定是領事,它可能是綁定或非綁定的東西,但更有可能的是,我仍然需要root來設置它們。 – Jay