2016-08-02 90 views
1

我們正在擴大我們的微服務羣應用程序,我正在考慮Kubernetes滿足我們的需求。我潛入現代配器之前,我想通過以下方式服務發現:Kubernetes - 內部負載平衡安全

  • 集羣的自舉了某種分佈式服務註冊(在我們的例子領事)的
  • 每個服務與服務註冊表啓動端點莫名其妙
  • 通過每個服務自行註冊本身在註冊表
  • 每當服務需要一些其他服務的地址,它將從註冊表中的接觸點

在這種情況下,如果有任何服務失敗或某種網絡中斷髮生,客戶端服務可能會繼續執行下一個聯繫點並最終成功(如果它未完全中斷)。至於我已經明白,kubernetes使用完全不同的模式:

  • 在kubernetes所有艙體自行註冊
  • Kubernetes提供單一的負載平衡器例如,通過傳遞流量服務
  • 負載均衡本身可能被發現通過環境變量或DNS查詢(這可能會導致令人毛骨悚然的東西,如從DNS記錄獲取端口或只是陳舊的環境變量)

而這讓我感到困惑。如果我是正確的(隨時告訴我我不是,如果是這種情況),這基本上將負載平衡器轉換爲SPOF,可能會停止整個應用程序在它死亡的那一刻。我對嗎? Kubernetes有任何保證,這種情況不會發生或將在<N> <時間單位>解決?

回答

4

Kubernetes(kube-proxy)中的羣集內負載均衡器分佈在您的所有羣集節點中。它將所有服務端點同步到節點上的iptables規則。 Kube-proxy通過kubelet進行健康檢查,如果30秒內健康狀況不佳(可以配置,我認爲),它將重新啓動。實際流量不會通過kube-proxy二進制文件,因此如果kube-proxy確實卡住了,最糟糕的情況是您的服務端點視圖變得過時。請參閱文檔以及該kubernetes網絡套件的服務文檔Services FAQsslides 46-61Virtual IPs section以獲取有關kube-proxy的更多詳細信息。

對於服務發現,每個服務都可以通過kube-dns的名稱訪問。豆莢的搜索路徑中有kube-dns,所以不需要環境變量魔術。同一套牌的Slides 68-83有DNS-> Virtual IP-> Pod流量的完整漫遊。

因此,負載平衡器並不是一個真正的SPOF。它應該主要與在同一節點上運行的工作負載共享命運。 Kube-dns可能是服務發現的SPOF,但它可以被複制,無論你喜歡多少。

+0

我現在很困,但我想我明白了。我想問的最後一件事情 - iptables的實現總是路由到相同的後端,直到重新配置,對吧? – Etki

+1

單個連接將路由到相同的後端,但多個連接將進行負載平衡。對於每個後端,kube-proxy配置iptables w /'-m statistic --mode random --probability {1/N}',其中N是後端的數量。 –