将 Kubernetes 服务暴露给 mesosphere 的 DCOS 内部的 public

Expose Kubernete service to public inside mesosphere's DCOS

已关注 https://www.mesosphere.com/amazon/ 我在 Amazon AWS 上创建了一个 DCOS 集群。 然后我跟着http://kubernetes.io/v1.1/docs/getting-started-guides/dcos.html在上面安装了Kubernete。 然后我关注了http://kubernetes.io/v1.1/docs/user-guide/quick-start.html 我能够成功启动 pods。 然后我 运行 遇到了将服务公开给 public 的问题。

$ dcos kubectl expose rc my-nginx --port=80 --type=LoadBalancer
service "my-nginx" exposed
$ dcos ssun$ dcos kubectl get svc my-nginx
NAME       CLUSTER_IP    EXTERNAL_IP   PORT(S)   SELECTOR       AGE
my-nginx   10.10.10.32                 80/TCP    run=my-nginx   8s

EXTERNAL_IP 地址不存在。按照教程,应该可以的。所以我认为这与我的 Kubernete 在 DCOS 中的事实有关。

请帮忙。非常感谢!

Mesos/DCOS 上的 Kubernetes 尚不支持自动创建 LoadBalancer。

quick start 所述:

Through integration with some cloud providers (for example Google Compute Engine and AWS EC2), Kubernetes enables you to request that it provision a public IP address for your application.

据我所知,目前只有 GCE、GKE 和 AWS 支持自动创建 LoadBalancer。

DCOS 的另一个主要区别(与 kubernetes 相比)是它默认带有两个区域:public 和私有区域。因此,如果 public 节点上没有反向代理,则无法从外部访问私有节点上安排的任何内容。

此外,DCOS 上的 Kubernetes 还不支持 IP-per-container。 DCOS/Calico integration 正在开发对 IP-per-container 的支持。据报道,一些社区成员还尝试使用集群范围 docker 覆盖网络。

目前,有几个替代选项可以从外部访问您的 pod:

  1. 在所有 public 个从站(使用 resource role annotations)和 hostPort:80 上部署您的 pod。然后命中DCOS的地址public slave AWS ELB.
  2. 创建您自己的负载均衡器 nginx pod(例如 service-loadbalancer 并使用 hostPort:80 将其安排在 public 从站上。然后点击它所在的主机节点的 IP。

让这种体验在 DCOS 上更加流畅绝对是 Mesosphere Kubernetes 团队的首要任务。希望该解决方案将包括自动创建 LoadBalancer。