本文主要介紹如何為應用添加服務Service實現叢集內部服務間的快速存取。
背景資訊
在EDAS中的Container ServiceKubernetes叢集中建立的應用往往都是由多個運行相同鏡像的一組Pod組成,Pod雖然擁有獨立的IP, 但Pod會快速地建立和刪除,所以通過訪問一個個可能被刪除的Pod來訪問應用是不現實的。
通過服務(Service)能夠解耦前端和後端的關聯,從而實現松耦合的微服務設計。
在EDAS中部署的K8s應用,除了通過公網或者私網Server Load Balancer實現服務對外訪問外,您還可為服務添加NodePort類型的Service,通過節點IP及節點連接埠提供服務外部存取。此外,在EDAS中的同一個K8s叢集中建立多個服務後,如果叢集內部服務間需要互相訪問,無法通過公網或者私網Server Load Balancer實現訪問,此時您可以為服務添加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服務,如果是其他類型服務,回顯日誌不相同,請以實際情況為準。