当前位置: 首页 > 网络应用技术

ETCD网关和GRPC-GATEWAY

时间:2023-03-09 01:00:41 网络应用技术

  ETCD网关是一个简单的TCP代理,可以将网络数据转发到ETCD群集。网关是无状态且透明的。它不检查客户端请求,也不会干扰群集响应,支持多个ETCD服务器实例,并使用简单的周期策略。客户端无法感知服务器的故障。在以后,可以支持其他访问策略,例如加权旋转。

  当我们使用客户端连接到ETCD服务器时,每个应用程序访问ECTD必须知道我们要访问的ETCD群集实例的地址,即用于提供客户端服务的地址:etcd_liisten_client_urls。

  如果同一服务器上的多个应用程序访问相同的ETCD群集,则每个应用程序仍然需要知道eTCD群集广播的客户端端点地址。如果配置了ETCD群集并且具有不同的端点,则每个应用程序也需要更新它的端点列表。在一个大型集群环境中,重新配置的操作导致了重复和错误。

  可以通过ETCD网关解决上述问题:使用ETCD网关作为稳定的局部终点。对于客户端应用程序,它不会感知群集实例的更改。当ETCD群集实例更改时,网关仅需要更新其端点,而是需要更新每个客户端应用程序的代码实现。

  当然,并非所有场景都适用于ETCD网关。例如,下面的两个场景不适合使用。

  ETCD网关并非旨在提高ETCD簇的性能。它不提供诸如缓存,观察流合并或批处理处理之类的功能。ETCD团队目前正在开发一个缓存代理以提高群集的可扩展性。

  类似于Kubernetes的高级群集管理系统本身支持服务发现。应用程序可以使用系统的默认DNS名称或虚拟IP地址来访问ETCD群集。例如,Kube-Proxy,负责提供内部服务发现和负载平衡平衡的Kube-Proxy对于服务,实际上等同于ETCD网关的功能。

  总而言之,为了自动传播群集端点更改,ETCD网关在每台计算机上运行,以提供多个应用程序,并提供相同的ETCD群集服务。

  在下面,我们根据ETCD网关模式进行实践练习,并在以下环境中进行:

  通过ETCD网关命令启动ETCD网关来代理这些静态端点:

  请注意,它是用于转发客户端连接的ETCD服务器目标的列表。默认值是,类似的配置不能在下面使用:

  因为网关无法确定TLS。

  其他常用的配置如下:

  除了通过静态指定端点的方法外,您还可以使用DNS查找服务来找到它并执行DNS SRV输入设置。您可以尝试我们之前解释的DNS Discovery模式的群集。

  ETCD V3使用GRPC作为消息传输协议。ETCD项目包括基于GRPC的GO客户端和命令行工具ETCDCTL,并且客户端通过GRPC框架与ETCD群集通信。不支持GRPC的客户端语言,ETCD提供JSON的GRPC--Gateway,通过GRPC-GATEWAWE提供宁静的代理,并以GRPC的协议缓冲区格式转换HTTP/JSON请求。

  您需要注意的是,在HTTP请求中的JSON对象中,HTTP请求中包含的密钥和值字段定义为字节数组,因此您必须使用BASE64编码来处理JSON对象中的内容。为了方便起见,我将使用Curl在以下示例中启动HTTP请求。其他HTTP/JSON客户端(例如浏览器,邮递员等)可以执行这些操作。

  与与GRPC-GATEWAY接口相对应的关系的关系已更改:GRPC-GATEWAY从ETCD v3.3提供的接口路径:已更改:

  通过上述接口和ETCD版本之间的相应关系,您可以看到即使是v3版本下的API,GRPC-GATEWAWE提供的接口路径在内部版本下也有所不同,因此应注意当前的ETCD版本在使用中

  在下面,我们将根据ETCD提供的GRPC-GATEWAY界面执行关键值,以供阅读和写作,手表,交易和安全认证实践。

  让我们首先查看读取和写入的键值对,然后使用接口/v3/kv/range和/v3/kv/put读写键。我们将密钥值对象写入etcd:

  可以看出,我们通过HTTP请求成功编写了两对密钥对,其中键是ZM9V,值为YMFY。基本64编码的密钥值对,实际的书面键值为foo:bar:bar。

  然后,我们读取通过/v3/kv/range接口写入的密钥值:

  通过范围接口,获得了与“ ZM9V”相对应的值,这完全满足了我们的期望。

  当我们想将固定值的键值作为指定值获取时,我们可以使用以下请求:

  在请求中,关键的范围是ZM9V-ZM9W。结果,仅返回一个关键值,可以满足期望。通过接口/v3/kv/range和/v3/kv/put,我们可以轻松阅读并写下钥匙值。

  手表钥匙值对手表也是ETCD.ETCD中经常使用的功能。我们来到刚刚写出的“ ZM9V”。该请求如下:

  我们创建了一个请求,以监视键为ZM9V,ETCD服务器返回了成功的结果。

  此外,启动了请求以更新密钥值,该请求如下:

  我们可以在手表请求的执行页面上看到以下结果:

  写入钥匙值时,它会触发监视事件的发生,并且控制台输出时间的详细信息。http请求客户端与ETCD服务器建立长时间的连接。当监视的关键值更改时,事件通知将通知客户端。

  ETCD交易的实现用于完成一组操作。通过比较指定的条件,可以在成功条件下执行相应的操作,否则将回滚。API接口在GRPC-GATEWAWE中提供,并通过/v3/kv/txn接口启动事务。

  让我们比较指定的键值对的创建版本。如果成功,将执行更新操作。

  为了获得创建版本,在我们执行之前,我们检查了密钥值对信息:

  然后启动交易以设置钥匙值。比较是一个断言列表,具有多种组合条件。这里的条件是当creastevision的值为13(我们要求上面的关键值的创建版本),13),13),13),13),13),13),13),13),13),13),13),13),13),13),13),13),13),13),13),13)。表达条件,因此可以成功执行交易。

  以下是比较版本的键值的事务。HTTP请求实施如下:

  上面的命令获取指定版本的键值。您可以看到目标中目标的枚举值是版本。通过比较,与密钥ZM9V相对应的版本确实是8,因此执行查询结果并返回到与ZM9V相对应的正确值YMF6。