經過Service訪問應用 html
經過Pod IP訪問應用 前端
經過ClusterIP Service在集羣內部訪問 數據庫
經過以前的操做,應用部署完成了,咱們的Demo網站已經成功啓動了,那麼如何訪問網站呢?api
咱們能夠經過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也變得毫無心義。那麼咱們應該到底如何來訪問咱們的應用呢?app
Kubernetes服務(Service)就是爲此而抽象出來的,爲了讓應用可以穩定的輸出,Service應運而生。curl
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被其餘電腦訪問,以得到用戶的讚揚,老闆的好評,那麼該如何處理呢?咱們下一篇再來分析!
開源導入導出通用庫Magicodes.ExporterAndImporter發佈
原文出處:https://www.cnblogs.com/codelove/p/11506881.html