2017-06-12 25 views
0

我已經建立了一個實驗本地 Kubernetes集羣有一個主節點和三個從屬節點。我已經爲在端口10001上偵聽的定製服務創建了部署。目標是訪問具有穩定IP /主機名的示例性端點/hello,例如, http://<master>:10001/hello如何訪問本地羣集中的Kubernetes窗格?

部署完部署之後,創建的pod會很好,並且可以通過它們的集羣IP進行訪問。

我瞭解雲提供商的解決方案是爲部署創建一個負載平衡器服務,以便您只需expose一項服務。但是,這顯然不支持本地羣集。爲此設置Ingress似乎矯枉過正。不是嗎?

看起來更像是kube proxy是要走的路。但是,當我在主節點上運行kube proxy --port <port>時,我可以訪問http://<master>:<port>/api/...,但不能訪問實際的pod。

有很多相關的問題(例如How to access services through kubernetes cluster ip?),但沒有(接受)的答案。 topic上的Kubernetes documentation也相當稀少,所以我甚至不確定在概念上什麼是正確的方法。

因此,我尋找一個直接的解決方案和/或一個很好的教程。這似乎是一個非常典型的用例,雖然缺乏清晰的路徑。

回答

0

一個Ingress可能是你最簡單的賭注。

您可以非常簡單地安排創建Nginx IngressController;這是a guide。請注意,此設置使用DaemonSet,因此每個節點上都有一個IngressController。它也使用hostPort配置選項,因此IngressController將監聽節點的IP,而不是一個不穩定的虛擬服務IP。

現在您只需要將您的HTTP流量傳輸到任何一個節點。您可能需要爲每個服務定義一個外部DNS條目,每條指向您節點的IP(即多個A/AAAA記錄)。入口將基於HTTP主機名使用name-based virtual hosting消除歧義並在集羣內路由。

如果您需要公開非HTTP服務,這會涉及更多的內容,但您可以查看nginx入口文檔以獲取更多示例(例如UDP)。

0

如果一個Ingress控制器對於您的方案來說是過度殺毒,那麼您可能需要嘗試使用NodePort類型的服務。您可以指定端口,或讓系統爲您自動分配一個端口。

A NodePort服務將在羣集中所有節點的同一端口上公開您的服務。如果您可以通過網絡訪問節點,則可以使用配置中指定的節點IP和端口訪問您的服務。

顯然,這不會節點之間的負載平衡。如果您想模擬真正的負載均衡器會做什麼,您可以添加一個外部服務來幫助您做到這一點。一個簡單的選擇是運行諸如rocky-cli之類的東西。

+0

已經有一個用於負載平衡的外部HAProxy,這似乎是我場景中最流暢的解決方案。但是,即使在添加iptables規則(我可以通過它們的外部IP從機器內部訪問它們)之後,節點仍然被外部請求阻止:'iptables -A INPUT -p tcp --dport -j ACCEPT' Any在這方面的線索? – Carsten