0

我遇到一个问题:1)在部署中为 POD 声明 hostNetwork=true,并创建部署。2) 向部署 pod 声明一个带有 nodePort 的服务

我发现 nodePort 无法通过 serviceClusterIP:nodePort 在未运行 Pod 的主机中访问。

当我删除 hostnetwork=true 时,集群中的任何主机节点都可以访问 serviceClusterIP:nodePort。

有什么毛病?

下面列出了我的 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"}
4

1 回答 1

2

在 Kubernetes 中,nodePort这是一种将 pod 网络接口上的端口映射到所有节点上的端口的机制。

正常情况下,当您不说hostNetwork=true每个 pod 都有自己的“网络命名空间”时 - 它有自己的虚拟网络设备,具有唯一的 IP 地址,并且localhost在 127.0.0.1 上有一个由所有容器共享的接口吊舱。

当您通过说 要求您的 pod 使用主机的网络接口时hostNetwork=true,它没有上述任何一项;它只使用主机网络设备。并且该nodePort机制在此模式下不可用。

可能在某处有一条错误消息告诉您有关此问题的信息 - 查看kubectl events或查看kubelet的日志文件。如果您在任何地方都找不到错误,请将此事实作为针对 Kubernetes 的错误提交。

于 2017-02-27T11:13:31.927 回答