我们利用Ingress创建HTTPS负载均衡器,直接转发到我们的(通常是nodejs)服务。但是,最近我们希望在Google负载均衡器无法提供的nodejs前面更多地控制流量。
我们在堆栈的其他部分使用nginx,所以这似乎是一个不错的选择,我已经看到了几个nginx用于Kubernetes前端服务的例子,通常是两种配置中的一种。
每种方法的优缺点是什么?如何确定哪种方法最适合我们的用例?
答案 0 :(得分:2)
继Vincent H之后,我建议将Google HTTPS Load Balancer流水线化为nginx入口控制器。
正如您所提到的,这可以独立扩展;有它自己的健康检查;并且您可以标准化您的错误页面。
我们通过拥有一个kubernetes.io/ingress.class: "gce"
入口对象来实现这一目标,该对象具有我们的nginx入口控制器的默认后端。我们所有其他入口对象都使用kubernetes.io/ingress.class: "nginx"
进行注释。
我们正在使用此处记录的控制器:https://github.com/kubernetes/ingress/tree/master/controllers/nginx。使用custom /etc/nginx/template/nginx.tmpl
可以完全控制入口。
为了完全透明,我们尚未在nginx控制器中设置自定义错误页面,但documentation显示为直接。
答案 1 :(得分:1)
列出的要求之一是您要将pod readyinessProbe解耦,以便您可以提供自定义错误页面。如果你要为每个pod添加一个nginx容器,这是不可能的。然后,当pod中的一个容器无法粘附到活动/准备就绪探针时,将重新启动pod。就个人而言,我也更喜欢尽可能地分离,以便你可以扩展独立的pod,如果需要的话,分配自定义的机器类型,并且通过仅启动你真正需要的nginx实例(主要是内存)来节省一些资源。