通過Service訪問應用 (1)
目錄
通過Service訪問應用
-
通過Pod IP訪問應用
-
通過ClusterIP Service在叢集內部訪問
通過Service訪問應用
通過之前的操作,應用部署完成了,我們的Demo網站已經成功啟動了,那麼如何訪問網站呢?
通過Pod IP訪問應用
我們可以通過Pod IP來訪問之前部署的網站,但是前提是我們需要知道Pod IP。我們可以通過“kubectl get”命令的引數“-o wide”來輸出相關的資訊,比如Pod IP:
kubectl get pods -lapp=demo -o wide
如果網路是通暢的,那麼我們可以在任意的節點上訪問我們的應用,如:
curl --head http://10.0.2.12
我們使用curl以get方式請求demo應用,返回請求頭為200,那麼表示我們已經成功訪問了Demo。如果你還不太相信,我們可以通過安裝了UI介面的CentOS節點伺服器的瀏覽器上訪問這些Pod IP,如下所示:
雖然我們通過Pod IP成功的訪問到了應用,但是Pod有生老病死,如果“死”了呢,我們如何訪問?Deployment會重建麼?我們來試一試:
kubectl delete pods -lapp=demo kubectl get pods -lapp=demo -o wide
很不幸的是,如上圖所示,POD IP變掉了。那麼意味著POD IP會隨著POD的生老病死而發生變化。而且,不僅存在這個問題,如果我們直接使用POD IP,那麼多個POD也變得毫無意義。那麼我們應該到底如何來訪問我們的應用呢?
通過ClusterIP Service在叢集內部訪問
Kubernetes服務(Service)就是為此而抽象出來的,為了讓應用能夠穩定的輸出,Service應運而生。
Service在Kubernetes中是一個抽象的概念,它定義了一組邏輯上的Pod和一個訪問它們的策略(通常稱之為微服務)。Service是通過標籤選擇器來繫結一組Pod 的Endpoints(端點)物件,當Pod的IP發生變化,Endpoints也隨之變化。當Service接受到請求時,就能通過EndPoints找到請求轉發的目標Pod地址。也就是說,通常情況下,Service定義了叢集IP和埠,EndPoints則維護了一組Pod IP和埠。
瞭解了這些,接下來我們就使用ClusterIP Service來訪問剛才的Demo應用。
ClusterIP Service是預設的Service型別,其通過叢集的內部IP暴露服務,因此僅能在叢集內部訪問,常用於資料庫等應用。
這裡,我們定義一個簡單的Service叢集IP配置:
apiVersion: v1 kind: Service #資源型別 metadata: #標準元資料 name: demo-service #服務名稱 spec: #規範定義 type: ClusterIP #服務型別,不填寫此欄位則預設為ClusterIP型別,也就是叢集IP型別 selector: #標籤選擇器 app: demo #標籤 ports: #埠 - protocol: TCP #協議,能夠支援TCP和UDP port: 80 #當前埠 targetPort: 80 #目標埠
接下來,我們來執行Service的建立並且分別查詢了Service和Endpoints:
kubectl create -f clusterIPService.yaml kubectl get services demo-service -o wide kubectl get endpoints demo-service -o wide
如上圖所示,我們建立了叢集IP為“11.13.47.67”的Service,埠為80(通常情況下,我們將port和targetPort設定為相同的值)。同時我們通過Endpoints列表看到,Endpoints自動綁定了5個Pod IP。接下來我們試試在叢集內(節點上)訪問:
注意:如果我們需要在建立時設定Service固定IP該如何去設定呢?可以通過欄位“spec.clusterIp”進行設定,值需要符合Service IP段要求。
瀏覽器非常完美的呈現了Demo。在叢集內是可以訪問了,如果我們提供對外服務呢?比如我們希望我們的Demo被其他電腦訪問,以獲得使用者的讚賞,老闆的好評,那麼該如何處理呢?我們下一篇再來分析!
往期內容連結
Docker+ Kubernetes已成為雲端計算的主流(二十五)
容器化之後如何節省雲端成本?(二十六)
瞭解Kubernetes主體架構(二十七)
使用Minikube部署本地Kubernetes叢集(二十八)
使用kubectl管理k8s叢集(二十九)
使用Kubeadm建立k8s叢集之部署規劃(三十)
使用Kubeadm建立k8s叢集之節點部署(三十一)
叢集故障處理之處理思路以及健康狀態檢查(三十二)
叢集故障處理之處理思路以及聽診三板斧(三十三)
開源匯入匯出通用庫Magicodes.ExporterAndImporter釋出
使用Kubectl部署