如何从裸机群集中公开kubernetes服务

时间:2016-04-14 18:20:45

标签: kubernetes

我在'裸机'Ubuntu机器上运行kubernetes集群,如http://kubernetes.io/docs/getting-started-guides/ubuntu/所述。创建LoadBalancer服务后,我可以看到它运行的是哪个IP地址:

kubectl describe services sonar
Name:           sonar
IP:             10.0.0.170
Port:           <unset> 9000/TCP
Endpoints:      172.17.0.2:9000
. . .  

然后我将这个暴露给kubernetes集群之外运行的nginx世界。很棒,但在下一次服务部署时,ip会发生变化。我怎么处理这个?修复ip,使用环境变量,任何其他方式?

2 个答案:

答案 0 :(得分:2)

如果没有看到您的服务定义,我觉得您需要一种NodePort类型的服务,而不是LoadBalancer。使用NodePort服务,您只需将NGINX指向Ubuntu机器的IP地址和服务定义中指定的端口即可。只要Ubuntu机器的地址稳定,你应该没问题。

如果您在多台计算机上运行Kubernetes,只需将所有计算机的IP地址添加到NGINX计算机并让它进行负载平衡。

有关不同服务类型的更多信息,请访问:http://kubernetes.io/docs/user-guide/services/#publishing-services---service-types

答案 1 :(得分:2)

免责声明:我为Stackpoint工作,在研究了不同的选择后,我们决定为我们的产品使用入口控制器,所以我的答案偏向于入口。

使用ingress + ingress Controller,您可以平衡外部负载与pod端点。虽然服务是主要目标是跟踪容器和创建路由(以及其他内容)的资源,但入口是定义平衡规则的更好方法。到现在为止:

  • 支持主机名
  • 使用秘密支持TLS规范
  • 可以根据路径进行路由
  • 可以定义默认后端

入口的一大缺点是您需要一个入口控制器来监听Ingress,解决端点,将配置更改传达给平衡器并在必要时重新加载。由于我们可以控制Ingress将告诉平衡器,我们可以配置Keepalive,粘性会话,健康检查等等。

使用服务时,您无法完全控制所有这些参数。

kubernetes / contrib中有一个nginx example,应该与大多数情况相匹配。在Stackpoint,我们正在使用我们自己的haproxy Ingress控制器,并对结果非常满意(并且将简要介绍我们的UI中的Ingress管理)<​​/ p>

ingress kubernetes page包含更多信息,在底部是一个部分,其中包含一些指向备选方案的链接。