2017-10-12 52 views
0

我對Kubernetes NodePort服務仍有疑問。Kubernetes NodePort類型服務如何將負載平衡到pod

NodePort:在上公開服務節點的IP位於靜態端口(NodePort)。將自動創建NodeIP服務將路由到的ClusterIP服務。您可以通過以下方式聯繫集羣外部的NodePort服務:。

如果我有兩個Node:nodeA和nodeB,並且如果我只在nodeA上部署應用程序,則創建一個NodePort服務,那麼我可以同時使用nodeA和nodeB兩個ip來訪問此服務?

我有一些測試,結果是沒有....

我做了兩類型的測試:

的Test1:

我部署一個部署有兩個吊艙,一個是在NodeA上,另一個在NodeB上。然後創建一個NodePort服務來訪問它。 我可以通過使用NodeA和NodeB ips來訪問服務。然後我刪除NodeA上的pod,然後重試。我發現我無法使用NodeA ip訪問服務,但可以使用NodeB ip訪問。該吊艙啓動NodeA上之後,然後我就可以通過使用IP NodeA上

Test2的訪問:

我部署一個部署只有一個吊艙,它是在NodeA。然後創建一個NodePort服務來訪問它。 我只能使用NodeA ip訪問服務,但不能使用NodeB ip。

所以我的問題是:

對於NodePort類型,它只能用於該吊艙/豆莢都在同一節點?如果我使用NodeA ip,服務將不會負載平衡請求到NodeB上的pod?

非常感謝! :)

+0

當你測試節點A和節點B是你從一些外部「工作站」節點或節點他們自己嗎? –

回答

0

如果我有兩個節點:nodeA和節點B;如果我只nodeA上部署應用程序,然後創建一個NodePort服務,那麼我可以同時使用nodeA和nodeB上IPS訪問此服務?

我有一些測試,結果是沒有....

在這種情況下,它聽起來很像三種情況之一是不會發生:你沒有在所有節點上運行kube-proxy ,或者節點被非常嚴格地限制在另一個防火牆中,或者您沒有使用軟件定義的網絡(例如絨布,印花布等)。

據我所知,NodePort行爲是使用iptables應用於所有機器實現的,導致機器A的端口X上接收到的流量被有效NAT轉換到其中一臺機器上,實際的豆莢正在運行,返回到機器A,回到請求者。 kube-proxy的工作是安裝初始的iptables規則,然後隨着Pods進出集羣,隨後保持最新狀態。通過在運行kube-proxy的節點上運行iptables -L -n -t nat,可以觀察到正確的行爲,並觀察爲各種kubernetes服務命名的規則。他們甚至有益包括在iptables規則的意見,我認爲是很好的

的防火牆的情況下,我認爲是不言而喻的

我其實從來沒有一個軟件定義的網絡運行kubernetes,所以我在我不是提供故障排除步驟的好地方(除了:安裝法蘭絨或印花布,並在他們的迷人中歡欣鼓舞)。也許其他人將能夠權衡,如果這實際上是你的情況

+0

謝謝馬特。是的,我發現一些NAT配置不正確。我需要繼續檢查。謝謝! :) – JordanZT

相關問題