Kubernetes通過Service開放集羣內布服務

五一假期結束,我們繼續看看k8s的使用,上一篇文章講到pod,文末提到,這樣的pod還無法從集羣外部使用,那麼如何才能訪問到集羣內布的服務呢?這要藉助於k8s的Service資源,利用Service可以將集羣內布的服務映射出來,供集羣外訪問。

查看Service我們可以使用命令

kubectl get svc

和pod類似,加上-n選項,我們可以查看對應命名空間下的Service。

創建Service也和pod類似,編寫一個YAML文件即可,這樣方便我們對我們的配置進行歸檔保存,針對上一篇文章的pod,我們編寫的Service應該如下所示,保存文件爲wordpress-svc.yaml:

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    service: wordpress
spec:
  type: NodePort
  selector:
    app: wordpress
  ports:
    - port: 10080
      name: http
      protocol: TCP
      targetPort: http
      nodePort: 10080

之後使用命令應用該配置:

kubectl apply -f wordpress-svc.yaml

當我們不需要Service的時候,運行下面的命令刪除Service即可

kubectl delete -f wordpress-svc.yaml

現在我們回過頭看一下上面的YAML文件的內容,metadata部分是Service自己的元數據,主要定義了Service的名稱以及labels,spec是我們重點關注的。

Service有四種類型,分別是ClusterIP,NodePort,LoadBalancer和Ingress。

ClusterIP是默認的方式,就是在集羣內部可以使用集羣內部的ClusterIP對服務進行訪問;LoadBalancer則需要爲k8s配置負載均衡器纔可使用,負載均衡器具有開放的域名,由負載均衡器選擇合適的節點進行服務;Ingress則是利用轉發機制,對外界訪問進行轉發規則配置。我們上面使用的是NodePort的方式,也應該是我們平時自己使用k8s使用最多的方式,我們可以使用集羣內任何一個節點的IP和對應的端口號對服務進行訪問,但是我們訪問到的並不一定是我們所使用的IP的節點pod,k8s會在內部選擇合適的節點提供服務。

spec中的字段,首先通過type說明我們的服務類型是NodePort,selector是label選擇器,用來對需要開放的Pod進行選擇,上一篇文章Pod中metadata的labels字段使用的是app:  wordpress,這裏選擇對應的label。

ports字段比較複雜,主要涉及三個端口號:port是集羣內布服務開放的端口,targetPort是我們之前Pod中containers字段中定義的端口號,這裏可以使用Pod中定義的name(http)代替明文(80),nodePort是我們節點映射給外部使用的端口號。所以我們上面的配置規則意思就是將app: wordpress這個Pod的http端口開放爲的10080端口,集羣內部也使用10080端口進行訪問。之後我們就可以使用

任意一個node的IP:nodePort

進行訪問了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章