K8s Service

Service 簡介:

Kubernetes Service 定義了這樣一種抽象:一個 Pod 的邏輯分組,一種可以訪問它們的策略 —— 通常稱爲微服務。 這一組 Pod 能夠被 Service 訪問到,通常是通過 [Label Selector]
對 Kubernetes 集羣中的應用,Kubernetes 提供了簡單的 Endpoints API,只要 Service 中的一組 Pod發生變更,應用程序就會被更新。 對非 Kubernetes 集羣中的應用,Kubernetes 提供了基於 VIP 的網橋的方式訪問 Service,再由 Service 重定向到 backend Pod

Service 的五種類型

  • ClusterIP
  • NodePort
  • LoadBalancer
  • ExternalName
  • None

enjoy coding!
ClusterIP
簡介:

通過集羣內部的虛擬IP暴露服務,這種類型只在集羣內部可達,無法被外部的客戶端調用。

設置方式:
kind: Service
apiVersion: v1
metadata:
  name: test
spec:
  type: ClusterIP

不設置 type 類型時,默認爲ClusterIP。

NodePort
簡介:

建立在 ClusterIP 之上,通過每個 Node 的IP和靜態端口暴露服務,外部客戶端通過訪問 NodePortNodePort 將請求路由到集羣內的 ClusterIP 上訪問服務。

部署k8s集羣時可以預留指定的端口範圍,默認爲:30000~32767。

設置方式:
kind: Service
apiVersion: v1
metadata:
  name: test
spec:
  type: NodePort

建議不需要自定義port,而是讓集羣自動分配一個 NodePort , 否則可能會導致端口衝突。

LoadBalancer
簡介:

建立在 NodePort 之上,通過外部的雲服務提供廠商提供的負載均衡器路由至集羣內的NodePort上。

設置方式:
kind: Service
apiVersion: v1
metadata:
  name: test
spec:
  type: LoadBalancer
ExternalName
簡介:

通過serviceexternalName 字段指定外部服務的訪問地址,使得集羣內部的服務可以訪問到集羣外部的服務。

這種類型的 service 不會產生 ClusterIPNodePort ,一般不需要使用 labelSelector 所以也沒有 EndPoints。也稱爲 Headless Service

設置方式:
kind: Service
apiVersion: v1
metadata:
  name: test
spec:
  type: ExternalName
  externalName: xxx.com
None
簡介:

Headless Service,不會產生 ClusterIP , 如果配置了 labelSelector 匹配到了對應的 Pod ,則會生成 EndPoints

設置方式
kind: Service
apiVersion: v1
metadata:
  name: test
spec:
  clusterIP: None

參考

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