9

使用:

kubectl expose deployment <Name-Of-Servce> --name=loadbalancer --port=8080 --target-port=8080 --type=LoadBalancer

显示kubectl get services待处理:

loadbalancer                 LoadBalancer   <x.x.x.x>   <pending>     8080:32670/TCP   2m

在 Docker 支持 Kubernetes 之前,我可以使用 MiniKube 和 Helm:

helm install stable/jenkins
kubectl get services // To get the service name
minikube service original-llama-jenkins // << The service name

现在我们有了支持 Kubernetes 的 Docker for Mac(Edge),如何添加一个EXTERNAL-IP?

4

2 回答 2

18

LoadBalancer 和 NodePort 类型都适用于 Docker for Mac Kubernetes。实际上,这是一个可爱的魔法。只需点击本地主机:[端口]。对于 NodePort,除非在服务定义中指定,否则会自动分配端口。对于 LoadBalancer 类型,它也在服务定义中指定。请注意,在使用 LoadBalancer 时,来自的状态kubectl将显示<pending>为 EXTERNAL-IP,但它确实有效。

这家伙注意到它是通过 vpnkit 暴露的,尽管我认为另一个来源会有所帮助:

https://github.com/jnewland/local-dev-with-docker-for-mac-kubernetes

编辑:更新,因为 Kubernetes 现在可以在 DfM 的稳定版本中使用。

于 2018-02-03T02:18:01.497 回答
-5

除非“Docker for Mac”发生了非常神奇的事情,否则它type: LoadBalancer只是为云环境设计的,入口控制器可以在其中配置云负载均衡器(即 AWS 的 ELB、GKE ......无论他们使用什么)。

也就是说,可以从您的输出中看到 kubernetes 的行为就像它一样type: NodePort(您的具体示例显示端口32670转到8080您的服务上的端口)。目前尚不清楚您是否可以按原样使用该 NodePort-ish 端口,或者处于“挂起”状态的服务是否以某种方式意味着流量不会按预期路由。我想也许只是尝试一下?

或者您可以跳过伪装并合法地创建服务type: NodePort,然后您和 kubernetes 将在同一页面上了解正在发生的事情。

您可以选择的另一种方式是运行集群内的 Ingress 控制器,例如ingress-nginx,并使用虚拟主机在一个端口上公开您的所有服务。如果您有很多服务要公开,那可能会方便得多,但如果只为其中一两个服务设置可能会让人头疼。

于 2018-01-14T06:08:46.533 回答