2017-02-27 41 views
0

我遇到問題: 1)在部署中爲POD聲明hostNetwork = true並創建部署。 2)用nodePort聲明一個服務到部署podKubenetes POD hostnetwork cause nodePort不起作用

我發現nodePort不能被沒有運行pod的主機上的serviceClusterIP:nodePort訪問。

當我刪除hostnetwork = true時,serviceClusterIP:nodePort可以被羣集中的任何主機節點訪問。

什麼是worong?

我的kubernetes版本列在下面,我正在使用編織網。

# kubectl version 
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.1", GitCommit:"82450d03cb057bab0950214ef122b67c83fb11df", GitTreeState:"clean", BuildDate:"2016-12-14T00:57:05Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} 
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.0", GitCommit:"58b7c16a52c03e4a849874602be42ee71afdcab1", GitTreeState:"clean", BuildDate:"2016-12-12T23:31:15Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} 

回答

0

在Kubernetes,nodePort是一個豆莢的網絡接口上的端口映射到所有節點上的一個端口的機制。

正常情況下,當你不說hostNetwork=true是,每莢有自己的「網絡命名空間」 - 它有它自己的虛擬網絡設備有一個唯一的IP地址,並將其對127.0.0.1一個localhost界面由容器中的所有容器共享。

當您通過說hostNetwork=true要求您的容器使用主機的網絡接口時,它沒有上述內容;它只是使用主機網絡設備。此模式下nodePort機制不可用。

可能在某處有一個錯誤消息來告訴您有關此問題的信息 - 請參閱kubectl eventskubelet的日誌文件。如果您無法在任何地方發現錯誤,請將此事實記錄爲針對Kubernetes的錯誤。

+0

謝謝。我的理解是:1)nodePort是用指定節點和nodePort公開服務; 2)hostNetwork將在其運行的節點上運行pod。如果一個pod在主機網絡模型上運行,但是一個服務可以暴露某些端口作爲服務節點端口,對嗎? –

+0

「nodePort是用指定節點公開服務」 - 不,它暴露在_all_節點上。我鏈接到文檔。此外,我擴展了我的答案來描述主機網絡與普通的pod網絡。 – Bryan

相關問題