F5 对接 Consul 实现服务发现和服务注册实践

​Consul 简介

Consul 是 HashiCorp 公司旗下的一个服务网格解决方案,提供了一个功能齐全的控制平面,具有服务发现、配置和分段功能。这些功能中的每一项都可以根据需要单独使用,也可以一起使用来构建一个完整的服务网格。在微服务框架中,经常会使用 Consul 来实现服务注册和发现。

Consul 的服务注册和发现功能有以下特点:


基于 Agent,分为 Client 和 Server 两种角色


Server 支持分布式、高可用集群部署,支持多集群。集群采用 RAFT 算法,Gossip 协议


服务注册支持 Agent 和 HTTP API 两种方式


服务发现支持 DNS 和 HTTP API 两种方式


支持服务的健康检查


自带 Web UI

F5 对接 Consul 实现服务发现和服务注册实践_第1张图片

F5的 MSDA 和 MSRA 工具目前均已支持对接 Consul,接下来就介绍使用方法,后面要用到的 rpm 包可以在以下地址下载。

MSDA下载地址:

https://github.com/ChinaModer...

MSRA下载地址:

https://github.com/ChinaModer...

F5 对接 Consul 实现服务发现

我们先搭建一个简单的 Consul 注册中心,并注册一个 web 服务,当前该服务共注册有两个实例。

F5 对接 Consul 实现服务发现和服务注册实践_第2张图片

接下来我们在 F5 上安装 msda-consul 的 iApp.LX 安装包,在下图所示的位置导入 rpm 文件。

F5 对接 Consul 实现服务发现和服务注册实践_第3张图片

接下来使用安装包生成的模板新建一个 iApp.LX 应用。

F5 对接 Consul 实现服务发现和服务注册实践_第4张图片

输入一个 iApp.LX 应用名字,模板选择 msdaconsul。

F5 对接 Consul 实现服务发现和服务注册实践_第5张图片

点击 Next 后依次填入 Consul 服务器的地址、需要发现的服务名称,以及需要在 F5 上生成的 Pool 名称、负载均衡算法、健康检查方法。

这里我们选择刚才提到的 web 服务。

F5 对接 Consul 实现服务发现和服务注册实践_第6张图片

点击 Deploy,部署该 iApp.LX 应用,状态为绿色,代表部署正常完成。

F5 对接 Consul 实现服务发现和服务注册实践_第7张图片

此时可以在 LTM 配置中看到创建的 Pool,Pool member 已从 Consul 正确获取到。

F5 对接 Consul 实现服务发现和服务注册实践_第8张图片

F5 对接 Consul 实现服务发现和服务注册实践_第9张图片

接下来我们在 Consul 的 web 服务下注册一个新的实例。

F5 对接 Consul 实现服务发现和服务注册实践_第10张图片

一段时间后,F5的Pool中也自动添加了这个实例。目前F5与Consul通信的默认周期为30秒。

F5 对接 Consul 实现服务发现和服务注册实践_第11张图片

至此,我们就完成了一个F5服务发现的配置。

F5 对接 Consul 实现服务注册

接下来我们演示如何将 F5 上配置的一个虚拟服务(Virtual Server,简称 vs)注册到 Consul 上。

首先在 F5 上配置一个简单的负载均衡服务,vs 名字为 web_vs_onf5。

F5 对接 Consul 实现服务发现和服务注册实践_第12张图片

要实现服务注册,同样需要先安装 msra-consul 的 iApp.LX 安装包。

F5 对接 Consul 实现服务发现和服务注册实践_第13张图片

接下来新建一个 iApp.LX 应用,模板选择 msraconsul。

F5 对接 Consul 实现服务发现和服务注册实践_第14张图片

和刚才演示的服务发现一样,我们也可以点击 Next 并依次填入相关参数后进行 Deploy。
F5 对接 Consul 实现服务发现和服务注册实践_第15张图片

但其实 F5 的 iAPP 是支持 REST API 方式进行配置的,这次服务注册我们就通过 API 来进行。

API Endpoint:

https:///mgmt/shared/iapp/blocks

HTTP 方法为 POST,内容格式为 JSON,以下就是我们这次注册需要 POST 的内容,相关 value 就是在 Web UI 中需要我们输入的内容。请注意注册到 Consul 上的服务名字是 F5 vs 的名字,本例中就是 web_vs_onf5。

{

  "name": "msraconsul_web_vs",

  "inputProperties": [

    {

      "id": "consulEndpoint",

      "type": "STRING",

      "value": "http://10.1.10.227:8500",

      "metaData": {

        "description": "consul endpoint address",

        "displayName": "consul endpoints",

        "isRequired": true

      }

    },

    {

      "id": "node",

      "type": "STRING",

      "value": "bigip247",

      "metaData": {

        "description": "Node name to be registered in consul server",

        "displayName": "Node name in consul server",

        "isRequired": true

      }

    },

    {

      "id": "nodeIpAddr",

      "type": "STRING",

      "value": "10.1.10.247",

      "metaData": {

        "description": "Node IP address to be registered",

        "displayName": "Node IP Address",

        "isRequired": true

      }

    },

    {

      "id": "serviceName",

      "type": "STRING",

      "value": "web_vs_onf5",

      "metaData": {

        "description": "Service name to be registered, virtual server name in F5",

        "displayName": "Service Name",

        "isRequired": true

      }

    },

    {

      "id": "serviceIpAddr",

      "type": "STRING",

      "value": "10.1.10.132",

      "metaData": {

        "description": "Service IP address to be registered",

        "displayName": "IP address",

        "isRequired": true

      }

    },

    {

      "id": "servicePort",

      "type": "NUMBER",

      "value": 80,

      "metaData": {

        "description": "Service port to be registered",

        "displayName": "Service Port",

        "isRequired": true

      }

    }

  ],

  "dataProperties": [

    {

      "id": "pollInterval",

      "type": "NUMBER",

      "value": 30,

      "metaData": {

        "description": "Interval of polling VIP status, 30s by default.",

        "displayName": "Polling Invertal",

        "isRequired": false

      }

    }

  ],

  "configurationProcessorReference": {

    "link": "https://localhost/mgmt/shared/iapp/processors/msraconsulConfig"

  },

  "auditProcessorReference": {

    "link": "https://localhost/mgmt/shared/iapp/processors/msraconsulEnforceConfiguredAudit"

  },

  "audit": {

    "intervalSeconds": 60,

    "policy": "ENFORCE_CONFIGURED"

  },

  "configProcessorTimeoutSeconds": 30,

  "statsProcessorTimeoutSeconds": 15,

  "configProcessorAffinity": {

    "processorPolicy": "LOAD_BALANCED",

    "affinityProcessorReference": {

      "link": "https://localhost/mgmt/shared/iapp/processors/affinity/load-balanced"

    }

  },

  "state": "BINDING"

}

完成 POST 后,我们同样可以看到已经成功 Deploy 的 iApp.LX 应用。

F5 对接 Consul 实现服务发现和服务注册实践_第16张图片

然后在 Consul 中,就能看到 F5 注册的服务。

F5 对接 Consul 实现服务发现和服务注册实践_第17张图片

F5 注册的服务无需配置健康检查,因为 F5 上的 vs 本身已经配置了健康检查,F5 只会将健康的 vs 注册到 Consul,一旦 F5 上的 vs 健康检查异常,F5 就会把相关实例从 Consul 上移除,直到 vs 恢复健康后又再次注册。我们尝试把 vs 后端的服务关闭,让 vs 处于不健康状态。

F5 对接 Consul 实现服务发现和服务注册实践_第18张图片

可以看到F5会自动把vs从Consul中移除。

F5 对接 Consul 实现服务发现和服务注册实践_第19张图片

至此,我们就完成了一个F5服务注册的配置。

你可能感兴趣的:(服务发现服务注册consul)