深入玩轉K8S之外網如何訪問業務應用
有一個問題就是現在我的業務分配在多個Pod上,那麼如果我某個Pod死掉豈不是業務完蛋了,當然也會有人說Pod死掉沒問題啊,K8S自身機制Deployment和Controller會動態的建立和銷燬Pod來保證應用的整體穩定性,那這時候還會有問題,那就是每個Pod產生的IP都是動態的,那所以說重新啟動了我對外訪問的IP豈不是要變了,別急,下面我們來解決下這個問題。
可以透過Service來解決如上所遇到的問題,那麼什麼是Service呢?
Service是kubernetes最核心的概念,透過建立Service,可以為一組具有相同功能的容器應用提供一個統一的入口地址,並且將請求進行負載分發到後端的各個容器應用上。
簡單來說Service就是一個把所有Pod都池化的一個組,然後對外統一固定一個IP,具體是哪些Pod可以透過之前介紹到的Label標籤來進行設定。
在建立Service之前先看看我們在部署應用的時候建立的nginx.yml
剛在有提到,就是說哪些Pod被Service池化是根據Label標籤來的,那麼可以看到圖上所標識的nginx字樣,後面我們建立Service會用到。
下面來建立個Service看看
解釋下這個yml檔案哈,其意思就是說呢V1是api的版本,然後Kind表示當前資源型別為Service,selector選擇之前Label標籤為nginx的Pod作為Service池化的物件,最後說的是把Service的8080埠對映到Pod的80埠。
執行kubectl apply建立Servie nginx-svc
1 |
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543630/viewspace-2157334/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何從外網訪問本地WEB應用?Web
- 如何從網際網路訪問k8s叢集中的服務以及如何排錯K8S
- web應用私網公網訪問題Web
- 如何透過holer從外網訪問本地Web應用Web
- 乾貨 | 玩轉雲檔案儲存——利用CFS實現web應用的共享訪問Web
- 如何從Spring之外的非託管物件訪問 Spring Bean?Spring物件Bean
- 玩k8s? ----管理應用程式配置K8S
- k8s中ingress訪問不到服務K8S
- 如何實現在家訪問公司內網服務內網
- 記一次透過K8S ingress訪問業務服務出現404問題K8S
- Holer實現手機APP應用外網訪問本地WEB應用APPWeb
- 外網如何透過https訪問自己的服務HTTP
- Istio如何使用相同的埠訪問網格外服務
- python如何訪問網頁Python網頁
- kubernetes如何訪問pod服務
- 恆訊科技分析:如何禁止用IP訪問網站?網站
- 如何使用 AWS 的 CloudFront(全球分發網路)服務助力企業網站海外訪問加速Cloud網站
- 如何透過port-forward命令在本地訪問 k8s 叢集服務ForwardK8S
- 如何使用RestTemplate訪問restful服務REST
- 在kubernetes 叢集內訪問k8s API服務K8SAPI
- 如何從公網訪問內網Django內網Django
- WEB應用訪問緩慢的問題定位Web
- 神結合!一招玩轉K8s和微服務治理K8S微服務
- 【Azure微服務 Service Fabric 】Service Fabric中應用開啟外部訪問埠及微服務之間通過反向代理埠訪問問題微服務
- 玩轉 PHP 網路程式設計全套之 libevent 框架多人聊天應用PHP程式設計框架
- 如何在Mac上訪問任務控制Mac
- 如何安全地訪問網際網路
- 一起玩轉微服務(4)——如何實施微服務微服務
- 深入淺出訪問者模式模式
- 使用 k8s 快速部署應用服務K8S
- Angular應用解決跨域訪問的問題Angular跨域
- 深入理解k8s中的訪問控制(認證、鑑權、審計)流程K8S
- 淘寶雙十一之外,實在RPA帶你玩轉私域流量!
- python應用系統訪問瀚高庫Python
- 如何從外網訪問內網Linux系統?內網Linux
- 如何提高網站的可訪問性?網站
- InfoQ專訪網易雲陳諤:用微服務體系滿足企業數字化轉型需求微服務
- 玩轉OneNET物聯網平臺之MQTT服務①MQQT