首页 > 解决方案 > 如何有效地为 2 个远程节点使用 Kubernetes

问题描述

我想把我所有的操作都转移到 K8S 上这么久了,但我仍然犹豫不决。这个问题可能很广泛,但请耐心等待。让我先描述一下现有的系统。

我托管了很多不同的网站(>30)。其中很多是为了我自己的实验,但有些是针对实际客户的。我在纽约有 1 台虚拟机(我正在使用 DigitalOcean),带有多个 Docker 容器,经常使用docker-compose. 每个站点有 1 个容器。请求首先进入front运行 HAProxy 的容器。这会剥离 SSL,然后将请求转发到 2 个proxy运行 Nginx 的容器。然后这 2 个容器将请求转发给所有其他容器以提供服务。我所有的证书都来自 LetsEncrypt,并且必须每 3 个月更新一次。为此,我停止front,运行certbot --apache,使其绑定到端口 80。它获取证书,然后我停止 apache,然后重新创建front容器。

我这样做有几个原因:

我意识到我的系统没有得到很好的维护。图像没有得到安全更新,我不知道它们是否仍在运行,除非我手动检查它们,这很乏味,所以我根本不做。此外,我有亚洲背景,这意味着我有来自美国和亚洲的客户,这几乎是彼此相距最远的地方,这大大增加了延迟。这意味着亚洲的客户必须等待大约 1-2 秒才能真正加载页面,这是永恒的。过去一周我也搬到了亚洲,所以现在通过 ssh 访问纽约服务器的速度非常慢,而且我的工作效率直线下降。所以现在可能是改造一切并永远迁移到 K8S 的最佳时机。但是,在规划过程中存在重大问题,目前,K8S 似乎缺少很多对我来说只是破坏交易的东西。所以请批评我的计划,并根据你认为合适的方式改进它们。

我现在打算做的是:将有 2 台服务器,1 台在纽约,1 台在新加坡。这 2 个服务器将有 2 个不同的 IP 地址。这 2 个将运行 K8S Pod。最好,它们应该具有完全相同的配置、网站容器、数据库容器等。然后对于每个网站 DNS 记录,我将修改 A 和 AAAA 记录,以便它们包含 2 个服务器的 2 个 IP 地址。

我的问题是:

  1. 如果用户在中国,DNS 是否总是路由到新加坡,如果用户在英国,DNS 是否总是路由到纽约?
  2. 如何实际获得 2 个节点的证书?我的理解是,certbot在颁发证书的时候,是把域名和节点ip地址关联起来的。这意味着 2 个节点不能拥有相同域名的相同证书。这个对吗?如果您可以获得 2 个节点的证书,那么该怎么做呢?
  3. 如何在服务器之间保持文件同步?假设我在新加坡服务器中编辑文件树,我希望几秒钟后在纽约也修改该文件。对于数据库,我可以在新加坡或纽约有一个主数据库,然后在两个位置都有从数据库,当主数据库更新时,从数据库可以作为每个服务器的低延迟数据库。
  4. 如何实际将请求从服务器路由到内部的容器。我最初计划使用 NodePort,将请求定向到 Pod,front然后可以将请求分发到其他 Pod,但是当 NodePort 无法连接到低于 30000 的端口时,我很伤心。我知道的唯一其他选择是拥有将流量定向到 2 台服务器的外部负载平衡服务。但这要花 15 美元/站点/月,而且因为我有超过 30 个站点,这样做会让我破产。我也可以总共拥有 4 台服务器,其中 2 台用于 K8S 集群,2 台用作将转发到 NodePort 的负载均衡器。这个计划会奏效吗?证书的自动更新甚至在这里如何工作?

请注意,我的问题可能是错误的问题(例如,我不应该使用 A 和 AAAA 记录来引导流量),并且有完全不同的方法可以做到这一点,所以请随时提出正确的问题.

标签: dockersslkubernetesnetworkingcertbot

解决方案


阅读您的问题以写下全部内容,但其中一半是无用的。

你的问题的答案:

  1. 我们可以在 DNS 中添加相同或多个条目吗?example.com 与 A​​ 记录可能多次?

  2. 您可能需要设置具有区域入口支持的区域 K8s 集群。您可以将certmanagerletencrypt一起使用,它将在 LB 级别管理您的证书并在前面终止它。

    如果您希望使用两个虚拟机,请在两者前面放置一个 LB 并在那里设置 SSL。

  3. 如果您使用带有无状态 POD 的 K8s,则不能选择在容器内编辑直接文件。更好地管理内部的 Github 更新,并将容器同时部署到两个集群上,这样您就可以设置 CI/CD。在使用主从概念的数据库服务器设置的情况下,您是正确的,您可以使用只读副本。

  4. 要将流量从服务器路由到 K8s 的内部应用程序,您可以使用内部 LB 或公开服务node ports高于 30000,但在 SVC 中更改目标端口),如果您想使用目标端口在特定端口上重定向请求,则路由该端口。

仍然,我没有得到“我也可以总共有 4 台服务器,2 台用于 K8S 集群,2 台用作将转发到 NodePort 的负载均衡器。这个计划是否可行?证书的自动更新甚至在这里如何工作? " 哪台服务器在前面,哪台在后端。


推荐阅读