【问题标题】:How to configure envoy edge proxy for redis service in kubernetes?如何在 Kubernetes 中为 redis 服务配置 envoy 边缘代理?
【发布时间】:2018-09-20 21:43:28
【问题描述】:

我想将在 kubernetes 中运行的 Redis HA 服务公开给在云外运行的客户端。为此,我正在尝试设置envoy which supports Redis。 我正在使用大使,它是 kubernetes 特使的包装器。按照this doc 进行初始设置。我是 Envoy 和 Kubernetes 的新手。

如何配置大使作为我的 Redis 服务的代理?

我猜在某个地方可以指定代理中 Redis 服务的地址。很难获得此信息。This 页面指的是特使文档中的 Redis 代理,但我不知道在哪里进行更改。

另外,对于我的用例,我只对边缘代理功能感兴趣,而不是 envoy 的服务代理功能。

【问题讨论】:

    标签: redis kubernetes envoyproxy


    【解决方案1】:

    我会关注你的第一句话,而不是你自己的结论。

    您希望将 Redis 公开给公共网络。
    你是如何与 Envoy 合作的,我无法理解;您可能只需要一个类型设置为 LoadBalancer 的 Kubernetes 服务。
    这是一个糟糕的主意,因为 Redis 默认情况下是未经身份验证的,并且连接是明文的,不要说你没有被警告过 ;-)

    至于 Envoy,当然,它确实支持 Redis,但 Ambassador 与它无关,如果我正确理解您的要求,这完全是一种过度杀伤,这似乎主要是分散您的注意力,而不是帮助您完成工作。

    https://kubernetes.io/docs/tutorials/stateless-application/expose-external-ip-address/

    【讨论】:

    • 在公共网络上公开 Redis 确实是个糟糕的主意。但我不这样做。我想从运行在公司网络内但在 k8 之外的客户端访问在 kubernetes 中运行的 Redis。我尝试代理的原因是因为我在 HA 模式下运行 Redis,这意味着它有主服务器、从服务器和哨兵。从站被启用以服务读取请求。 k8 外部的客户端连接到 k8 中的哨兵服务,该服务将主从的内部 pod 地址提供给客户端。客户端无法使用这些地址与 k8 中的 Redis 节点通信......
    • ....这是代理出现的地方。我想将循环读取的请求分发到所有 Redis 节点。 LoadBalancer 服务无法区分 k8 中的 Redis 节点是主节点还是从节点。因此它无法将“设置”请求路由到主服务器。另外,后来我发现enovy不支持Redis复制,所以我想这不是一个可行的选择。
    • @rainhacker 好吧,忘记 Envoy 吧(尽管我很确定你的结论是不正确的)。但是您不知道如何在 HA Redis 设置中分配连接。显然,您不能指望连接到分布式系统的客户端跟踪所有从属系统的所有 IP,等等。这在现实世界中根本行不通。长话短说:如果你从 Helm 安装了 redis-ha,那就太好了。否则,helm install stable/redis-ha,因为否则我无法保证您的设置,而且我不会对此充满信心(没有冒犯的意思,我可能会把它搞砸)...
    • @rainhacker ...然后,您将拥有一个名为 <release-name>-redis-ha-sentinel 的服务。连接到此服务将像您描述的那样对您的连接进行负载平衡,减去连接到不同 IP 地址的不必要的复杂性(或直接连接到 pod,坏主意,如果 pod 死了怎么办等?)
    • 我认为您对 Redis 客户端的工作方式缺乏了解。 Redis 客户端库在其末端维护 Redis 节点的拓扑,并不时刷新它。是的,连接到 Redis 的客户端会跟踪所有 IP。 -redis-ha-sentinel 不起作用,因为客户端将通过此服务从运行在 K8 内部的哨兵获取主/从 IP,该服务将告诉主/从 Pod 的 IP。这些地址不能被外部客户端用来查询K8内部的Redis。
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多