对于 GCE 上的 Kubernetes:
关于 NodePort 类型的服务,我们有同样的问题:我们如何从自己的主机访问节点端口服务?
@ivan.sim 的答案 (nodeIp:nodePort) 是正确的,但是,除非您在 VPC 网络控制台上添加防火墙入口(入站到谷歌云)流量规则以允许您的服务,否则您仍然无法访问您的服务主机能够访问您的计算节点
the above rule is dangerous and should be used only during development
您可以使用 Google Cloud 控制台查找节点端口,也可以通过运行后续 kubectl 命令来查找运行包含容器的 pod 的节点。 IEkubectl get pods , kubectl describe pod your-pod-name, kubectl describe node node-that-runs-you-pod
.status.addresses 有您的外部IP
如果我们能够仅使用 a 来提取在 pod 中运行容器的节点 IP,那就太好了label/selector
和几行命令,这就是我们所做的,在本例中我们的选择器是app: your-label
:
$ nodename=$(kubectl get pods -o jsonpath='{.items[?(@.metadata.labels.app=="your-label")].spec.nodeName}')
$ nodeIp=$(kubectl get nodes -o jsonpath='{.items[?(@.metadata.name=="'$(echo $nodename)'")].status.addresses[?(@.type=="ExternalIP")].address}')
$ echo nodeIp
notice:我们使用 json 路径来提取我们想要的信息,有关 json 路径的更多信息请参阅:json路径
您当然可以将其转换为一个脚本,该脚本将标签/选择器作为输入并输出运行容器的节点的外部 IP!
要获取节点端口,只需键入:
$ kubectl get services
在下面PORT(S)列中您将看到类似 targetPort:nodePort 的内容。这个节点端口就是你想要的。
nodeIp:nodePort