我在'裸机'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,使用环境变量,任何其他方式?
答案 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端点。虽然服务是主要目标是跟踪容器和创建路由(以及其他内容)的资源,但入口是定义平衡规则的更好方法。到现在为止:
入口的一大缺点是您需要一个入口控制器来监听Ingress,解决端点,将配置更改传达给平衡器并在必要时重新加载。由于我们可以控制Ingress将告诉平衡器,我们可以配置Keepalive,粘性会话,健康检查等等。
使用服务时,您无法完全控制所有这些参数。
kubernetes / contrib中有一个nginx example,应该与大多数情况相匹配。在Stackpoint,我们正在使用我们自己的haproxy Ingress控制器,并对结果非常满意(并且将简要介绍我们的UI中的Ingress管理)</ p>
ingress kubernetes page包含更多信息,在底部是一个部分,其中包含一些指向备选方案的链接。