kubernetes 中的子网

Subnets in kubernetes

我仍在尝试将我的服务结构应用程序迁移到 kubernetes。在服务结构中,我有两种节点类型(实际上是子网),对于每个服务,我都配置了它将部署到哪个子网。我在 kubernetes yml 文件中看不到等效选项。这在 kubernetes 中可行吗?

首先,它们实际上不是子网。他们可能都在同一个子网中。但是有了 AKS,你就有了节点池。与 Service Fabric 类似,它们可以位于不同的子网中(在同一个 vnet* 内,afaik)。然后,您将使用 nodeSelectors 将 pods 分配给特定节点池上的节点。

如果您自己创建 kubernetes 集群,同样的原则也适用,您需要标记节点并使用 nodeSelectors 为您的部署定位特定节点。

在 Azure 中,AKS 集群可以部署到特定的子网。如果您正在寻找部署级别隔离,请将两种节点类型部署到 k8s 集群中的不同命名空间。这样节点类型就得到了隔离,并且可以使用服务名称和命名空间组合来访问

I want my backend services that access my SQL database in a different subnet to the front-end. This way I can limit access to the DB to backend subnet only.

这是解决网络安全问题的老办法。一种更现代的方法称为 零信任网络 ,参见例如BeyondCorp at Google or the book Zero Trust Networks.

限制谁可以访问什么

Kubernetes 限制哪些服务可以访问哪些服务的方法是使用 Network Policies

A network policy is a specification of how groups of pods are allowed to communicate with each other and other network endpoints.

NetworkPolicy resources use labels to select pods and define rules which specify what traffic is allowed to the selected pods.

与旧的基于子网的方法相比,这是一种软件定义限制访问的方法。而且规则更加声明性 使用 Kubernetes 标签而不是难以理解的 IP 号码。

这应该与身份验证结合使用。

如需灵感,另请阅读 We built network isolation for 1,500 services to make Monzo more secure

In the Security team at Monzo, one of our goals is to move towards a completely zero trust platform. This means that in theory, we'd be able to run malicious code inside our platform with no risk – the code wouldn't be able to interact with anything dangerous without the security team granting special access.

Istio 服务入口

此外,如果使用 Istio,您可以使用 Istio Service Entry. It is possible to use custom Network Policies for the same behavior as well, e.g. Cilium.

限制对外部服务的访问