全部產品
Search
文件中心

Container Service for Kubernetes:建立服務

更新時間:Feb 28, 2024

在Kubernetes中,Pod雖然擁有獨立的IP,但會被快速地建立和刪除,因此無法直接對外提供服務。而服務(Service)能夠解耦前端和後端的關聯,從而實現松耦合的微服務設計。本文介紹如何通過控制台和Kubectl建立服務的方式對外發布應用。

前提條件

已建立ACK Serverless叢集。更多資訊,請參見Container Service Serverless 版使用快速入門

背景資訊

Kubernetes Service定義了這樣一種抽象:一個Pod的邏輯分組,一種可以訪問它們的策略,通常稱為微服務。這一組Pod能夠被Service訪問到,通常是通過Label Selector來實現。

在Kubernetes中,Pod雖然擁有獨立的IP,但Pod會快速地建立和刪除,因此通過Pod直接對外界提供服務不符合高可用的設計準則。通過Service,Service能夠解耦frontend(前端)和backend(後端)的關聯,frontend不用關心backend的具體實現,從而實現松耦合的微服務設計。

更多詳細的原理,請參見Kubernetes service

步驟一:建立Deployment

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

  3. 無狀態頁面右上方單擊使用YAML建立資源

  4. 選擇樣本模板或自訂,然後單擊建立

    本樣本中,樣本模板是一個Nginx的Deployment。

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
       name: nginx-deployment-basic
       labels:
         app: nginx
    spec:
       replicas: 2
       selector:
         matchLabels:
           app: nginx
       template:
         metadata:
           labels:
             app: nginx
         spec:
           containers:
           - name: nginx
             image: nginx:1.7.9                # replace it with your exactly <image_name:tags>
             ports:
             - containerPort: 80               ##需要在服務中暴露該連接埠。
  5. 在無狀態應用列表中,單擊目標應用程式名稱或其右側的詳情,查看該Deployment的運行狀態。查看應用

步驟二:建立服務

  1. 在叢集管理頁左側導覽列,選擇網路 > 服務

  2. 建立服務對話方塊中,配置相關資訊。

    配置項

    描述

    名稱

    設定服務的名稱。

    服務類型

    選擇服務類型,即服務訪問的方式。包括:

    • 虛擬叢集IP:即ClusterIP,通過叢集的內部IP暴露服務。選擇該值後,服務只能夠在叢集內部可以訪問,此類型為預設的Service類型。

      說明

      服務類型虛擬叢集IP時,支援配置執行個體間探索服務(Headless Service)。您可以使用無頭Service與其他服務發現機制進行介面,無需與Kubernetes的實現捆綁。

    • 節點連接埠:即NodePort,通過每個Node上的IP和靜態連接埠(NodePort)暴露服務。NodePort服務會路由到ClusterIP服務,該ClusterIP服務會自動建立。通過請求<NodeIP>:<NodePort>,可以從叢集的外部存取一個NodePort服務。

      說明

      僅ACK叢集支援設定節點連接埠,ACK Serverless叢集不支援。

    • 負載平衡:即LoadBalancer,阿里雲提供的負載平衡服務(SLB),支援選擇公網訪問或私網訪問,可以路由到NodePort服務和ClusterIP服務。

      • 建立SLB:通過單擊修改,修改SLB規格。

      • 使用已有SLB: 您可以在已有的列表中選擇SLB規格。

      說明

      負載平衡類型支援建立SLB和使用已有SLB,且多個Kubernetes Service可以複用同一個SLB,但是存在以下限制:

      • 使用已有的Server Load Balancer執行個體會強制覆蓋已有監聽。

      • 通過Service建立的SLB無法複用,可能導致SLB被意外刪除。僅支援複用您手動在控制台或調用OpenAPI建立的SLB。

      • 複用同一個SLB的多個Service,避免前端監聽連接埠一致,否則會造成連接埠衝突。

      • 複用SLB時,Kubernetes將使用監聽的名字以及虛擬伺服器組的名字將作為唯一識別碼。請勿修改監聽和虛擬伺服器組的名字。

      • 不支援跨叢集複用SLB。

    外部流量策略

    設定外部流量策略。關於外部流量策略詳細介紹,請參見外部流量策略功能對比

    • Local:流量只發給原生Pod。

    • Cluster:流量可以轉寄到叢集中其他節點上的Pod。

    說明

    您的服務類型為節點連接埠負載平衡時,才能設定外部流量策略

    服務關聯

    選擇服務要綁定的後端應用。若不進行關聯部署,則不會建立相關的Endpoints對象。關於服務關聯的詳細介紹,請參見services-without-selectors

    連接埠映射

    添加服務連接埠(對應Service YAML檔案中的port)和容器連接埠(對應Service YAML檔案中的targetPort),容器連接埠需要與後端的Pod中暴露的容器連接埠一致。

    註解

    為該服務添加一個註解(Annotation),配置負載平衡的參數。支援選擇自訂註解阿里雲註解。例如,設定service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:2,表示將該服務的頻寬峰值設定為2Mbit/s,從而控制服務的流量。更多參數,請參見通過Annotation配置傳統型負載平衡CLB

    標籤

    為該服務添加一個標籤,標識該服務。

  3. 單擊確定

    服務頁面服務列表,可以查看新建立的服務。

    在服務列表操作列,單擊目標服務的更新YAML編輯刪除,對目標服務做相應操作。

    說明

    單擊服務名稱進入服務詳情頁面,您可以單擊外部端點後面的連結訪問應用。