etcd 网关

etcd 网关,何时使用它以及如何设置

什么是 etcd 网关

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

网关支持多个 etcd 服务器端点,并采用简单的轮询策略工作。它仅路由到可用的端点,并向其客户端隐藏故障。未来可能会支持其他重试策略,例如加权轮询。

何时使用 etcd 网关

每个访问 etcd 的应用程序都必须首先拥有 etcd 集群客户端端点的地址。如果同一台服务器上的多个应用程序访问同一个 etcd 集群,每个应用程序仍然需要知道 etcd 集群的公开客户端端点。如果 etcd 集群重新配置为具有不同的端点,则每个应用程序可能还需要更新其端点列表。这种大规模的重新配置既繁琐又容易出错。

etcd 网关通过充当稳定的本地端点来解决这个问题。典型的 etcd 网关配置是在每台机器上运行一个监听本地地址的网关,并且每个 etcd 应用程序都连接到其本地网关。这样做的好处是只有网关需要更新其端点,而不需要更新每一个应用程序。

总之,为了自动传播集群端点的变化,etcd 网关在每台运行多个访问相同 etcd 集群的应用程序的机器上运行。

何时不使用 etcd 网关

  • 提高性能

网关并不是为提高 etcd 集群性能而设计的。它不提供缓存、合并 watch 或批处理。etcd 团队正在开发一种旨在提高集群可扩展性的缓存代理。

  • 在集群管理系统上运行

像 Kubernetes 这样的高级集群管理系统原生支持服务发现。应用程序可以通过系统管理的 DNS 名称或虚拟 IP 地址访问 etcd 集群。例如,kube-proxy 相当于 etcd 网关。

启动 etcd 网关

考虑一个具有以下静态端点的 etcd 集群:

名称地址主机名端口
infra010.0.1.10infra0.example.com2379
infra110.0.1.11infra1.example.com2379
infra210.0.1.12infra2.example.com2379

使用以下命令启动 etcd 网关以使用这些静态端点:

$ etcd gateway start --endpoints=infra0.example.com:2379,infra1.example.com:2379,infra2.example.com:2379
2016-08-16 11:21:18.867350 I | tcpproxy: ready to proxy client requests to [...]

或者,如果使用 DNS 进行服务发现,请考虑 DNS SRV 记录:

$ dig +noall +answer SRV _etcd-client._tcp.example.com
_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra0.example.com.
_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra1.example.com.
_etcd-client._tcp.example.com. 300 IN SRV 0 0 2379 infra2.example.com.
$ dig +noall +answer infra0.example.com infra1.example.com infra2.example.com
infra0.example.com.  300  IN  A  10.0.1.10
infra1.example.com.  300  IN  A  10.0.1.11
infra2.example.com.  300  IN  A  10.0.1.12

使用以下命令启动 etcd 网关以从 DNS SRV 记录中获取端点:

$ etcd gateway start --discovery-srv=example.com
2016-08-16 11:21:18.867350 I | tcpproxy: ready to proxy client requests to [...]

配置参数

etcd 集群

--endpoints

  • 用于转发客户端连接的 etcd 服务器目标的逗号分隔列表。
  • 默认值:127.0.0.1:2379
  • 必须包含端口。
  • 无效示例:https://127.0.0.1:2379(网关不终止 TLS)。请注意,网关不验证 HTTP 模式或检查请求,它只将请求转发到给定的端点。

--discovery-srv

  • 通过 SRV 记录引导集群端点的 DNS 域名。
  • 默认值:(未设置)

网络

--listen-addr

  • 绑定接受客户端请求的接口和端口。
  • 默认值: 127.0.0.1:23790

--retry-delay

  • 连接失败的端点后重试前的延迟时间。
  • 默认值: 1m0s
  • 无效示例: “123”(期望的时间单位格式)

安全性

--insecure-discovery

  • 接受不安全或易受中间人攻击的 SRV 记录。
  • 默认值: false

--trusted-ca-file

  • 指向 etcd 集群客户端 TLS CA 文件的路径,用于验证从 SRV 发现返回的端点。请注意,它仅用于验证发现的端点,而不是创建用于数据传输的连接。网关永远不会终止 TLS 连接或代表其客户端创建 TLS 连接。
  • 默认值:(未设置)

最后更新于 2025 年 6 月 3 日:递归地将 v3.6 的内容复制到 v3.7(a90b2a6)