是否可以将不同的 pod/服务映射到 Kubernetes 中不同节点的接口?



我正试图在Kubernetes(实际上是Amazon EKS(中构建一个基本的前端-后端拓扑,前端和后端pod都位于同一节点上。我希望每个节点都有两个接口:公共接口,它将连接到互联网网关,私有接口,它不会。因此,以某种方式将前端吊舱(或服务(映射到公共接口以路由往返于互联网的流量,并将后端吊舱映射到专用接口以防止任何外部访问它们,这似乎是很自然的。这在Kubernetes中可能吗?我知道我可能应该在任何地方使用公共接口,并使用ACL限制访问,但使用不同接口的设计对我来说更简单、更安全

这通常不是Kubernetes中的工作方式。Pod IP将始终是"私有"的,即不与互联网一起使用的集群IP。您可以使用LoadBalancer类型的服务在集群IP空间中插入特定的漏洞。用AWS的术语来说,所有的pod都有私有IP,你可以使用ELB将特定的东西连接到公共网络。

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

你为什么不做以下事情呢:

  1. 为EKS群集提供公用和专用子网的混合
  2. 在"LoadBalancer"类型的服务后面提供"public"pod,配置为在公共子网中提供ELBS或NLB
  3. 在"ClusterIP"类型的服务后面配置专用pod,并确保eks集群的实际节点在vpc的专用子网中进行配置

没有充分的理由让您的节点暴露在互联网上。使用负载均衡器作为切口,并使用NAT网关来确保您的私有子网可以访问互联网。

这将您的公共api表面限制在面向公共的服务中暴露的"公共"pod的那些部分,同时使集群的其余部分处于黑暗状态。

此外,

我知道我可能应该在任何地方使用公共接口,并使用ACL 重新限制访问

不是个好主意。在任何地方使用专用接口,并确保您的节点在公共互联网上不可见。让一个服务器作为一个整体从互联网上访问几乎从来都不是一个好主意——它会让你暴露在各种攻击中,而NAT、LoadBalancer或其他中介系统会减轻这些攻击。

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

要在特定节点上生成pod,请使用nodeSelectorpodAffinity。如果您希望在每个节点或特定节点上运行一个pod,则为它们创建daemonset

最新更新