如何使用 NodePort 在外部公开 Kubernetes 服务

How to expose a Kubernetes service externally using NodePort

我 运行 Mac OSX 上的 CoreOS k8s 集群,这意味着它 运行 在 VirtualBox + Vagrant 中

我的 service.yaml 文件中有:

spec:
  type: NodePort

当我输入时:

kubectl get services

我明白了:

NAME             CLUSTER_IP       EXTERNAL_IP   PORT(S)    SELECTOR                                
kubernetes       10.100.0.1       <none>        443/TCP    <none>                             
my-frontend      10.100.250.90    nodes         8000/TCP   name=my-app

"nodes" 外部 IP 是什么?如何从外部访问我的前端?

这是关于节点地址的文档:http://kubernetes.io/docs/admin/node/#addresses

您可以在指定服务时指定nodePort的端口号。如果您没有手动指定端口,系统会为您分配一个。您可以 kubectl get services -o yaml 并在 spec.ports[*].nodePort 找到端口,如此处文档中所建议:https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/services.md#type-nodeport

并且您可以通过{节点的外部地址}访问您的前端:{nodePort}

希望对您有所帮助。

获取主机端口的最简单方法是 kubectl describe services my-frontend。 将显示节点端口。

您还可以查看 api:

  • api/v1/namespaces/{namespace_name}/services/{service_name}

或全部列出:

  • api/v1/namespaces/default/services

最后,你可以在service.yml

中选择一个固定的nodePort

除了 "NodePort" 类型的服务之外,还有一些其他方法可以从集群外部与 kubernetes 服务进行交互:

  • 使用服务类型"LoadBalancer"。它仅适用于某些云提供商,不适用于 virtualbox,但我认为了解该功能会很好。 Link to the documentation
  • 使用名为 "ingress" 的最新功能之一。这是手册 "An Ingress is a collection of rules that allow inbound connections to reach the cluster services. It can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc." 中的描述。 Link to the documentation
  • 如果 kubernetes 不是严格要求并且您可以切换到最新的 openshift 源(即 "kubernetes on steroids"),您可以使用名为 "router" 的源功能。

我假设您正在使用 MiniKube for Kubernetes。在这种情况下,要识别您的节点 ip 地址,请使用以下命令:

.\minikube.exe ip

如果暴露的服务是 type=Nodeport,使用以下命令检查暴露的端口:

.\kubectl.exe describe service <service-name>

检查结果中的节点端口。此外,如果您想通过 nice UI 获得所有这些详细信息,则可以在以下地址启动 Kubernetes 仪表板:

<Node-ip>:30000