全部产品
Search
文档中心

服务网格 ASM:对接Consul注册中心

更新时间:Jan 24, 2024

服务网格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. 网格管理页面名称/ID列,查看目标实例对应的ID。

  2. 查看集群地域ID。

    1. 登录容器服务管理控制台

    2. 在左侧导航栏,单击集群,在地域列,查看目标集群对应的地域。

      例如,您集群地域为华北2(北京),则集群地域ID为cn-beijing。关于地域的详细信息,请参见开服地域

  3. 查看AccessKey ID和AccessKey Secret。具体操作,请参见获取AccessKey

步骤二:安装ASM-se-syncer

  1. 通过kubectl连接集群。具体操作,请参见获取集群KubeConfig并通过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

    生成的集群外服务(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"
      }
    ]
  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. 查看集群外服务(ServiceEntry)同步情况。

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择集群与工作负载管理 > 集群外服务(ServiceEntry)

    3. 集群外服务(ServiceEntry)页面,可以看到3个注册在Consul中的服务已经同步到服务网格中。

      说明
      • 集群外服务(ServiceEntry)页面下的Consul服务的名称命名规则为:[上述步骤定义的prefix值]-[在Consul中注册的服务名]。

      • 集群外服务(ServiceEntry)页面下的Consul服务的命名空间为上述步骤定义的toNamespace值。

常见问题

如何调用服务?

将Consul服务对应的集群添加到数据面之后,您可以采用以下两种方式进行调用。

  • 方式一:启用DNS代理后通过集群外服务(ServiceEntry)中的hosts名称和端口调用。

    1. 启用DNS代理。具体操作,请参见在ASM中使用DNS代理

    2. 获取hosts名称和端口调用服务。

      1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

      2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择集群与工作负载管理 > 集群外服务(ServiceEntry)

      3. 集群外服务(ServiceEntry)页面,单击目标集群外服务(ServiceEntry)操作列下的查看YAML

        编辑对话框,获取hosts名称和端口,使用http://<hosts名称>:<端口>调用服务。hosts

  • 方式二:通过集群外服务(ServiceEntry)中的addresses地址调用。

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择集群与工作负载管理 > 集群外服务(ServiceEntry)

    3. 集群外服务(ServiceEntry)页面,单击目标集群外服务(ServiceEntry)操作列下的查看YAML

      编辑对话框,获取addresses地址,使用http://<addresses地址>调用服务。address

如何同步服务?

Consul中注册的服务会自动同步为istio中的集群外服务(ServiceEntry),删除或更新服务,都会自动同步到istio中的集群外服务(ServiceEntry)

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

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

helm uninstall se-syncer