全部產品
Search
文件中心

Container Service for Kubernetes:Service快速入門

更新時間:Oct 21, 2025

在Kubernetes中,Service是用於將運行在一組Pod上的應用程式公開為網路服務的抽象概念。Service不但為這組Pod提供統一的DNS名稱,還讓Pod之間實現了負載平衡。本文介紹Kubernetes Service的原理、注意事項,以及Service類型選型建議。

基本概念

Service

當Pod建立完成後,如果直接存取Pod會存在如下問題:

  • Pod可能會被控制器如Deployment隨時刪除並重建,其訪問結果不具有確定性。

  • Pod的IP地址是在啟動後動態分配的,在啟動前無法預知。

  • 應用常常是由多個運行相同程式鏡像的Pod組成,單獨訪問每個Pod並不現實。

為瞭解決這些問題,Kubernetes提供了Service對象,為Pod提供一個穩定的網路介面和持久的IP地址。Service通過標籤選取器識別一組目標Pod,使用負載平衡機制在所有Pod之間均衡分配流量,有效地解決了直接存取Pod存在的問題,保障了應用的高可用和運行效率。

Endpoint

在Kubernetes中,Endpoint是Service用於服務發現的關鍵資源,用於即時跟蹤與Service選取器相匹配的Pod的變化。當Pod被刪除或重建導致IP地址變化時,Endpoint會即時更新儲存的Pod IP地址和連接埠資訊,確保Service將流量定向到最新的Pod。

IPVS

IPVS是一個基於Linux Kernel LVS功能的負載平衡器,通過建立虛擬IP來處理Service的流量,並將其分配到後端的Pod。

在Kubernetes中,建立一個Service時,kube-proxy會在IPVS表中設定規則。這些規則定義了如何從Kubernetes節點的虛擬IP轉寄到後端Pod。可以通過ipvsadm命令在叢集節點上查看當前的IPVS路由表和規則。

重要

如果沒有安裝ipvsadm工具,可執行sudo yum install ipvsadm命令進行安裝。

iptables

iptables通過一組可配置的表和鏈來工作,每條鏈對應一組規則,用於控制資料包的流向。

在Kubernetes中,建立一個Service時,kube-proxy會在iptables中添加相應的規則,這些規則基於Service的標籤選取器來轉寄資料包到正確的Pod。可以通過iptables -t nat -L命令在叢集節點上查看當前的iptables轉寄表和規則。

Service類型

重要

Cloud Controller Manager版本為v2.5.0及以上時,通過控制台建立Service時,使用CLB執行個體選項變為白名單功能,且僅支援按使用量計費。如需通過控制台建立CLB類型Service,請通過配額平台提交申請。

名稱

描述

適用情境

計費說明

ClusterIP

預設的服務類型。ClusterIP分配給服務的是一個只能在叢集內部訪問的虛擬IP。

只需要在叢集內部進行服務間的通訊,不需要將服務暴露給叢集外部。

例如,叢集中部署的前端應用Pod需要訪問同一叢集中部署的後端資料庫,後端資料庫可以作為ClusterIP運行。

不計費。

NodePort

NodePort會在叢集中的節點上開放連接埠,從而允許從叢集外部通過<NodeIP>:<NodePort>來訪問服務。這種機制主要在OSI模型的第四層(傳輸層)進行工作。

需要臨時或低流量的應用時,需要從外網暴露一個連接埠。

例如,在測試環境中部署調試一個Web應用服務時,可以使用NodePort運行。相較於LoadBalancer模式,它不提供跨節點負載平衡能力,流量只會發送到一個節點並很容易達到資源瓶頸。

不計費。若需要實現公網訪問,需要為節點綁定EIP。關於EIP的計費說明,請參見計費概述

LoadBalancer

LoadBalancer類型基於NodePort增加了一個外部負載平衡器,使外部流量能夠平滑地分發到叢集中的多個Pod上。Service會自動提供一個外部IP,用戶端可通過此IP訪問服務。該服務既支援在OSI模型的第四層(傳輸層)處理TCP/UDP類型的流量,也可以擴充至第七層(應用程式層),進行HTTP/HTTPS流量管理。

在公用雲上運行應用且需要提供一個穩定的、易於管理的對外入口。

例如,生產環境中需要從互連網訪問的公用服務,需要承受大量的外部流量並保證高可用性,例如Web應用、API服務等。

Server Load Balancer執行個體將產生費用請參見

CLB計費概述

NLB計費說明

Headless Service

Headless Service指沒有虛擬IP的服務。訪問後端Pod時,服務的DNS查詢會直接返回Pod的IP地址清單,而不是單一的服務IP。Headless Service可以直接發現並串連到特定的Pod。

應用需要直接與後端的具體Pod進行通訊(而不是通過一個代理或負載平衡器)。

例如,如果部署了有狀態應用ClickHouse資料庫服務,可以使用Headless Service,使得應用Pod可以直接存取每個ClickHouse Pod,並且均衡地讀取資料或針對性地寫入資料,提升資料處理的效率。

不計費。

ExternalName

ExternalName類型的Service會在叢集中將一個內部服務名稱映射到一個外部網域名稱。這種映射使得叢集內的Pod可以通過Service Name來訪問外部網域名稱。

叢集需要訪問暴露在公用網域名稱下的服務。

例如,當應用Pod需要訪問外部的資料庫網域名稱時,可以使用ExternalName將網域名稱映射到叢集內部的Service Name上,使得叢集內部可以直接通過Service Name進行訪問。

不計費。

Service原理

ClusterIP

  • 建立與分配

    在ACK叢集中建立一個ClusterIP類型的Service時,叢集控制面會為該Service分配一個虛擬IP地址(ClusterIP),僅在叢集內訪問。

  • 流量轉寄

    訪問ClusterIP時,流量會被kube-proxy捕獲並通過輪詢調度轉寄到後端Pod。

  • 服務發現

    建立ClusterIP時,CoreDNS會註冊一個DNS記錄,允許通過服務名解析和訪問服務。格式為服務名.命名空間.svc.cluster.local:連接埠,例如nginx.default.svc.cluster.local:80

  • Pod標籤和端點跟蹤

    每個Service都由一組標籤選取器(Label Selector)定義,決定哪些Pod屬於該Service的後端。

    叢集控制面會即時監控Pod的變動。當匹配Service標籤選取器的Pod發生添加、更新或刪除等操作時,控制面將更新Endpoint。

NodePort

  • 建立與分配

    建立NodePort類型的Service時,叢集會為此Service在節點上開放一個連接埠(NodePort),允許外部存取。

  • 流量轉寄

    kube-proxy監聽NodePort連接埠,連接埠範圍(預設是30000-32767)中自動選擇,將外部請求路由到ClusterIP,再轉寄到後端Pod。

  • 外部存取

    通過節點的IP地址加上靜態連接埠(NodePort)來訪問,格式為<NodeIP>:<NodePort>,作為外部的訪問地址。

LoadBalancer

  • 建立與分配

    建立LoadBalancer類型的Service時,叢集控制面會自動與負載平衡服務互動,建立負載平衡器執行個體處理流量。更多資訊,請參見通過使用已有負載平衡的服務暴露應用通過使用自動建立負載平衡的服務公開應用

  • 流量轉寄

    外部流量到達Server Load Balancer執行個體的外部IP時,流量會被路由到節點上的連接埠,再通過kube-proxy轉寄到後端Pod。

  • 配置路由和健全狀態檢查

    負載平衡器會自動設定監聽連接埠,並進行健全狀態檢查,確保流量只路由到健康的Pod。

外部流量策略

LoadBalancer或NodePort類型的Service提供外部流量策略externalTrafficPolicy配置,用於控制從外部網路到服務的流量路由。該配置項在使用Terway與Flannel的叢集中有不同的行為。

說明

登入Container Service管理主控台,在叢集列表頁面單擊目的地組群的名稱,在基本資料頁簽下可以查看叢集使用的容器網路外掛程式。

Flannel網路外掛程式

比較項

Local

Cluster

負載平衡後端掛載行為

僅Pod所在的節點會掛載到負載平衡後端。

所有叢集內的節點都將掛載到負載平衡的後端。

負載平衡配額

負載平衡配額消耗較少。關於負載平衡配額的詳細介紹,請參見配額限制

叢集內所有節點都掛載到負載平衡後端,會大量消耗負載平衡配額。關於負載平衡配額的詳細介紹,請參見配額限制

叢集內訪問Service

僅Service後端Pod所在節點可以訪問Service。

叢集內任意節點均可訪問Service。

Pod負載平衡

預設Pod之間負載不均衡。

如需實現Pod之間負載平衡,請指定策略為wrr,即為Service添加Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wrr"

預設Pod之間負載平衡。

保留來源IP

支援。

不支援。

會話保持

支援。

不支援。

適用情境

對需要保留用戶端原始IP地址的應用程式,例如基於原始IP地址的日誌記錄。

當需要保證服務的高可用性,並且對源IP儲存不敏感時,例如大型Web應用叢集。

Terway網路外掛程式

比較項

Local

Cluster

負載平衡後端掛載行為

Pod直接掛載到負載平衡後端。

負載平衡配額

僅掛載業務Pod,負載平衡配額消耗較少。關於負載平衡配額的詳細介紹,請參見配額限制

叢集內訪問Service

從叢集內訪問Service時,流量經過節點上的kube-proxy,因此受到externalTrafficPolicy的約束,僅Service後端Pod所在節點可以訪問Service。

叢集內任意節點均可訪問Service。

Pod負載平衡

預設Pod之間負載平衡。

保留來源IP

支援。

會話保持

支援。

注意事項

在使用Service的負載平衡功能之前,建議瞭解相關注意事項。詳細資料,請參見Service的負載平衡配置注意事項

相關文檔