深刻玩轉K8S以外網如何訪問業務應用

有一個問題就是如今個人業務分配在多個Pod上,那麼若是我某個Pod死掉豈不是業務完蛋了,固然也會有人說Pod死掉沒問題啊,K8S自身機制Deployment和Controller會動態的建立和銷燬Pod來保證應用的總體穩定性,那這時候還會有問題,那就是每一個Pod產生的IP都是動態的,那因此說從新啓動了我對外訪問的IP豈不是要變了,別急,下面咱們來解決下這個問題。html

 

能夠經過Service來解決如上所遇到的問題,那麼什麼是Service呢?node

 

Service是kubernetes最核心的概念,經過建立Service,能夠爲一組具備相同功能的容器應用提供一個統一的入口地址,而且將請求進行負載分發到後端的各個容器應用上。nginx

 

簡單來講Service就是一個把全部Pod都池化的一個組,而後對外統一固定一個IP,具體是哪些Pod能夠經過以前介紹到的Label標籤來進行設置。後端

 

在建立Service以前先看看咱們在部署應用的時候建立的nginx.ymlapi

 

剛在有提到,就是說哪些Pod被Service池化是根據Label標籤來的,那麼能夠看到圖上所標識的nginx字樣,後面咱們建立Service會用到。app

 

下面來建立個Service看看負載均衡

 

解釋下這個yml文件哈,其意思就是說呢V1是api的版本,而後Kind表示當前資源類型爲Service,selector選擇以前Label標籤爲nginx的Pod做爲Service池化的對象,最後說的是把Service的8080端口映射到Pod的80端口。curl

 

執行kubectl apply建立Servie nginx-svcide

1url

kubcetl apply –f nginx-svc.yml

 

建立完成以後nginx-svc會分配到一個cluster-ip,能夠經過該ip訪問後端nginx業務。

 

建立完以後能夠查看service詳情查看後端都包含哪些pod

1

kubectl describe service nginx-svc

 

那它是怎麼實現的呢?答案是經過iptables實現的地址轉換和端口轉換,能夠用iptables-save查看。

 

那這時候有人說了,仍是不能外網訪問啊,別急下面咱們來進行外網地址訪問設置。在實際生產環境中,對Service的訪問可能會有兩種來源:Kubernetes集羣內部的程序(Pod)和Kubernetes集羣外部,爲了知足上述的場景,Kubernetes service有如下三種類型:

 

1.ClusterIP:提供一個集羣內部的虛擬IP(與Pod不在同一網段),以供集羣內部的pod之間通訊使用。

 

2.NodePort:在每一個Node上打開一個隨機端口而且每一個Node的端口都是同樣的,經過<NodeIP>:NodePort的方式Kubernetes集羣外部的程序能夠訪問Service。

 

3.LoadBalancer:利用Cloud Provider特有的Load Balancer對外提供服務,Cloud Provider負責將Load Balancer的流量導向Service。

 

本篇文章咱們着重講下第二種方式,也就是NodePort方式,修改nginx-svc.yml文件,也就是剛纔前面建立的Service文件,相信細心的同窗會發如今以前截圖的時候已經作好了NodePort,由於個人環境已經配置好了因此這樣就不在截圖了,配置很簡單,能夠網上看下截圖,就是添加一個type:NodePort,而後從新建立下nginx-svc,命令的話和建立的命令同樣,咱們來看看建立完事的結果。

 

若是剛開始你沒有設置NodePort這個type的時候在端口那隻會顯示一個8080端口,而設置了以後會看到多了一個端口也就是31337,那8080你們鬥志是cluster-ip監聽的端口,那31337就是在節點上新起的一個端口,Kubernetes會從30000~32767中分配一個可用的端口,每一個節點都會監聽這個端口,並轉發給Service,也就是防止說一個節點掛了影響訪問。可能有人會問了,說這裏的Service可不能夠固定?當時能夠了,能夠在Service nginx-svc.yml文件裏面添加一個nodeport。

 

最後咱們能夠驗證下,我這裏就不截圖了,太長了。

curl x.x.x.x:31337

 

那OK可能會有人說這個訪問是隨機的仍是負載均衡的?答案是負載均衡的,依舊是採用iptables實現的,感興趣的能夠本身研究下iptables裏面作的那些規則,這裏就再也不贅述了。

 

初級玩家的話,使用系統性,點點鼠標便可操做的容器也是棒棒噠~

華爲雲容器引擎,一個點點鼠標就能夠完成容器建立的應用服務!美滋滋~

目前,華爲雲容器引擎推出容器體驗館,7天免費!歡迎體驗哦~

https://www.huaweicloud.com/product/cce.html

相關文章
相關標籤/搜索