在Kubernetes中,Pod會快速地被建立和刪除,這導致Pod的IP地址不固定,因此無法直接對外提供服務。Service提供了一個固定的IP地址,外部服務(前端)可以通過這個固定的IP地址訪問到後端Pod,而無需關心後端具體是哪些Pod以及它們的IP地址。Service的這種機制實現了前後端的解耦,從而對外提供穩定的服務。本文介紹如何通過控制台建立虛擬叢集IP(ClusterIP)類型服務。
背景資訊
Kubernetes Service定義了這樣一種抽象:一個Pod的邏輯分組,一種可以訪問它們的策略,通常稱為微服務。這一組Pod能夠被Service訪問到,通常是通過Label Selector來實現。
在Kubernetes中,Pod雖然擁有獨立的IP,但Pod會快速地建立和刪除,因此通過Pod直接對外界提供服務不符合高可用的設計準則。通過Service,Service能夠解耦frontend(前端)和backend(後端)的關聯,frontend不用關心backend的具體實現,從而實現松耦合的微服務設計。
更多詳細的原理,請參見Kubernetes service。
步驟一:建立Deployment
登入容器計算服務控制台,在左側導覽列選擇叢集列表。
在集群列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作负载 > 无状态。
在無狀態頁面,單擊使用YAML建立資源。
選擇樣本模板或自訂,然後單擊建立。
本樣本模板是一個Nginx的Deployment。
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx-svc namespace: default spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80在無狀態頁面,單擊目標應用程式名稱或右側的詳情,查看該Deployment的運行狀態,等待其所有Pod執行個體可用。
步驟二:建立服務
在集群列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 服務。
在服務頁面右側,單擊建立,在建立服務對話方塊中,配置相關資訊,然後單擊確定。
配置項
說明
樣本
服務名稱
設定服務的名稱。
my-nginx-svc
服務類型
選擇虛擬叢集IP(Cluster IP),即ClusterIP,通過叢集的內部IP暴露服務。選擇該值後,服務只能在叢集內部訪問,此類型為預設的Service類型。
說明可按需選擇是否開啟執行個體間服務發現(Headless Service)。開啟後,可使用無頭Service與其他服務發現機制進行對接,無需與Kubernetes的實現捆綁。
虛擬叢集IP(Cluster IP)
服務關聯
選擇服務要綁定的後端應用。如不進行關聯,則不會建立相關的Endpoints對象。關於服務關聯的詳細介紹,請參見services-without-selectors。
名稱:app
值:nginx
連接埠映射
添加服務連接埠(對應Service YAML檔案中的
port)和容器連接埠(對應Service YAML檔案中的targetPort),容器連接埠需要與後端的Pod中暴露的容器連接埠一致。服務連接埠:80
容器連接埠:80
協議:TCP
註解
為該服務添加一個註解(Annotation)。
無
標籤
為該服務添加一個標籤,標識該服務。
無
建立完成後,可在服務頁面的操作列,對目標服務進行更新、YAML 編輯或刪除操作。