服务网格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