1. 程式人生 > 其它 >Controller與Service系列(二) Service基本概念

Controller與Service系列(二) Service基本概念

一、什麼是Service

通過建立 Service,可以為一組具有相同功能的容器應用提供一個統一的入口地 址,並且將請求負載分發到後端的各個容器應用上。所以service的存在基於:
  • 服務發現
  • 負載均衡

1、服務發現

Pod因為Node節點的宕機會導致其重新排程,這樣Pod就沒有固定的ip,那麼之前的Pod就會失聯,為了防止重新排程的Pod能夠找到就需要進行服務發現。

這樣雖然Pod被排程到另一個節點上,但是也可以繼續被發現,不至於失聯。

2、負載均衡

定義一組Pod的訪問策略:

前臺請求,後臺將其進行負載均衡,然後分發到不同的Pod上。Service與Pod之間通過label與selector進行關聯,這與Controller與Pod之間建立關聯的方式一樣。

二、Service型別

對一些應用的某些部分,可能希望將其暴漏給k8s叢集外部的IP地址,Service允許指定你需要的Service型別,預設的是ClusterIP型別。

  • ClusterIP:通過叢集的內部 IP 暴露服務,選擇該值時服務只能夠在叢集內部訪問。 這也是預設的ServiceType
  • NodePort:通過每個節點上的 IP 和靜態埠(NodePort)暴露服務。 NodePort 服務會路由到自動建立的 ClusterIP 服務。 通過請求 <節點 IP>:<節點埠>,你可以從叢集的外部訪問一個 NodePort 服務。
  • LoadBalancer:使用雲提供商的負載均衡器向外部暴露服務。 外部負載均衡器可以將流量路由到自動建立的 NodePort 服務和 ClusterIP 服務上。

在之前常用的對外暴露埠使用的就是NodePort:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: MyApp
  ports:
      # 預設情況下,為了方便起見,`targetPort` 被設定為與 `port` 欄位相同的值。
    - port: 80
      targetPort: 80
      # 可選欄位
      # 預設情況下,為了方便起見,Kubernetes 控制平面會從某個範圍內分配一個埠號(預設:30000-32767)
nodePort: 30007