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

时间:2019-03-19 14:25:39

标签: kubernetes

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

方案1-入口处虚拟主机和SSL终止

  • 为每个新网站创建一个包含新服务和部署(NGINX pods)的新命名空间
  • 在NGINX Ingress上设置虚拟主机,并根据主机名将其路由到负责网站的服务

优点:

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

可能是骗局?

  • 每个网站都需要一项新服务和一个部署。这可能导致成百上千的服务/部署

方案2-虚拟主机和SSL在Pod级别终止

  • 创建一个NGINX服务和一个部署(带有运行单个NGINX容器的Pod)
  • 每个Pod都可以访问共享的configmap和tls-secret,其中包含每个虚拟主机的NGINX配置和tls证书
  • Ingress将所有流量路由到NGINX服务
  • 运行NGINX的Pod从文档根目录为所需的虚拟主机提供网站内容

优点:

  • 单一服务和部署
  • 少点豆荚

缺点:

  • 每个Pod中的NGINX实例都需要重新加载,以在添加新网站时加载新的vhost config / ssl证书,从而导致管理噩梦

以上哪种情况最适合?给定问题还有其他可能的情况吗?

2 个答案:

答案 0 :(得分:2)

If you'd like to just avoid having hundreds of services you can set up a single nginx ingress controller (with a single ingress class in your cluster) and then create multiple Ingresses using the single ingress controller. (It can also be a single Ingress if you'd like, with hostname-based routing)

This controller basically runs in a deployment with multiple pods and can scale up and down (for example using an HPA or/and the cluster autoscaler or/and the VPA).

The nginx controller takes care of reloading nginx with the new configs everytime you changed them (with no downtime). You can also have an SSL termination per Kubernetes Ingress, so if you have multiple domains that can also be handled.

Hope it helps!

答案 1 :(得分:2)

使用nginx入口控制器进入场景1。

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