全部產品
Search
文件中心

Enterprise Distributed Application Service:添加服務Service

更新時間:Jun 30, 2024

本文主要介紹如何為應用添加服務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,以實現叢集內部服務間的訪問。

操作步驟

  1. 登入EDAS控制台

  2. 在左側導覽列,單擊應用管理 > 應用列表,在頂部功能表列選擇地區並在頁面上方選擇微服務空間,在叢集類型下拉式清單中選擇K8s叢集,然後單擊目標應用程式名稱

  3. 應用總覽頁面的訪問方式配置地區,單擊服務(Service)右側的加號表徵圖。

    說明

    如果您已經配置過Service,則在此處會顯示服務名稱和IP資訊,您可單擊編輯表徵圖修改Service的連接埠和協議類型,或可單擊刪除表徵圖刪除Service。

  4. 服務(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時設定節點連接埠。

    協議

    服務合約,包含TCPUDP,預設值為TCP

    說明

    為應用添加服務Service時,您需要關注以下兩點:

    • 系統支援在同一個Service裡,添加多個連接埠映射。但是如果您需要將不同的連接埠映射,設定為不同的服務名稱,則可以重複執行步驟3~步驟4,設定多個Service。

    • 在同一個服務Service,添加多個連接埠映射時,服務連接埠和協議兩兩之間不得完全一樣。如80|8080|TCP80|8081|TCP,這兩個連接埠映射無法儲存,提示連接埠映射存在重複項

結果驗證

在當前應用中添加服務Service後,您可以登入K8s叢集中的任一Pod,在Pod內根據Service固定IP地址訪問應用。

本樣本驗證的是訪問Web服務,如果是其他類型服務,驗證方法不盡相同。

  1. 登入Container Service管理主控台

  2. 在左側導覽列,單擊叢集

  3. 叢集列表頁面,選擇目的地組群,在操作列下單擊更多 > 通過CloudShell管理叢集

    在頁面下方自動開啟叢集所關聯的CloudShell。開啟叢集關聯的CloudShell時,系統會自動載入叢集的kubeconfig檔案。您可以通過kubectl直接管理您的叢集。

  4. 執行以下命令,查詢叢集中所有的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
  5. 執行以下命令,登入任一Pod。

    kubectl exec -it store-prod-***duct-group-1-1-****7f894-zh*** /bin/sh
  6. 執行以下命令,根據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服務,如果是其他類型服務,回顯日誌不相同,請以實際情況為準。