我遇到了一个问题: 1)为部署中的POD声明hostNetwork = true,并创建部署。 2)使用nodePort向部署pod声明服务
我发现在运行pod的主机中,serviceCluster:nodePort无法访问nodePort。
当我删除hostnetwork = true时,可以通过群集中的任何主机节点访问serviceClusterIP:nodePort。
什么是worong?
我的kubernetes版本如下所示,我正在使用weave net。
# 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 :(得分:1)
在Kubernetes中,nodePort
是一种将pod的网络接口上的端口映射到所有节点上的端口的机制。
正常情况下,当你没有说hostNetwork=true
时,每个pod都有自己的“网络命名空间” - 它有自己的虚拟网络设备,它有一个唯一的IP地址,它有一个{{1} 127.0.0.1上的接口,由pod中的所有容器共享。
当您通过说localhost
要求您的pod使用主机的网络接口时,它没有以上任何内容;它只使用主机网络设备。并且hostNetwork=true
机制在此模式下不可用。
可能会在某处向您显示错误消息 - 查看nodePort
或kubectl events
的日志文件。如果您无法在任何地方找到错误,请将此事实视为针对Kubernetes的错误。