在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
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面右上方單擊使用YAML建立資源。
選擇樣本模板或自訂,然後單擊建立。
本樣本中,樣本模板是一個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 ##需要在服務中暴露該連接埠。
在無狀態應用列表中,單擊目標應用程式名稱或其右側的詳情,查看該Deployment的運行狀態。
步驟二:建立服務
在叢集管理頁左側導覽列,選擇 。
在建立服務對話方塊中,配置相關資訊。
配置項
描述
名稱
設定服務的名稱。
服務類型
選擇服務類型,即服務訪問的方式。包括:
虛擬叢集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。標籤
為該服務添加一個標籤,標識該服務。
單擊確定。
在服務頁面服務列表,可以查看新建立的服務。
在服務列表操作列,單擊目標服務的更新、YAML編輯、刪除,對目標服務做相應操作。
說明單擊服務名稱進入服務詳情頁面,您可以單擊外部端點後面的連結訪問應用。