Kubernetes 部署

Kubernetes dployments

我是 kubernetes 的新手。我想知道 kubernetes 环境中最好的生产部署方案是什么。

在过去,我习惯于将 Web 服务器(例如 Nginx 或 Apache)和其他层(我们称之为 AS 层)放在 DMZ 层中。这样,只有 Web 服务器在 DMZ 上,恶意攻击只能在 Web 服务器虚拟机上进行。

据我所知,在 K8S 部署中不再需要这种方法;这是因为 K8S 自己处理网络、pods 和流量。所以我在想最确定的部署场景。

假设有 3 个工作节点和 3 个主节点。我实际上像这张图片一样部署我的解决方案:

如您所见,我只将工作节点放入 DMZ 层;主节点在AS层。

我想知道的是:此部署是否“确实”。我担心的是是否存在恶意攻击,黑客将访问与 Web 服务器大不相同的工作节点(在那里他只能找到静态文件)

另一种情况,在“旧式学校”中是以下情况:

在这种情况下,在 DMZ 中,我只放置了 Web 服务器,在 AS 层中,我放置了完整的 K8S 集群。但我不知道这是否有意义以及它的可行性(每次将新的 POD/Service 添加到集群时,也许我应该在 DMZ 中配置 Web 服务器以便将请求路由到这个新服务)

您如何看待这两种方法?哪一个是“最好的”?

谢谢

安杰洛

在 Kubernetes 中有多种方法可以处理这种情况。我假设您正在处理本地部署。

  1. 您可以在 DMZ 中有一个前端集群,在公司防火墙内有一个内部集群。这是最安全的选项,但实施和管理起来既昂贵又耗时。
  2. 您可以为 DMZ 和内部系统创建单独的节点池,并实施网络策略来限制它们之间的网络流量。我会确保 DMZ 节点池不是默认节点池,因此部署需要明确以 DMZ 池为目标。
  3. 仅使用命名空间和网络策略来限制 DMZ 中 pods 运行ning 之间的流量。在大多数情况下,这应该是足够安全的,因为 pods 运行 在操作系统监狱中并且只能访问分配给他们的资源。

要记住的一件重要事情是 pods 中的容器应该 运行 在普通用户帐户下,永远不要在 root 下,初始化容器除外。

有关详细信息,请参阅:https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/