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

时间:2015-11-28 10:25:44

标签: kubernetes

我在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

什么是“节点”外部IP?如何从外部访问我的前端?

4 个答案:

答案 0 :(得分:18)

除了&#34; NodePort&#34;服务类型还有一些其他方法可以与集群外部的kubernetes服务进行交互:

  • 使用服务类型&#34; LoadBalancer&#34;。它仅适用于某些云提供商,不适用于虚拟机,但我认为了解该功能会很好。 Link to the documentation
  • 使用名为&#34; ingress&#34;的最新功能之一。以下是手册中的说明&#34; Ingress是一组允许入站连接到达群集服务的规则。它可以配置为提供外部可访问的URL,负载平衡流量,终止SSL,提供基于名称的虚拟主机等服务。&#34; Link to the documentation
  • 如果kubernetes不是严格的要求,你可以切换到最新的openshift原点(&#34; kubernetes on steroids&#34;)你可以使用名为&#34; router&#34;的原点功能。

答案 1 :(得分:7)

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

.\minikube.exe ip

如果公开的服务是type = Nodeport,要检查公开的端口,请使用以下命令:

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

检查结果中的节点端口。此外,如果您想通过漂亮的UI获得所有这些细节,那么您可以在以下地址启动Kubernetes Dashboard:

<Node-ip>:30000

答案 2 :(得分:3)

获取主机端口的最简单方法是The system creates a new task and instantiates the activity at the root of the new task. However, if an instance of the activity already exists in a separate task, the system routes the intent to the existing instance through a call to its onNewIntent() method, rather than creating a new instance. Only one instance of the activity can exist at a time. 。 将显示节点端口。

您也可以查看api:

  • kubectl describe services my-frontend

或全部列出:

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

最后,您可以在service.yml

中选择固定的nodePort

答案 3 :(得分:1)

以下是节点地址的文档: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

您可以在{nodes'outternal addresses}:{nodePort}

访问您的前端

希望这有帮助。