【问题标题】:Is it possible to map different pods/services to different node's interfaces in Kubernetes?是否可以将不同的 Pod/服务映射到 Kubernetes 中不同节点的接口?
【发布时间】:2020-02-21 19:42:15
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services kubernetes amazon-eks


    【解决方案1】:

    这通常不是 Kubernetes 中的工作方式。 Pod IP 始终是“私有的”,即不用于 Internet 的集群 IP。您可以使用 LoadBalancer 类型的服务在集群 IP 空间中插入特定的漏洞。在 AWS 术语中,所有 pod 都有私有 IP,您使用 ELB 将特定事物桥接到公共网络。

    【讨论】:

      【解决方案2】:

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

      你为什么不做以下事情:

      1. 为您的 EKS 集群配置公共子网和私有子网的组合
      2. 在“LoadBalancer”类型的服务后面提供“公共” Pod,配置为在您的公共子网中提供 ELBS 或 NLB。
      3. 在“ClusterIP”类型的服务后面配置私有 pod - 并确保 eks 集群的实际节点在您的 vpc 的私有子网中进行配置。

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

      这将您的公共 api 界面限制为在面向公众的服务中公开的“公共”pod 的那些部分,同时让集群的其余部分保持黑暗。

      还有,

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

      不是一个好主意。在任何地方都使用私有接口,并确保您的节点在公共互联网上不可见。让服务器作为一个整体可从 Internet 访问几乎从来都不是一个好主意 - 它会使您面临各种攻击,这些攻击将被 NAT、LoadBalancers 或其他中间系统缓解。

      【讨论】:

      • Use private interfaces everywhere, and ensure your nodes are not visible from the public internet 但是我如何 ssh 进入我的节点呢?
      • 通过公共子网中的强化 ssh 跳转服务器,或者更好的是,通过 VPN 进入您的 vpc。问题是 - 你为什么首先要进入你的 eks 节点?您需要对其进行的任何配置都应作为其配置的一部分进行。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-07-13
        • 2016-10-20
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2018-02-09
        • 2018-01-23
        相关资源
        最近更新 更多