服務網格ASM提供了對接Consul注冊中心功能,便于您將微服務遷移至ASM。本文介紹如何在ASM中對接Consul注冊中心。
前提條件
ASM版本需要升級到v1.7.5.31-g28ec7490-aliyun或者以上版本。
已部署Consul作為服務注冊中心,具體操作,請參見Installing Consul on Kubernetes。
請確保加入服務網格中的Kubernetes集群的Pod可以訪問Consul Server的訪問地址。例如Consul Server是安裝在相同的Kubernetes集群,Consul Server暴露了公網或者Consul Server提供了可訪問的內網地址。
Consul中已注冊示例服務,分別為Web,Web2以及內置的Consul。具體操作,請參見Services。
背景信息
ASM提供了對接Consul注冊中心的功能,便于您將微服務遷移至ASM的過程中,服務網格之內的服務能調用服務網格之外的服務。ASM并不會主動將服務網格中的服務信息注冊到Consul注冊中心。為了確保服務網格之外的服務能調用服務網格之內的服務,您需要將服務網格中的服務手動注冊到Consul注冊中心。
步驟一:獲取ASM-se-syncer配置信息
查看ASM實例ID。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面名稱/ID列,查看目標實例對應的ID。
查看集群地域ID。
查看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中的服務同步到服務網格中。
步驟三:查看Consul注冊中心對接結果
查看ASM組件安裝情況。
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在無狀態頁面查看到名為asm-serviceregistry-syncer的組件。
查看集群外服務(ServiceEntry)同步情況。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在集群外服務(ServiceEntry)頁面,可以看到3個注冊在Consul中的服務已經同步到服務網格中。
說明在集群外服務(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