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配置資訊
查看ASM執行個體ID。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面名稱/ID列,查看目標執行個體對應的ID。
查看叢集地區ID。
在左側導覽列,單擊叢集,在地區列,查看目的地組群對應的地區。
例如,您叢集地區為華北2(北京),則叢集地區ID為cn-beijing。關於地區的詳細資料,請參見開服地區。
查看AccessKey ID和AccessKey Secret。具體操作,請參見擷取AccessKey。
步驟二:安裝ASM-se-syncer
通過kubectl串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
在本地安裝Helm。具體操作,請參見Helm。
說明使用kubectl串連叢集後,Helm用戶端會自動使用KubeConfig串連叢集。
下載並解壓asm-se-syncer至本地。
進入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" } ]
執行以下命令,安裝ASM-se-syncer。
helm install -f values.yaml se-syncer ./
安裝ASM-se-syncer成功後,ASM會自動對接Consul註冊中心後,會自動在ACK叢集安裝asm-serviceregistry-syncer組件,並將在Consul中的服務同步到Service Mesh中。
步驟三:查看Consul註冊中心對接結果
查看ASM組件安裝情況。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列,選擇 。
在無狀態頁面查看到名為asm-serviceregistry-syncer的組件。
查看叢集外服務(ServiceEntry)同步情況。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在叢集外服務(ServiceEntry)頁面,可以看到3個註冊在Consul中的服務已經同步到Service Mesh中。
說明在叢集外服務(ServiceEntry)頁面下的Consul服務的名稱命名規則為:[上述步驟定義的prefix值]-[在Consul中註冊的服務名]。
在叢集外服務(ServiceEntry)頁面下的Consul服務的命名空間為上述步驟定義的
toNamespace
值。
常見問題
如何調用服務?
將Consul服務對應的叢集添加到資料面之後,您可以採用以下兩種方式進行調用。
方式一:啟用DNS代理後通過叢集外服務(ServiceEntry)中的hosts名稱和連接埠調用。
啟用DNS代理。具體操作,請參見在ASM中使用DNS代理。
擷取hosts名稱和連接埠調用服務。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在叢集外服務(ServiceEntry)頁面,單擊目標叢集外服務(ServiceEntry)操作列下的查看YAML。
在編輯對話方塊,擷取hosts名稱和連接埠,使用http://<hosts名稱>:<連接埠>調用服務。
方式二:通過叢集外服務(ServiceEntry)中的addresses地址調用。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在叢集外服務(ServiceEntry)頁面,單擊目標叢集外服務(ServiceEntry)操作列下的查看YAML。
在編輯對話方塊,擷取addresses地址,使用http://<addresses地址>調用服務。
如何同步服務?
Consul中註冊的服務會自動同步為istio中的叢集外服務(ServiceEntry),刪除或更新服務,都會自動同步到istio中的叢集外服務(ServiceEntry)。
如何在ASM中停用對接Consul註冊中心功能?
執行以下命令,刪除用於Consul同步服務註冊資訊的資源。
helm uninstall se-syncer