为具有唯一域名的多个网站实现K8S群集



新的k8s并面临实施困境。我需要为多个Nginx-PHP网站部署一个K8S群集,每个网站都有自己的域。托管的网站数量可以定期增加/减少,其中数百/数千个在任何给定时间都部署。我排除了PHP部分,以使问题简单。

方案1- Ingress

的VHOST和SSL终止
  • 为每个新网站创建一个包含新服务和部署(NGINX POD)的新名称空间
  • 在nginx入口上设置虚拟主机,并将其路由基于主机名负责网站的服务

ProS:

  • 每个网站的POD/容器级隔离

可能是con?

  • 每个网站都需要新的服务和部署。这可能会导致数百或数千个服务/部署

方案2 -POD级别的VHOST和SSL终止

  • 创建单个Nginx服务和部署(使用PODS运行一个NginX容器)
  • 每个POD都可以访问共享Configmap和TLS-Secret,其中包含每个虚拟主机的Nginx Config和Tls Certs
  • 入口将所有流量路由到NGINX服务
  • 运行nginx的POD从文档root提供所需虚拟主机的网站内容

ProS:

  • 单个服务和部署
  • 状态较少的豆荚

cons:

  • 每个POD中的NGINX实例应需要重新加载以在添加新网站时加载新的VHOST Config/SSL证书,从而导致管理噩梦

以上哪种场景更适合?给定问题还有其他可能的方案吗?

如果您只想避免拥有数百个服务,则可以设置一个Nginx Ingress Controller(群集中有一个Ingress类),然后使用单个单个使用多个入口入口控制器。(如果您愿意,使用基于主机名的路由也可以是单个入口)

该控制器基本上在部署中运行多个POD,并且可以上下扩展(例如,使用HPA或/和群集Autoscaler或/和VPA)。

每次更改它们(没有停机时间)时,Nginx控制器会使用新的配置来重新加载Nginx。您也可以每个kubernetes入口具有SSL终止,因此,如果您有多个域也可以处理。

希望它有帮助!

使用Nginx Ingress Controller使用方案1。

我们使用它将外部用户路由到K8S群集中运行的多个应用程序

最新更新