gpt4 book ai didi

amazon-web-services - 在没有负载均衡器的情况下向公共(public) Internet 公开 K8s TCP 服务端点

转载 作者:行者123 更新时间:2023-12-04 12:44:46 24 4
gpt4 key购买 nike

因此,我正在开展一个项目,该项目涉及管理 k8s 集群内的许多 postgres 实例。每个实例都使用 Stateful Set 进行管理与 Service用于网络通信。我需要公开每个 Service通过端口 5432 上的 DNS 到公共(public)互联网。

这里最自然的方法是使用 k8s Load Balancer资源之类的 external dns将 DNS 名称动态映射到负载均衡器端点。这对许多类型的服务都很好,但是对于数据库来说有一个巨大的限制:idle connection timeout . AWS ELB 的最大空闲超时限制为 4000 秒。有许多长时间运行的分析查询/事务很容易超过该时间量,更不用说可能长时间运行的操作,如 pg_restore。 .

所以我需要某种解决方案来解决负载均衡器的限制。 Node IPs不可能,因为我需要端口 5432为集群中的每个 postgres 实例公开。 Ingress似乎也不太理想,因为它是仅支持 HTTP/HTTPS 的第 7 层代理。我已经看到涉及一些 configmap 诡计的 nginx-ingress 解决方法,但我有点担心会为一个大型项目进行类似的黑客攻击。 ExternalName很有趣,但即使我能找到更好的文档,我认为它最终可能会有与 NodeIP 类似的限制.

任何建议将不胜感激。

最佳答案

Kubernetes 入口 Controller 实现 Contour来自 Heptio 可以 proxy TCP streams当它们被封装在 TLS 中时.这是使用 SNI 所必需的。握手消息以将连接定向到正确的后端服务。

轮廓可以处理ingresses ,但另外引入了一个新的入口 API IngressRoute通过 CRD 实现. TLS 连接可以是 terminated at your backend服务。一个 IngressRoute可能看起来像这样:

apiVersion: contour.heptio.com/v1beta1
kind: IngressRoute
metadata:
name: postgres
namespace: postgres-one
spec:
virtualhost:
fqdn: postgres-one.example.com
tls:
passthrough: true
tcpproxy:
services:
- name: postgres
port: 5432
routes:
- match: /
services:
- name: dummy
port: 80

关于amazon-web-services - 在没有负载均衡器的情况下向公共(public) Internet 公开 K8s TCP 服务端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54812793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com