也许我很愚蠢,也许我只是没有使用好的话,但我甚至找不到在Stackexchange或整个Web上的任何地方的答案。
我创build了很多的网站,主要是Wordpress,Drupal,…
(最近,我开始体验Scala和Go,尝试创build一个网站来获得关于这些语言的一些知识。)
我的DNS提供商大多是DNSMadeEasy 。
起初,我只用了一个大的专用服务器 ,在Debian下,我的不同的网站只是在不同的文件夹,而Nginx,PHP-FPM …服务于我所有的网站。 传统的设置。
然后几年前,我切换到一个Docker设置,仍然在一个主机上 ,一个Nginx容器,一个PHP-FPM容器,一个MySQL容器,…每个网站。
还有一个nginx反向代理容器,将example.com网站的访问者redirect到example.com容器。
无论是传统的设置还是基于Docker的设置,我都将DNS主机的IP地址分配给我在DNSMadeEasy中不同网站的Alogging ,而且一切都按预期工作。
现在,我想使用Docker Swarm(1.12 Swarm)或Kubernetes 从单主机设置切换到多主机(也称为集群设置 ),以便能够更轻松地进行扩展,因为这是切换到Docker的目的第一名。
因此,我的不同网站的容器将分布在我的集群的不同主机上。
我打算使用在OpenStack上运行的欧洲云,因为我不能使用(<>隐私法),也不想使用(<>太昂贵的)美国云,如Google Cloud Engine或AWS EC2(<> Patriot Act欧洲数据),所以,请不要告诉我使用这些云。 我已经可以在Openstack云中安装Kubernetes集群和Docker Swarm集群了。
我的问题:我不明白,你如何将你的网站dynamic地指向新的服务和自动创build的pod?
假设我有四个主人(一个主人和三个工作人员)。
如果我只是做循环的DNS解决scheme ,把我的四个主机的所有四个IP在我的网站的Alogging,以便它的四个任何一个,这将是一场噩梦和一团糟,与caching标题和一切。 此外,使用DNSMadeEasy,他们有一个API来自动添加和删除logging,所以我想应该可以自动更新网站的Alogging或CNAMElogging,就像这个插件使用AWS Route53: https:// github。 com / wearemolecule / route53-kubernetes ? (我们可以看到,这使用外部LoadBalancer,所以我想我需要一个外部磅我的设置,如果我应该遵循该解决scheme?)
我知道,Kubernetes和Docker Swarm都使用DNS进行服务发现,而etcd / consul则使用注册和选举。
但据我所知,这是作为一个内部的DNS系统,而不是外部的,不是?
或者我应该把NS指向我的主机,并使用我的主机而不是DnsMadeEasy!
我错过了什么吗? 我做错了吗?
请有人帮助我,我开始有巨大的头痛试图解决的东西:)
ÿ
从Kubernetes 1.3起,DNS是使用插件pipe理器集群附件自动启动的内置服务。 DNS Pod和服务将在群集上进行安排,并且kubelets将被configuration为告诉单个容器使用DNS服务的IP来parsingDNS名称。
集群中定义的每个服务(包括DNS服务器本身)都将被分配一个DNS名称。 默认情况下,客户端Pod的DNSsearch列表将包括Pod自己的名称空间和群集的默认域。 举例说明:
在Kubernetes命名空间栏中假设一个名为foo的服务。 在命名空间栏中运行的Pod可以通过简单地为foo执行DNS查询来查找该服务。 在名称空间quux中运行的Pod可以通过为foo.bar执行DNS查询来查找此服务。
有关更多信息,请查看Kubernetes文档 。
负载平衡的默认configuration:
http { upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; } } }
有关更多信息,请查看NGINX文档 。
然后,您可以创build一个自定义脚本,以便根据需要与您的DNS提供程序API进行交互。
有关更多信息,请查看DNSMadeEasy REST API文档 。
具有群集模式的Docker 1.12带有内置负载均衡function。
在你的情况下,主要的好处是,你不必dynamic更新你的DNS取决于一个特定的容器运行在哪个主机上(这很可能会导致灾难,因为DNS ttl和caching)。
比如说你跑了:
docker service create --name nginx -p 80:80 nginx
这将创build一个副本的nginx服务,所以一个容器将在你的群中的随机主机上启动。 但是内置的负载均衡会将任何群集主机上的端口80上的请求路由到容器运行的主机。 同样,如果您使用以下方式扩展服务:
docker service scale nginx=2
这使得一个非常简单的设置:
docker service create部署您的应用程序 从你的问题,这听起来像你想在你的群体上运行多个网站,例如。 多个应用程序都监听端口80和端口443.正如@Flippy所指出的那样,您现在必须运行像HAProxy或nginx这样的第7层负载均衡器来检查请求主机头并适当地转发请求。 Docker 1.12 Swarm模式也很简单,这是一个很好的入门指南 。