我已经使用以下配置设置了 NodePort 服务:
wordpress-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: wordpress
name: wordpress
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: wordpress
这是否足以从外部访问该服务,如果可以,我现在如何访问该服务?我需要什么细节 - 我如何确定它们 - 例如节点 IP。
最佳答案
For Kubernetes on GCE:
我们对 NodePort 类型的服务有同样的问题:我们如何从我们自己的主机访问节点端口服务?
@ivan.sim 的答案 (nodeIp:nodePort) 已在标记中,但是,除非您在 VPC 网络控制台上添加防火墙入口(入站到谷歌云)流量规则以允许您的服务,否则您仍然无法访问您的服务主机能够访问您的计算节点
上面的规则是危险的,应该只在开发过程中使用
您可以使用 Google Cloud 控制台或通过运行后续 kubectl 命令来查找节点端口,以找出运行包含容器的 pod 的节点。即
kubectl get pods , kubectl describe pod your-pod-name, kubectl describe node node-that-runs-you-pod
.status.addresses 有你的 ExternalIP如果我们可以仅使用
label/selector
提取在 pod 中运行容器的节点 IP,那就太好了。和几行命令,这就是我们所做的,在这种情况下,我们的选择器是 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
通知 :我们使用 json 路径来提取我们想要的信息,有关 json 路径的更多信息,请参阅:json path
您当然可以将其转换为以标签/选择器作为输入并输出运行容器的节点的外部 IP 的脚本!!!
要获取节点端口,只需键入:
$ kubectl get services
下港口您将看到类似 tagetPort:nodePort 的列。这个 nodeport 就是你想要的。
nodeIp:nodePort
关于kubernetes - 如何使用 kubernetes NodePort 从外部访问服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45802336/