本文主要介紹如何為應用添加服務Service實現集群內部服務間的快速訪問。
背景信息
在EDAS中的容器服務Kubernetes集群中創建的應用往往都是由多個運行相同鏡像的一組Pod組成,Pod雖然擁有獨立的IP, 但Pod會快速地創建和刪除,所以通過訪問一個個可能被刪除的Pod來訪問應用是不現實的。
通過服務(Service)能夠解耦前端和后端的關聯,從而實現松耦合的微服務設計。
在EDAS中部署的K8s應用,除了通過公網或者私網負載均衡SLB實現服務對外訪問外,您還可為服務添加NodePort類型的Service,通過節點IP及節點端口提供服務外部訪問。此外,在EDAS中的同一個K8s集群中創建多個服務后,如果集群內部服務間需要互相訪問,無法通過公網或者私網負載均衡SLB實現訪問,此時您可以為服務添加ClusterIP類型Service,以實現集群內部服務間的訪問。
操作步驟
登錄EDAS控制臺。
在左側導航欄,單擊應用管理 > 應用列表,在頂部菜單欄選擇地域并在頁面上方選擇微服務空間,在集群類型下拉列表中選擇K8s集群,然后單擊目標應用名稱。
在應用總覽頁面的訪問方式配置區域,單擊服務(Service)右側的圖標。
說明如果您已經配置過Service,則在此處會顯示服務名稱和IP信息,您可單擊圖標修改Service的端口和協議類型,或可單擊圖標刪除Service。
在服務(Service)對話框,完成參數配置后單擊確認。
參數
描述
服務名
自定義設置服務名稱,服務名稱必須唯一,不能和已有服務名稱重復。
支持小寫字母、數字和短劃線(-),且必須以字母開頭,字母或數字結尾,長度范圍為2~32個字符。
服務類型
虛擬集群IP:即ClusterIP,指通過集群的內部IP暴露服務。選擇該值,服務只能夠在集群內部可以訪問,這也是默認的Service類型。
節點端口:即NodePort,通過每個Node上的IP和靜態端口(NodePort)暴露服務。NodePort服務會路由到ClusterIP服務,這個ClusterIP服務會自動創建。通過請求<NodeIP>:<NodePort>,可以從集群的外部訪問一個NodePort服務。
外部流量策略
Local:外部訪問流量只轉發給本機Pod。
Cluster:外部訪問流量可以轉發給集群中其它節點的Pod。
服務端口
服務前端端口,通過該端口訪問應用,可設置范圍為1~65535。
容器端口
進程監聽的端口。一般由程序定義,可設置范圍為1~65535。
節點端口
節點對外暴露該服務的端口。一般由程序定義,可設置范圍為30000~32767。
說明當前僅支持服務類型為NodePort時設置節點端口。
協議
服務協議,包含TCP和UDP,默認值為TCP。
結果驗證
在當前應用中添加服務Service后,您可以登錄K8s集群中的任一Pod,在Pod內根據Service固定IP地址訪問應用。
本示例驗證的是訪問Web服務,如果是其他類型服務,驗證方法不盡相同。
登錄容器服務管理控制臺。
在左側導航欄,單擊集群。
在集群列表頁面,選擇目標集群,在操作列下單擊 。
在頁面下方自動打開集群所關聯的CloudShell。打開集群關聯的CloudShell時,系統會自動加載集群的kubeconfig文件。您可以通過kubectl直接管理您的集群。
執行以下命令,查詢集群中所有的Pod。
kubectl get pods
查詢出的Pod列表如下:
NAME READY STATUS RESTARTS AGE store-pre-****-group-1-19-****7569b-f7*** 1/1 Running 0 28h store-prod-***duct-group-1-1-****7f894-zh*** 1/1 Running 0 28h
執行以下命令,登錄任一Pod。
kubectl exec -it store-prod-***duct-group-1-1-****7f894-zh*** /bin/sh
執行以下命令,根據Service固定IP訪問應用。
wget 10.XX.XX.XX:8081 #IP地址和服務端口需要和您的Service信息保持一致。
返回如下類似日志:
Connecting to 10.XX.XX.XX:8081 (10.XX.XX.XX:8081) index.html 100% |*******************************************************| 2203 0:00:00 ETA
說明本示例驗證的是訪問Web服務,如果是其他類型服務,回顯日志不相同,請以實際情況為準。