首页 文章

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

提问于
浏览
0

我在'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 回答

  • 2

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

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

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

  • 2

    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包含更多信息,在底部包含一些指向备选方案的链接 .

相关问题