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

Joh*_*ohn 4 kubernetes

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

场景 1 - 入口处的 vhost 和 SSL 终止

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

优点:

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

可能是骗局?

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

场景 2 - Pod 级别的 vhost 和 SSL 终止

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

优点:

  • 单一服务和部署
  • 状态更少的豆荚

缺点:

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

以上哪种场景更适合?对于给定的问题,还有其他可能的情况吗?

Ric*_*ico 5

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

该控制器基本上运行在具有多个 Pod 的部署中,并且可以向上和向下扩展(例如使用HPA或/和集群自动缩放器或/和VPA)。

每次更改新配置时,nginx 控制器都会负责使用新配置重新加载 nginx(无停机时间)。您还可以为每个 Kubernetes Ingress 设置一个 SSL 终止,因此如果您有多个也可以处理的域。

希望能帮助到你!


P E*_*ram 5

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

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