Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何为2个远程节点有效地使用Kubernetes_Docker_Ssl_Kubernetes_Networking_Certbot - Fatal编程技术网

Docker 如何为2个远程节点有效地使用Kubernetes

Docker 如何为2个远程节点有效地使用Kubernetes,docker,ssl,kubernetes,networking,certbot,Docker,Ssl,Kubernetes,Networking,Certbot,这么长时间以来,我想把我所有的业务转移到K8S,但我仍然对此犹豫不决。这个问题可能涉及面很广,但请耐心听我说。让我先介绍一下现有的制度 我拥有很多不同的网站(>30)。很多都是为了我自己的实验,但有些是为了实际客户。我在纽约有一个VM(我使用的是DigitalOcean),有多个Docker容器,经常使用Docker compose进行管理。每个站点有一个容器。请求首先进入运行HAProxy的front容器。这会剥离SSL,然后将请求转发到运行Nginx的2proxy容器。然后,这两个容器将请求

这么长时间以来,我想把我所有的业务转移到K8S,但我仍然对此犹豫不决。这个问题可能涉及面很广,但请耐心听我说。让我先介绍一下现有的制度

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

我这样做有几个原因:

  • 我改变了很多站点配置,以及它们是如何连接在一起的。因此,
    front
    预计将永远运行,除非我获得证书,
    proxy
    s预计会发生很大变化。我更改
    代理
    映像,然后停止并重新创建第一个容器,然后停止并重新创建第二个容器,这样就不会出现任何停机
  • 当有多个节点时,我真的不知道如何获取证书。事实上,我在整个证书的事情上完全是个傻瓜,
    LetsEncrypt
    几乎是我所知道的做这件事的唯一方法
  • 我想直接编辑远程服务器上的文件。我有一个直接编辑生产代码的坏习惯,主要是因为我对设置开发、登台和生产环境感到不耐烦。这需要花费太多的时间,而且收益感觉很小。对于客户来说,他们通常是小企业,有30个网站,这样做会让我破产。我还可以总共有4台服务器,2台用于K8S群集,2台用作转发到NodePort的负载平衡器。这个计划行得通吗?证书的自动更新在这里如何工作

  • 请注意,可能是我的问题问错了问题(比如,可能是我不应该使用A和AAAA记录来指挥交通),而且有一种完全不同的方法来做到这一点,所以请随意提出正确的问题。

    脱帽阅读你的问题,写下全部内容,但其中一半是无用的

    回答你的问题:

  • 我们可以在DNS中添加相同或多个条目吗?example.com是否可能多次使用记录

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

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

  • 如果您将K8s与无状态PODs一起使用,则不能在容器内编辑直接文件。更好地管理内部的Github更新,并同时将容器部署到两个集群上,以便设置CI/CD。在使用主从概念设置数据库服务器的情况下,您是对的,您可以使用读取副本

  • 要将流量从服务器路由到K8s的内部应用程序,您可以使用
    节点端口(超过30000,但在SVC中更改目标端口)创建内部LB或公开服务,如果要使用目标端口重定向特定端口上的请求,则可以路由端口


  • 尽管如此,我仍然没有得到“我总共可以有4台服务器,2台用于K8S群集,2台用作转发到NodePort的负载平衡器。这个计划有效吗?证书的自动更新在这里如何工作?”哪台服务器在前面,哪台在后端。

    如果您的所有服务都是网站(通过http运行)您可以使用基于主机头(域名)将流量路由到POD,并且只使用一个LB和一个IP地址。最流行的入口控制器似乎是

    如果您不想使用LB,您可以使用它来公开nginx入口,但一旦您拥有具有多个节点的k8s群集,请使用LB,因为通常不建议使用hostPort,除非您有很好的理由这样做

    说到DNS,您可以使用类似的方法进行位置路由。您不一定需要使用AWS。我只是想告诉你们,这个问题有解决办法,但你们可以随心所欲

    用于与DNS-01质询一起使用的证书。 来自letsencrypt文档关于DNS-01挑战:

    • 即使您有多个web服务器,它也可以正常工作
    cetrmanager还将为您处理证书续订

    关于在服务器之间保持文件同步;这取决于文件,但对于静态内容,最好使用CDN将内容从一个源复制到其他位置


    对于同时部署到2个独立集群的情况,您可以使用一些CI/CD管道,例如..

    1。是的,可以有多个条目,但据我所知,DNS将进行循环,这意味着日本用户将有50%的时间去纽约,50%的时间去新加坡。我希望日本的用户总是去新加坡。这在DNS中是可能的吗?我听说过关于anycast的东西,但那很复杂,而且(可能)成本太高。我也听说过GeoDNS,但显然它们处理起来很挑剔,支持也不多。那么还有什么其他的吗?我不确定,我期待着建议基于地理位置的LB路由,如果你有静态内容使用CDN。