我在'bare metal' 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 回答
没有看到你的服务定义,我觉得你想要一种
NodePort
类型的服务,而不是LoadBalancer
. 使用NodePort服务,您只需将NGINX指向Ubuntu机器的IP地址和服务定义中指定的端口即可 . 只要Ubuntu机器的地址稳定,你应该没问题 .如果您在多台计算机上运行Kubernetes,只需将所有计算机的IP地址添加到NGINX计算机并让它进行负载 balancer .
有关不同服务类型的更多信息,请访问:http://kubernetes.io/docs/user-guide/services/#publishing-services---service-types
Disclaimer :我为Stackpoint工作,在研究了不同的选择后,我们决定为我们的产品使用入口控制器,所以我的答案偏向于入口 .
使用
ingress
ingress Controller
,您可以 balancer 外部负载到pod endpoints . 虽然服务是主要目标是跟踪容器和创建路由(以及其他内容)的资源,但入口是定义 balancer 规则的更好方法 . 到现在为止:支持主机名
使用机密支持TLS规范
可以根据路径进行路由
可以定义默认后端
入口的一大缺点是您需要一个入口控制器来监听Ingress,解决 endpoints ,将配置更改传达给 balancer 器并在必要时重新加载 . 由于我们控制着Ingress将告诉 balancer 器的内容,我们可以配置Keepalive,粘性会话, Health 检查,......等 .
使用服务时,您无法完全控制所有这些参数 .
在kubernetes / contrib中有一个nginx example应该匹配大多数情况 . 在Stackpoint,我们正在使用我们自己的haproxy Ingress控制器,并对结果非常满意(并且将简要介绍我们的UI中的Ingress管理)
ingress kubernetes page包含更多信息,在底部包含一些指向备选方案的链接 .