2017-05-19 33 views
4

我們利用Ingress創建HTTPS負載均衡器,這些負載均衡器直接轉發到我們的(通常是nodejs)服務。但是,最近我們希望更多地控制Google負載均衡器未提供的nodejs前面的流量。如何在Kubernetes(GKE)和Google HTTPS負載平衡器上使用nginx

  • 標準化,自定義錯誤頁
  • 標準重寫規則(例如重定向HTTP到HTTPS)
  • 從負載均衡的健康檢查解耦莢readinessProbes(所以我們仍然可以提供自定義錯誤頁時,有沒有健康的豆莢)。

我們在堆棧的其他部分使用nginx的所以這似乎是一個不錯的選擇,我已經看到了nginx的幾個例子被用於前服務Kubernetes,通常以兩種配置之一。

  • 每個pod中的nginx容器將流量直接轉發到本地主機上的應用程序。
  • 單獨的nginx部署&服務,獨立擴展並將流量轉發到相應的Kubernetes服務。

每種方法的優缺點是什麼?我應該如何確定哪種方法最適合我們的用例?

回答

1

列出的要求之一是,您想分離pod準備探測器,以便您可以提供自定義錯誤頁面。如果您將nginx容器添加到每個容器,這是不可能的。然後,當容器中的一個容器未能粘附活性/準備就緒探針時,容器將重新啓動。就我個人而言,我也傾向於儘可能多地分離,以便您可以縮放獨立的容器,根據需要分配自定義機器類型,並通過僅啓動您真正需要的nginx實例(主要是內存)來節省一些資源。

+0

是的,這是一個很好的觀點。感謝您幫助澄清我的想法 - 我發現自己尋找來自以前做過這些的人的許多東西的驗證。主要是爲了檢查我在設計這些系統時不會錯過一些非常明顯的事情。 :) –

1

繼Vincent H之後,我建議將Google HTTPS負載平衡器流水線化爲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顯得很簡單。

+0

你能詳細闡述一下實現細節嗎?我面臨同樣的挑戰。 – Hawky4s

+0

有趣的,謝謝你。您是否有理由在nginx之前使用GCE HTTP負載平衡器,而不是僅支持TCP的網絡負載平衡器? –

+0

我們將Kubernetes作爲GKE運行,因此集成已經在集羣中爲自己設置。坦率地說,這只是當時爲我們做的最簡單的事情,並且能夠滿足我們的需求。 – Tribal