美文网首页
etcd-3. 网关 gateway

etcd-3. 网关 gateway

作者: husky_1 | 来源:发表于2022-03-09 11:43 被阅读0次

1. grpc-gateway

参考翻译自https://etcd.io/docs/v3.5/dev-guide/api_grpc_gateway

gRPC-Gateway 主要是为非 gRPC 的客户端提供 HTTP 接口

etcd v3 API使用 gRPC 作为消息传输协议。etcd 项目中包括了基于 gRPC 的 Go client 和命令行工具 etcdctl,客户端通过 gRPC 框架与 etcd 集群通讯。对于不支持 gRPC 的客户端语言,etcd 提供 JSON 的 gRPC-Gateway,通过 gRPC-Gateway 提供 RESTful 代理,转换 HTTP/JSON 请求为 gRPC 的 Protocol Buffer 格式的消息。

注意 在 HTTP 请求体中的 JSON 对象,其包含的 key 和 value 字段都被定义成了 byte 数组,因此必须在 JSON 对象中,使用 base64 编码对内容进行处理

1.1 版本

etcd 各个版本与grcp-gateway url的关系如下

etcd 版本 gateway url
v3.2及之前版本 [CLIENT-URL]/v3alpha/*
v3.3 [CLIENT-URL]/v3beta/* 和 [CLIENT-URL]/v3alpha/*
v3.4 [CLIENT-URL]/v3/* 和 [CLIENT-URL]/v3beta/*
v.3.5及之后版本 [CLIENT-URL]/v3/*

gRPC-gateway 不支持使用 基于TLS 身份验证

1.2 请求示例

假设对键test, 值aaa 的键值对进行操作,首先要对其进行base64编码,

 # 通过https://www.base64encode.org/ 获取编码值
 foo-----> Zm9v
 bar ------>YmFy
 

具体操作链接 https://etcd.io/docs/v3.5/dev-guide/api_grpc_gateway/

swagger 脚本:https://etcd.io/docs/v3.5/devguide/apispec/swagger/rpc.swagger.json

2. etcd-gateway

etcd 网关是一个简单的 TCP 代理,转发网络数据到 etcd 集群。网关是无状态和透明的;它既不检查客户端请求也不干涉集群应答。 它不会终止 TLS 连接,不会代替客户端进行 TLS 握手,也不会验证连接是否安全

网关支持多个 etcd 服务器端点,并采用简单的轮训策略(round-robin policy)。它只路由到可用的端点并对其客户端隐藏故障。未来可能会支持其他重试策略,例如加权轮询

2.1 使用场景

每个访问 etcd 的应用程序必须首先具有 etcd 集群客户端端点的地址。如果同一台服务器上的多个应用程序访问同一个 etcd 集群,每个应用程序仍然需要知道 etcd 集群的通告客户端端点。如果 etcd 集群被重新配置为具有不同的端点,每个应用程序可能还需要更新其端点列表。这种大规模的重新配置既乏味又容易出错。 etcd 网关通过充当稳定的本地端点解决了这个问题。典型的 etcd 网关配置让每台机器运行一个网关,监听本地地址,并且每个 etcd 应用程序都连接到其本地网关。结果只是网关需要更新其端点,而不是更新每个应用程序。 总之,为了自动传播集群端点更改,etcd 网关运行在每台机器上,为访问同一个 etcd 集群的多个应用程序提供服务

etcd 在如下场景中不应使用

  • 为了提高性能
    该网关不是为提高etcd群集性能而设计的。 它不提供缓存,监视合并或批处理。 etcd团队正在开发一种缓存代理,旨在提高群集的可伸缩性

  • 在集群管理系统运行时
    像Kubernetes这样的高级集群管理系统本身就支持服务发现。 应用程序可以使用系统管理的DNS名称或虚拟IP地址访问etcd集群。 例如,kube-proxy等效于etcd网关

2.2 启动gateway

以单机多节点为例, 在一台服务器启动三个etcd 服务组成集群

hostName IP 客户端交互端口 节点间交互端口
test1 127.0.0.1 12379 12380
tes2 127.0.0.1 22379 22380
test3 127.0.0.1 32379 32380

此时创建一个网关

etcd gateway start --endpoints=127.0.0.1:12379,127.0.0.1:22379,127.0.0.1:32379 --listen-addr=127.0.0.1:23790

{"level":"info","ts":1646797196.1293163,"caller":"etcdmain/gateway.go:103","msg":"Running: ","args":["etcd","gateway","start","--endpoints=127.0.0.1:12379,127.0.0.1:22379,127.0.0.1:32379","--listen-addr=127.0.0.1:23790"]}
{"level":"info","ts":1646797196.1296158,"caller":"etcdmain/main.go:47","msg":"notifying init daemon"}
{"level":"info","ts":1646797196.129632,"caller":"etcdmain/main.go:53","msg":"successfully notified init daemon"}
{"level":"info","ts":1646797196.1296465,"caller":"tcpproxy/userspace.go:87","msg":"ready to proxy client requests","endpoints":["127.0.0.1:12379","127.0.0.1:22379","127.0.0.1:32379"]}
参数名 含义
endpoints 以逗号分隔的用于转发客户端连接的etcd服务器目标列表,默认127.0.0.1:2379
discovery-srv 用于通过SRV记录引导群集终结点的DNS域
listen-addr 接收客户端请求绑定的接口和端口,默认:127.0.0.1:23790
retry-delay 重试连接到失败的端点之前的延迟时间。默认值:1m0s
insecure-discovery 接受不安全或容易受到中间人攻击的SRV记录,默认false
trusted-ca-file etcd集群的客户端TLS CA文件的路径。 用于认证端点,默认未设置

此时客户端可以通过网关地址去访问集群

etcdctl --endpoints=127.0.0.1:23790 put /gateway 123
OK

etcdctl --endpoints=127.0.0.1:23790 member list  --write-out=table
+------------------+---------+-------+------------------------+------------------------+------------+
|        ID        | STATUS  | NAME  |       PEER ADDRS       |      CLIENT ADDRS      | IS LEARNER |
+------------------+---------+-------+------------------------+------------------------+------------+
| 8211f1d0f64f3269 | started | test1 | http://127.0.0.1:12380 | http://127.0.0.1:12379 |      false |
| 91bc3c398fb3c146 | started | test2 | http://127.0.0.1:22380 | http://127.0.0.1:22379 |      false |
| fd422379fda50e48 | started | test3 | http://127.0.0.1:32380 | http://127.0.0.1:32379 |      false |
+------------------+---------+-------+------------------------+------------------------+------------+

相关文章

网友评论

      本文标题:etcd-3. 网关 gateway

      本文链接:https://www.haomeiwen.com/subject/muwnrrtx.html