这更像是一个理论问题。你们如何创建运行多个应用程序的Kubernetes部署/服务/ pod的结构?
假设我想在我的服务器上运行3个Wordpress网站。为此,我需要:Nginx,MySQL,PHP-FPM和Wordpress代码库。
为Nginx,MySQL,PHP-FPM分离单独的pod /服务是否更好,这些服务将为3个Wordpress网站提供服务,并为3个网站创建3个Wordpress pod /服务?
或者为每个网站创建单独的pod /服务更好,因此分组将是:
使用选项2,我需要以某种方式将特定网站流量路由到特定服务/ pod
答案 0 :(得分:5)
Kubernetes非常灵活,因为您正在发现并允许您以多种方式构建应用程序。作为一般经验法则,每个容器每个容器只运行一个进程。但是,在pod中运行多个容器肯定是有效的用例。我认为对于您的用例,您可以使用这两种方法。
让我尝试分解你的每个组件:
<强>的MySQL 强>
我肯定会在它自己的pod中运行它。我会将它包装在StatefulSet中并使用自己的服务
Nginx + Wordpress
在我看来,你是否在一个或两个pod中运行这两个进程取决于你如何使用tls,如果有的话。众所周知,Wordpress非常容易受到攻击。因此,也许你的Nginx配置中有规则来限制对某些路径,方法等的访问。如果你在同一个pod中运行Nginx和Wordpress,那么你只能暴露Nginx端口以及流量到达Wordpress的唯一方式容器是否通过Nginx。如果您将这些容器作为单独的容器运行,那么从安全角度来看,您需要一些其他方法来确保您的Wordpress容器的入站流量仅来自您的Nginx容器。您可以使用NetworkPolicy资源完成此操作,也可以在这两个pod之间使用相互TLS。
总之,在微服务架构中,您希望您的流程尽可能地分离,以便可以单独管理和部署它们。因此,每个Pod每个容器的单个过程是有吸引力的。但是,有些实例要求您为每个Pod运行多个容器。在我的例子中,我使用安全作为这样的动机。