服务网格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配置信息

  1. 查看ASM实例ID。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
      网格信息页面查看ASM实例ID。
  2. 查看集群地域ID。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏单击集群
      集群页面查看目标集群的地域,例如您集群地域为华北2(北京),则集群地域ID为cn-beijing。
  3. 查看AccessKey ID和AccessKey Secret。具体操作,请参见获取AccessKey

步骤二:安装ASM-se-syncer

  1. 已通过kubectl连接集群。具体操作,请参见通过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 生成的服务条目的名称前缀。
    type 注册中心的类型,当前支持值为consul。
    endpoint 注册中心的访问端点地址。
    toNamespace 生成的服务条目所在的命名空间,如果该命名空间不存在,将会自动创建。
    如果您想对接多个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中的服务同步到服务网格中。

步骤三:查看Consul注册中心对接结果

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

如何在ASM中停用对接Consul注册中心功能?

执行以下命令,删除用于Consul同步服务注册信息的资源。
helm uninstall se-syncer