在介紹Service這個api資源對象時,我們已經匯總過Service的幾種類型:ClusterIP、NodePort、LoadeBalancer,其實除了這三個外還有其它的類型,在本章節我們暫且不去討論。
這三種類型的Service,LoadBalancer依賴NodePort,而NodePort通常要和ClusterIP一起使用,如果在Service的yaml文件里定義type為LoadBalancer,則它會自動創建NodePort,而NodePort也會自動創建ClusterIP。
下面,再來演繹一下從Pod到Service的網絡變化情況:
1)單個Pod之間通信
單個Pod和Pod之間通信只能通過Pod的IP和Port來通信,如下圖
沒有多余的描述,只要知道對方Pod的IP以及服務的端口,直接去訪問就行了,簡單粗暴!
2)Pod有多個
當引入Deployment,并為Pod設置多個副本時,那么提供某一個服務(如Nginx服務)的Pod就不止一個了,此時即使知道了這些Pod的IP,那訪問起來也并不方便。所以,這里需要有一個統一入口,其它Pod通過這個統一入口去請求該服務(Nginx)對應的所有Pod。這時就有了Service這個資源對象,它主要作用就是用來提供統一入口,也就是說只需要一個IP就能訪問所有的Pod,而這個入口IP就是ClusterIP,也就是Service的IP。
3)外部資源訪問內部Pod
有了Service,的確可以很方便為內部的Pod提供入口,但是在集群外面訪問這個內部的資源就沒辦法了。于是,就有了這個NodePort,使用Service的NodePort類型,可以將Service的ClusterIP對應的Port映射到每一個Node的IP上,映射出去的Port范圍為30000~32767
4)借助公有云的負載均衡器
使用這個NodePort并不方便,畢竟它帶著一個長長的端口號,而且還有一個非常尷尬的問題,就是訪問時還得帶著Node的IP,如果這個Node掛掉,那么就無法訪問此資源,雖然可以通過另外一個Node去訪問,但這樣太麻煩在!所以,此時的解決方案是:借助三方的負載均衡器,將請求分發到所有的Node上,其底層還是NodePort。
總結:Service為內部Pod的統一入口,內部資源之間可以通過最簡單的ClusterIP進行通信,而外部資源訪問需要借助NodePort的形式,但是帶著長長端口不方便,于是又衍生了LoadBalancer的形式,這種形式需要借助三方的負載均衡器,將請求分發到每一個NodePort上。
審核編輯:劉清
-
均衡器
+關注
關注
9文章
219瀏覽量
30418 -
nginx
+關注
關注
0文章
154瀏覽量
12235
原文標題:通過5張圖了解K8S的Service網絡
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
OpenStack與K8s結合的兩種方案的詳細介紹和比較
k8s容器運行時演進歷史
![<b class='flag-5'>k8s</b>容器運行時演進歷史](https://file.elecfans.com/web1/M00/DD/EF/o4YBAGAY6MeARj6nAAHhKQyTw2M620.png)
Docker不香嗎為什么還要用K8s
簡單說明k8s和Docker之間的關系
K8S集群服務訪問失敗怎么辦 K8S故障處理集錦
![<b class='flag-5'>K8S</b>集群服務訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦](https://file.elecfans.com/web2/M00/12/E9/poYBAGEu8TeASCueAAAT1AA4nh0921.png)
mysql部署在k8s上的實現方案
k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres
什么是K3s和K8s?K3s和K8s有什么區別?
k8s生態鏈包含哪些技術
![<b class='flag-5'>k8s</b>生態鏈包含哪些技術](https://file1.elecfans.com/web2/M00/8F/8C/wKgZomTQXVCAEPtNAAANqN42JQk707.jpg)
常用的k8s容器網絡模式有哪些?
k8s云原生開發要求
![<b class='flag-5'>k8s</b>云原生開發要求](https://file1.elecfans.com/web2/M00/0B/06/wKgaomcZ5XOAO7bVAAGe1drYtZc769.png)
評論