『中級篇』RoutingMesh之Ingress負載均衡(48)

原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
原文連接地址:『中級篇』RoutingMesh之Ingress負載均衡(48)docker

當建立或更新一個服務時,你能夠利用--publish選項把一個服務暴露到外部,在docker swarm模式下發佈一個端口意味着在集羣中的全部節點都會監聽這個端口,這時當訪問一個監聽了端口可是並無對應服務運行在其上的節點會發生什麼呢?網絡



  1. 接下來就該咱們的路由網(routing mesh)出場了,路由網時docker1.12引入的一個新特性,它結合了IPVS和iptables建立了一個強大的集羣範圍的L4層負載均衡,它使全部節點接收服務暴露端口的請求成爲可能。當任意節點接收到針對某個服務暴露的TCP/UDP端口的請求時,這個節點會利用預先定義過的Ingress overlay網絡,把請求轉發給服務對應的虛擬IP。ingress網絡和其餘的overlay網絡同樣,只是它的目的是爲了轉換來自客戶端到集羣的請求,它也是利用咱們前一小節介紹過的基於VIP的負載均衡技術。
  2. 當啓動服務時,你能夠爲你的應用建立一個外部的DNS服務,並把它映射到你集羣的任意節點或者是全部節點,你無需擔憂你的容器具體運行在那個節點上,由於有了路由網這個特性後,你的集羣看起來就像是單獨的一個節點同樣。app



上面這個圖代表了路由網是怎麼工做的:負載均衡

  • 服務(app)擁有兩份複製,並把端口映射到外部端口的8000
    路由網在集羣中的全部節點上都暴露出8000
  • 外部對服務app的請求能夠是任意節點,在本例子中外部的負載均衡器將請求轉發到了沒有app服務的主機上
  • docker swarm的IPVS利用ingress overlay網路將請求從新轉發到運行着app服務的節點的容器中

PS:負載均衡解決了單一入口負載到多個容器上問題, 可是因爲容器調度以後可能落到多個機器上, 假如某些主機上面沒有工做的容器,而對外服務時候又但願服務能夠被訪問, Routing Mesh概念引入是解決多個入口點負載到單個容器的問題。cdn

相關文章
相關標籤/搜索