全部產品
Search
文件中心

Alibaba Cloud Service Mesh:對接Consul註冊中心

更新時間:Jun 30, 2024

Service MeshASM提供了對接Consul註冊中心功能,便於您將微服務遷移至ASM。本文介紹如何在ASM中對接Consul註冊中心。

前提條件

  • ASM版本需要升級到v1.7.5.31-g28ec7490-aliyun或者以上版本。

  • 已部署Consul作為服務註冊中心,具體操作,請參見Installing Consul on Kubernetes

  • 請確保加入Service Mesh中的Kubernetes叢集的Pod可以訪問Consul Server的訪問地址。例如Consul Server是安裝在相同的Kubernetes叢集,Consul Server暴露了公網或者Consul Server提供了可訪問的內網地址。

  • Consul中登入樣本服務,分別為Web,Web2以及內建的Consul。具體操作,請參見Services

背景資訊

ASM提供了對接Consul註冊中心的功能,便於您將微服務遷移至ASM的過程中,Service Mesh之內的服務能調用Service Mesh之外的服務。ASM並不會主動將Service Mesh中的服務資訊註冊到Consul註冊中心。為了確保Service Mesh之外的服務能調用服務網格之內的服務,您需要將Service Mesh中的服務手動註冊到Consul註冊中心。

步驟一:擷取ASM-se-syncer配置資訊

  1. 查看ASM執行個體ID。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面名稱/ID列,查看目標執行個體對應的ID。

  2. 查看叢集地區ID。

    1. 登入Container Service管理主控台

    2. 在左側導覽列,單擊叢集,在地區列,查看目的地組群對應的地區。

      例如,您叢集地區為華北2(北京),則叢集地區ID為cn-beijing。關於地區的詳細資料,請參見開服地區

  3. 查看AccessKey ID和AccessKey Secret。具體操作,請參見擷取AccessKey

步驟二:安裝ASM-se-syncer

  1. 通過kubectl串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

  2. 在本地安裝Helm。具體操作,請參見Helm

    說明

    使用kubectl串連叢集後,Helm用戶端會自動使用KubeConfig串連叢集。

  3. 下載並解壓asm-se-syncer至本地。

  4. 進入asm-se-syncer檔案夾中,找到values.yaml檔案,在values.yaml檔案中補充ASM ID、叢集地區ID、AccessKey ID和AccessKey Secret,並修改以下Consul服務資訊,然後儲存values.yaml檔案。

    [
      {
        "name": "consul-test",
        "prefix": "consul-",
        "type": "consul",
        "endpoint": "http://consul-server.consul:8500",
        "toNamespace": "default"
      }
    ]

    參數

    說明

    name

    註冊中心的名稱,保證唯一。

    prefix

    產生的叢集外服務(ServiceEntry)的名稱首碼。

    type

    註冊中心的類型,當前支援值為consul。

    endpoint

    註冊中心的訪問端點地址。

    toNamespace

    產生的叢集外服務(ServiceEntry)所在的命名空間,如果該命名空間不存在,將會自動建立。

    如果您想對接多個Consul註冊中心,您需要在values.yaml檔案中補充ASM ID、叢集地區ID、AccessKey ID和AccessKey Secret,並補充多個Consul服務資訊,然後儲存values.yaml

    [
      {
        "name": "consul-test01",
        "prefix": "consul01-",
        "type": "consul",
        "endpoint": "http://consul-server01.consul:8500",
        "toNamespace": "default"
      },
      {
        "name": "consul-test02",
        "prefix": "consul02-",
        "type": "consul",
        "endpoint": "http://consul-server02.consul:8500",
        "toNamespace": "default"
      }
    ]
  5. 執行以下命令,安裝ASM-se-syncer。

    helm install -f values.yaml se-syncer ./

    安裝ASM-se-syncer成功後,ASM會自動對接Consul註冊中心後,會自動在ACK叢集安裝asm-serviceregistry-syncer組件,並將在Consul中的服務同步到Service Mesh中。

步驟三:查看Consul註冊中心對接結果

  1. 查看ASM組件安裝情況。

    1. 登入Container Service管理主控台

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

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列,選擇工作負載 > 無狀態

    5. 無狀態頁面查看到名為asm-serviceregistry-syncer的組件。

      asm

  2. 查看叢集外服務(ServiceEntry)同步情況。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇叢集與工作負載管理 > 叢集外服務(ServiceEntry)

    3. 叢集外服務(ServiceEntry)頁面,可以看到3個註冊在Consul中的服務已經同步到Service Mesh中。

      說明
      • 叢集外服務(ServiceEntry)頁面下的Consul服務的名稱命名規則為:[上述步驟定義的prefix值]-[在Consul中註冊的服務名]。

      • 叢集外服務(ServiceEntry)頁面下的Consul服務的命名空間為上述步驟定義的toNamespace值。

常見問題

如何調用服務?

將Consul服務對應的叢集添加到資料面之後,您可以採用以下兩種方式進行調用。

  • 方式一:啟用DNS代理後通過叢集外服務(ServiceEntry)中的hosts名稱和連接埠調用。

    1. 啟用DNS代理。具體操作,請參見在ASM中使用DNS代理

    2. 擷取hosts名稱和連接埠調用服務。

      1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

      2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇叢集與工作負載管理 > 叢集外服務(ServiceEntry)

      3. 叢集外服務(ServiceEntry)頁面,單擊目標叢集外服務(ServiceEntry)操作列下的查看YAML

        編輯對話方塊,擷取hosts名稱和連接埠,使用http://<hosts名稱>:<連接埠>調用服務。hosts

  • 方式二:通過叢集外服務(ServiceEntry)中的addresses地址調用。

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇叢集與工作負載管理 > 叢集外服務(ServiceEntry)

    3. 叢集外服務(ServiceEntry)頁面,單擊目標叢集外服務(ServiceEntry)操作列下的查看YAML

      編輯對話方塊,擷取addresses地址,使用http://<addresses地址>調用服務。address

如何同步服務?

Consul中註冊的服務會自動同步為istio中的叢集外服務(ServiceEntry),刪除或更新服務,都會自動同步到istio中的叢集外服務(ServiceEntry)

如何在ASM中停用對接Consul註冊中心功能?

執行以下命令,刪除用於Consul同步服務註冊資訊的資源。

helm uninstall se-syncer