服务网格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注册中心。

通过Aliyun CLI对接一个Consul Server

  1. 在浏览器中输入Cloud Shell,或者在OpenAPI Explorer中打开命令行操作界面。关于OpenAPIExplorer,请参见OpenAPI开发者门户
    说明 您可以根据实际需要打开多个命令行窗口,但最多可同时打开5个云命令行窗口。
  2. 创建config.json
    [
      {
        "name": "consul-test",
        "prefix": "consul-",
        "type": "consul",
        "endpoint": "http://consul-server.consul:8500",
        "toNamespace": "default"
      }
    ]
    参数 说明
    name 注册中心的名称,保证唯一。
    prefix 生成的服务条目的名称前缀。
    type 注册中心的类型,当前支持值为consul。
    endpoint 注册中心的访问端点地址。
    toNamespace 生成的服务条目所在的命名空间,如果该命名空间不存在,将会自动创建。
  3. 执行以下命令,对接Consul注册中心。
    aliyun servicemesh SetServiceRegistrySource --ServiceMeshId cf9e58cf8743748b3bd13867d6d87**** --Config "$(cat config.json)"
    ASM对接Consul注册中心后,会自动在ACK集群安装asm-serviceregistry组件,并将在Consul中的服务同步到服务网格中。

通过Aliyun CLI对接多个Consul Server

ASM支持一个网格实例对接多个Consul注册中心。

  1. 在浏览器中输入Cloud Shell,或者在OpenAPI Explorer中打开命令行操作界面。关于OpenAPIExplorer,请参见OpenAPI开发者门户
    说明 您可以根据实际需要打开多个命令行窗口,但最多可同时打开5个云命令行窗口。
  2. 使用以下内容,创建config.json
    [
      {
        "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"
      }
    ]
    参数 说明
    name 注册中心的名称,保证唯一。
    prefix 生成的服务条目的名称前缀。
    说明 为了避免不同注册中心中的服务产生同名问题, config.json中定义的prefix前缀需要进行区分。通过Consul注册中心引入的 服务条目名字为{prefix}{serviceName}的形式。
    type 注册中心的类型,当前支持值为consul。
    endpoint 注册中心的访问端点地址。
    toNamespace 生成的服务条目所在的命名空间,如果该命名空间不存在,将会自动创建。
  3. 执行以下命令,对接Consul注册中心。
    aliyun servicemesh SetServiceRegistrySource --ServiceMeshId cf9e58cf8743748b3bd13867d6d87**** --Config "$(cat config.json)"
    ASM对接Consul注册中心后,会自动在ACK集群安装asm-serviceregistry组件,并将在Consul中的服务同步到服务网格中。

查看Consul注册中心对接结果

  1. 查看ASM组件安装情况。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
    5. 无状态页面查看到名为asm-serviceregistry的组件。
      asm
  2. 查看服务条目同步情况。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格详情页面左侧导航栏选择流量管理 > 服务条目
    5. 服务条目页面可以看到3个注册在Consul中的服务已经同步到服务网格中。
      说明
      • 服务条目页面下的Consul服务的名称命名规则为:[步骤2定义的prefix值]-[在Consul中注册的服务名]。
      • 服务条目页面下的Consul服务的命名空间为步骤2定义的toNamespace值。

常见问题

如何调用服务?

将Consul服务对应的集群添加到数据面之后,可以采用两种方式进行调用:
  • 启用DNS代理后通过服务条目中的hosts名称和端口调用。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格信息页面单击右上角的功能设置
    5. 功能设置更新面板选中启用DNS代理功能,然后单击确定
    6. 在网格详情页面左侧导航栏选择流量管理 > 服务条目
    7. 服务条目页面单击目标服务条目操作列下的YAML
      编辑面板获取hosts名称和端口,使用 http://<hosts名称>:<端口>调用服务。 hosts
  • 通过服务条目中的addresses地址调用。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格详情页面左侧导航栏选择流量管理 > 服务条目
    5. 服务条目页面单击目标服务条目操作列下的YAML
      编辑面板获取addresses地址,使用 http://<addresses地址>调用服务。 address

如何同步服务?

Consul中注册的服务会自动同步为istio中的服务条目,删除或更新服务,都会自动同步到istio中的服务条目