我使用以下配置设置了 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
Run Code Online (Sandbox Code Playgroud)
这足以从外部访问该服务吗?如果可以,我现在如何访问该服务?我需要哪些详细信息 - 以及如何确定它们 - 例如节点 IP。
对于 GCE 上的 Kubernetes:
关于 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 有你的外部IP
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
Run Code Online (Sandbox Code Playgroud)
注意:我们使用 json 路径来提取我们想要的信息,有关 json 路径的更多信息请参阅:json 路径
您当然可以将其转换为一个脚本,该脚本将标签/选择器作为输入并输出运行容器的节点的外部 IP!
要获取节点端口,只需键入:
$ kubectl get services
Run Code Online (Sandbox Code Playgroud)
在PORT(S)列下,您将看到类似 tagetPort:nodePort 的内容。这个节点端口就是你想要的。
nodeIp:nodePort
Run Code Online (Sandbox Code Playgroud)
当您将服务定义为 type 时NodePort,集群中的每个节点都会将该端口代理到您的服务。如果您的节点可以从 Kubernetes 集群外部访问,您应该能够访问 处的服务nodeIP:nodePort。
要确定nodeIP特定节点,您可以使用kubectl get no <node> -o yaml或kubectl describe no <node>。该status.Addresses领域将会引起人们的兴趣。一般来说,您会看到诸如HostName、ExternalIP和InternalIP之类的字段。
要确定nodePort您的服务,您可以使用kubectl get svc wordpress -o yaml或kubectl describe svc wordpress。这spec.ports.nodePort是您需要的端口。
| 归档时间: |
|
| 查看次数: |
15735 次 |
| 最近记录: |