在 Docker 上为 Mac 启动 Ingress 服务

Starting an Ingress service on Docker for Mac

使用:

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

现在我们有 Docker 用于支持 Kubernetes 的 Mac(Edge),您如何添加 EXTERNAL-IP

除非“Docker for Mac”发生了一些非常神奇的事情,否则 type: LoadBalancer 只是为云环境设计的,Ingress 控制器可以 provision a cloud load balancer(即 AWS 的 ELB,GKE 的......无论他们使用什么)。

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

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

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

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

这个人指出它是通过 vpnkit 公开的,但我认为另一个来源会有所帮助:

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

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