是否可以将不同的 pods/services 映射到 Kubernetes 中不同节点的接口?

Is it possible to map different pods/services to different node's interfaces in Kubernetes?

我正在尝试在 Kubernetes(实际上是 Amazon EKS)中构建一个基本的前端-后端拓扑,前端和后端 pods 位于同一节点上。我希望每个节点都有 2 个接口:public 一个,将连接到 Internet 网关,另一个是私有的,不会。因此,以某种方式将前端 pods(或服务)映射到 public 接口以路由流量 to/from 互联网并将后端 pods 映射到私有接口以防止任何外部访问它们。在 Kubernetes 中甚至可能吗?我知道我可能应该在任何地方都使用 public 接口并限制使用 ACL 的访问,但使用不同接口的设计对我来说看起来更简单、更安全。

这是一种过于复杂的方法。

您为什么不执行以下操作:

  1. 为您的 EKS 集群配置 public 和私有子网
  2. 在 "LoadBalancer" 类型的服务后面提供 'public' pods,配置为在您的 public 子网中提供 ELBS 或 NLB。
  3. 在 'ClusterIP' 类型的服务后面提供私有 pods - 并确保 eks 集群的实际节点在您的 vpc 的私有子网中提供。

您的节点没有充分的理由暴露在互联网上。使用 Loadbalancer 作为切口,使用 NAT 网关确保您的私有子网可以访问互联网。

这将您的 public api 表面限制在 'public' pods 中暴露在面向 public 的服务中的那些部分,同时离开你的集群的其余部分是黑暗的。

此外,

I know that I probably should use public interfaces everywhere and resrict access with ACLs

这不是个好主意。在任何地方都使用私有接口,并确保您的节点在 public 互联网上不可见。从整个互联网上访问服务器几乎不是一个好主意 - 它使您暴露于各种攻击,这些攻击将被 NAT、LoadBalancer 或其他中间系统减轻。

这通常不是 Kubernetes 中的工作方式。 Pod IP 将始终为 "private",即不用于 Internet 的集群 IP。您使用 LoadBalancer 类型的服务将特定漏洞插入集群 IP space。在 AWS 术语中,所有 pods 都有私有 IP,并且您使用 ELB 将特定事物桥接到 public 网络。

在 Kuberenetes 中是可能的。您需要为前端 pods 创建 ingress 或创建 loadbalancer 服务,以便从 public 接口访问它。不要为后端 pods 创建相同的内容。要限制从其他 pods 到您的后端和前端 pods 的流量,您可以创建 network policy 并仅允许这些 pods.

之间的流量

要在特定节点上生成 pods,请使用 nodeSelectorpodAffinity。如果你想要一个 pod 应该 运行 在每个节点或特定节点上,然后为它们创建 daemonset