关于服务发现:F5-对接-Consul-实现服务发现和服务注册实践

41次阅读

共计 3735 个字符,预计需要花费 10 分钟才能阅读完成。

​Consul 简介

Consul 是 HashiCorp 公司旗下的一个服务网格解决方案,提供了一个功能齐全的管制立体,具备服务发现、配置和分段性能。这些性能中的每一项都能够依据须要独自应用,也能够一起应用来构建一个残缺的服务网格。在微服务框架中,常常会应用 Consul 来实现服务注册和发现。

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


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


Server 反对分布式、高可用集群部署,反对多集群。集群采纳 RAFT 算法,Gossip 协定


服务注册反对 Agent 和 HTTP API 两种形式


服务发现反对 DNS 和 HTTP API 两种形式


反对服务的健康检查


自带 Web UI

F5 的 MSDA 和 MSRA 工具目前均已反对对接 Consul,接下来就介绍应用办法,前面要用到的 rpm 包能够在以下地址下载。

MSDA 下载地址:

https://github.com/ChinaModer…

MSRA 下载地址:

https://github.com/ChinaModer…

F5 对接 Consul 实现服务发现

咱们先搭建一个简略的 Consul 注册核心,并注册一个 web 服务,以后该服务共注册有两个实例。

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

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

输出一个 iApp.LX 利用名字,模板抉择 msdaconsul。

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

这里咱们抉择方才提到的 web 服务。

点击 Deploy,部署该 iApp.LX 利用,状态为绿色,代表部署失常实现。

此时能够在 LTM 配置中看到创立的 Pool,Pool member 已从 Consul 正确获取到。

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

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

至此,咱们就实现了一个 F5 服务发现的配置。

F5 对接 Consul 实现服务注册

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

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

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

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

和方才演示的服务发现一样,咱们也能够点击 Next 并顺次填入相干参数后进行 Deploy。

但其实 F5 的 iAPP 是反对 REST API 形式进行配置的,这次服务注册咱们就通过 API 来进行。

API Endpoint:

https://<bigip_mgmt_ip>/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 利用。

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

F5 注册的服务无需配置健康检查,因为 F5 上的 vs 自身曾经配置了健康检查,F5 只会将衰弱的 vs 注册到 Consul,一旦 F5 上的 vs 健康检查异样,F5 就会把相干实例从 Consul 上移除,直到 vs 恢复健康后又再次注册。咱们尝试把 vs 后端的服务敞开,让 vs 处于不衰弱状态。

能够看到 F5 会主动把 vs 从 Consul 中移除。

至此,咱们就实现了一个 F5 服务注册的配置。

正文完
 0