kubernetes - 如何使用 kubernetes NodePort 从外部访问服务?

标签 kubernetes

我已经使用以下配置设置了 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 网络控制台上添加防火墙入口(入站到谷歌云)流量规则以允许您的服务,否则您仍然无法访问您的服务主机能够访问您的计算节点

enter image description here
上面的规则是危险的,应该只在开发过程中使用

您可以使用 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/

相关文章:

kubernetes - 是否有在 kubernetes 中创建守护程序集的命令式命令?

kubernetes - kube-linter lint 是否可以每次只拉取请求更改而不是整个 kubernetes 文件

amazon-web-services - 在service.beta.kubernetes.io/aws-load-balancer-type批注中指定nlb时创建的经典负载均衡器

kubernetes - 如何为kubernetes集群创建多个管理员用户?

string - 如何使用 helm 设置多个值?

kubernetes - 如何将 kubernetes 部署/副本集的名称传递给容器?

python-3.x - 无法在运行 Sparkapplication 的 pod 上使用 configmap 挂载配置文件

django - kubernetes 集群中 django 应用程序的 Nginx 配置

kubernetes - 将Kubernetes配置为每个至少有一个Pod

java - 如何获取 Kubernetes 中 POD 中的特定应用程序(在多个正在运行的应用程序中)提供的特定请求?