經過Service訪問應用 (2)

 

 目錄  

  • 經過NodePort Service在外部訪問集羣應用 html

  • 經過LoadBalancer Service在外部訪問集羣應用 前端

  • Microsoft SQL Server數據庫部署 node


 

 

 爲了便於理解和學習,請先閱讀上一篇《經過Service訪問應用 (1)》再繼續學習本篇內容。sql

經過NodePort Service在外部訪問集羣應用

這時候咱們就可使用NodePort類型的Service了。NodePort服務類型容許在每一個節點的IP(任意節點IP)上使用靜態端口(NodePort)公開服務,咱們能夠在集羣以外經過請求<NodeIP>:<NodePort>來訪問服務。數據庫

YAML定義以下所示:ubuntu

kind: Service #資源類型 apiVersion: v1 metadata: #標準元數據 name: nodeport-service #服務名稱 spec: #規範定義 type: NodePort #服務類型,這裏是節點端口 ports: #端口列表 - port: 80 #當前端口 nodePort: 31001 #節點端口,注意默認的端口範圍爲「30000-32767」,注意不要衝突 selector: #標籤選擇器 app: demo
 

接下來,咱們來執行Service的建立並查詢Service:api

kubectl create -f nodePortService.yaml kubectl get services nodeport-service

 

 

 

如上圖所示,咱們建立了名爲「nodeport-service」的Service,該Service映射「31001」節點端口,而且建立了「11.3.138.104」的集羣IP,也就是說,Service能夠經過「節點IP:節點端口」或「集羣IP(spec.clusterIp):端口」進行訪問。session

接下來,在集羣外部的計算機,咱們經過節點IP和節點端口(172.16.2.201:31001)便可訪問剛剛部署的Demo應用:架構

 

 

 

雖然咱們能夠在外部訪問集羣中的應用,可是也能夠看到該方案有很多不足:app

  • 每一個端口僅能支持一個服務,不能衝突

  • 端口範圍必須爲「30000-32767」,很是不友好

  • 若是節點IP發生變化,服務也將沒法訪問

所以,用於開發測試還說得過去,用於生產的話,會影響「升職加薪贏取白富美」!咱們得尋求更佳方案。

 

經過LoadBalancer Service在外部訪問集羣應用

 

LoadBalancer Service是暴露服務到外部(Internet)的標準方式,它能夠完美的解決咱們上面的問題,不過使用以前,咱們得有一個loadBalancerIP——負載均衡IP。通常的雲廠商都可以提供這個服務。這裏咱們以騰訊云爲例進行講解。

首先,咱們須要在騰訊雲的k8s集羣建立一個Demo Deployment,配置參考上文。

接下來,咱們須要建立一個負載均衡服務,以便獲得負載均衡IP:

 

 

 

有了IP,咱們就能夠建立LoadBalancer Service了,YAML定義以下所示:

apiVersion: v1 #api版本 kind: Service #Service metadata: #標準元數據 name: demo #名稱 namespace: default #命名空間 spec: #規範 clusterIP: 10.3.255.28 #集羣IP loadBalancerIP: 106.52.99.55 #負載均衡IP ports: #端口列表 - name: tcp-80-80 nodePort: 31504 #節點IP port: 80 #Pod端口 protocol: TCP #協議 targetPort: 80 #服務端口 selector: #選擇器 app: demo k8s-app: demo qcloud-app: demo type: LoadBalancer #服務類型,這裏爲負載均衡服務類型

如上述定義所示,咱們進行建立Service。該定義設置了集羣IP爲「10.3.255.28」,負載均衡IP(loadBalancerIP)爲「106.52.99.55」,節點端口爲「31504」。Service定義好了,咱們對負載均衡服務進行配置,配置一個TCP監聽器以下所示:

 

 

 

接下來,咱們就能夠盡情訪問了。經過節點IP和端口訪問:

經過負載均衡IP訪問:

 

 

 經過綁定域名訪問(請設置域名解析爲負載均衡IP):

 

 

 

 

 

Microsoft SQL Server數據庫部署

爲了讓你們更好的使用上述對象進行部署,本節筆者使用你們熟知的Microsoft SQL Server數據庫來進行部署。

  • 部署目標

    完成Linux版本的Microsoft SQL Server 2017的部署

    使用節點目錄「/var/mssql」來存儲數據庫文件

    設置初始密碼爲「123456abcD」

    開放1433端口,而且容許外部應用經過節點端口「30338」訪問數據庫

  • YAML定義

接下來,咱們須要定義YAML文件。根據部署目標,咱們肯定可使用Deployment對象和Service對象來完成本次部署。YAML文件定義以下以下所示:

apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: app: mssql name: mssql #當前Deployment對象名稱,同一個命名空間下必須惟一 spec: replicas: 1 #副本集數量 revisionHistoryLimit: 2 #保留的歷史記錄數,設置爲0將清理部署的全部歷史記錄,沒法回滾 strategy: type: Recreate template: metadata: labels: app: mssql spec: containers: - env: #環境變量設置 - name: ACCEPT_EULA value: "Y"
        - name: SA_PASSWORD #sa密碼設置 value: 123456abcD image: mcr.microsoft.com/mssql/server:2017-latest-ubuntu #鏡像 imagePullPolicy: Always name: mssql ports: - containerPort: 1433 #容器端口,SQLServer數據庫默認端口爲1433 resources: #資源限制 limits: cpu: "2" memory: 2096Mi requests: cpu: 100m memory: 827Mi volumeMounts: - mountPath: /var/opt/mssql/ name: data-vol restartPolicy: Always terminationGracePeriodSeconds: 30 #Pod結束時等待時長(單位爲秒) volumes: - name: data-vol hostPath: #使用主機目錄 path: /var/mssql --- apiVersion: v1 kind: Service metadata: labels: app: mssql name: mssql #服務名稱 spec: ports: - name: tcp-1433-1433 nodePort: 30338 #節點端口,注意默認的端口範圍爲「30000-32767」,注意不要衝突 port: 1433 #端口 protocol: TCP targetPort: 1433 #目標端口 selector: #Pod標籤選擇器 app: mssql sessionAffinity: None type: NodePort #服務類型,這裏是負載均衡類型
  • 執行部署

接下來,咱們使用命令執行部署:

kubectl apply -f mssqlserver.yaml

「kubectl apply」命令既能夠建立資源,也能夠用於更新資源對象。接下來咱們經過命令能夠查看部署狀態:

kubectl get svc -o wide -lapp=mssql kubectl get po -o wide -lapp=mssql kubectl get deployment -o wide -lapp=mssql

如上圖所示,部署已經成功,那麼接下來咱們可使用管理工具進行鏈接訪問:

 

 

往期內容連接

集羣故障處理之處理思路以及健康狀態檢查(三十二)

集羣故障處理之處理思路以及聽診三板斧(三十三)

開源導入導出通用庫Magicodes.ExporterAndImporter發佈

使用Kubectl部署應用

經過Service訪問應用 (1)

原文出處:https://www.cnblogs.com/codelove/p/11527089.html

相關文章
相關標籤/搜索