如何使用 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
我 运行 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