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

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

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

前提條件

您已經成功建立一個 Kubernetes 叢集,參見建立Kubernetes叢集

步驟1 建立 deployment

  1. 登入Container Service管理主控台
  2. 在 Kubernetes 菜單下,單擊左側導覽列中的應用 > 部署,單擊頁面右上方的使用模板建立


  3. 選擇所需的叢集,命名空間,選擇範例模板或自訂,然後單擊建立


    本例中,樣本模板是一個 nginx 的 deployment。

    apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
    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                                          ##需要在服務中暴露該連接埠
  4. 單擊Kubernetes 控制台,進入 Kubernetes Dashboard,查看該 Deployment 的運行狀態。


步驟2 建立服務

  1. 登入Container Service管理主控台
  2. 在 Kubernetes 菜單下,單擊左側導覽列中的應用 > 服務,進入服務列表頁面。
  3. 選擇所需的叢集和命名空間,單擊頁面右上方的建立


  4. 在彈出的建立服務對話方塊中,進行配置。


    • 名稱:輸入服務的名稱,本例中為 nginx-vc。
    • 類型:選擇服務類型,即服務訪問的方式,包括:
      • 虛擬叢集 IP : 即 ClusterIP,指通過叢集的內部 IP 暴露服務,選擇該值,服務只能夠在叢集內部可以訪問,這也是預設的 ServiceType。
      • 節點連接埠:即 NodePort,通過每個 Node 上的 IP 和靜態連接埠(NodePort)暴露服務。NodePort 服務會路由到 ClusterIP 服務,這個 ClusterIP 服務會自動建立。通過請求 <NodeIP>:<NodePort>,可以從叢集的外部存取一個 NodePort 服務。
      • 負載平衡:即 LoadBalancer,指阿里雲提供的負載平衡服務(SLB),可選擇公網訪問或內網訪問。阿里雲負載平衡服務可以路由到 NodePort 服務和 ClusterIP 服務。
    • 關聯部署:選擇服務要綁定的後端對象,本例中是前面建立的 nginx-deployment-basic 。若不進行關聯部署,則不會建立相關的 Endpoints 對象,您可自己進行綁定,參見 services-without-selectors
    • 連接埠映射:添加服務連接埠和容器連接埠,容器連接埠需要與後端的 pod 中暴露的容器連接埠一致。
    • 註解:為該服務添加一個註解(annotation),配置負載平衡的參數,例如設定service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:20表示將該服務的頻寬峰值設定為20Mbit/s,從而控制服務的流量。更多參數請參見通過負載平衡(Server Load Balancer)訪問服務
    • 標籤:您可為該服務添加一個標籤,標識該服務。
  5. 單擊建立,nginx-svc 服務出現在服務列表中。


  6. 您可查看服務的基本資料,在瀏覽器中訪問 nginx-svc 的外部端點。


至此,您完成如何建立一個關聯到後端的 deployment 的服務,最後成功訪問 Nginx 的歡迎頁面。