我当前的设置涉及一个 EKS 集群,该集群具有多个命名空间(多租户),分布在私有子网中的许多不同 EKS 节点上。我希望来自 Pod 的出站流量每个命名空间都有一个专用的 EIP。据我所知,没有现成的解决方案可以解决此问题。我在网上搜索了很长时间,但徒劳无功。以下是一些我尝试过但最终遇到障碍的解决方案。
Istio Egress Gateway 允许您通过专用的 egress 网关 pod 引导来自 pod 的所有出站流量。但 egress 网关 pod 将假定其运行所在节点的 IP,这不适用于我的用例。此外,我还没有找到关于如何在多个节点上设置多个 egress 网关 pod 的详细文档。
Calico Egress Gateway 与 Istio Egress Gateway 解决方案非常相似,并且适用相同的约束
自定义解决方案我已开始实施自定义解决方案,其中我在公共子网中设置了多个网关节点,每个节点都有一个专用的 EIP。我现在可以修改私有 EKS 节点中的 IP 路由/网关,以根据 pod 源 IP 通过特定网关节点路由流量。这种解决方案感觉非常笨拙,而且这种解决方案的运营开销非常高。
我已经研究过类似的解决方案这,但一直没有任何进展。
有没有更好的方法/解决方案来解决这个问题?
PS:我的生产集群非常大,我无法为每个命名空间建立一个集群。
我已经将这个问题转发到堆栈溢出也一样。我真的不知道哪个论坛更适合讨论这个问题。很乐意在适当的地方删除它。
答案1
为便于理解,此处总结了关于该主题的讨论:
有一个功能请求创建于GitHub,但自三月以来没有更新。
Calico Enterprise 将通过为命名空间分配 IP 来解决此特定用例,如其 Kubernetes 集成中所述 这里:
Egress Gateway 为离开集群的流量定义一个静态出口 IP,用于 SNAT,并将其应用于特定命名空间。然后,它将命名空间中的一个 pod 指定为出口 pod,并分配一个可路由 IP,专门用于离开集群的出口流量。
但实际上,Egress 网关 pod 无法识别 AWS VPS,因此无法将 EIP 分配给 Egress pod。当流量从网关 pod 中流出时,它会将节点本身的 IP 视为源 IP。
私有子网中有许多不同的 EKS 节点......
EIP 在私有子网中不起作用。如果您在公共子网中指定了工作节点,则可以在这些公共可访问节点上使用 EIP 和反向代理来在私有网络中公开服务。然后,您可以在这些公共节点上使用 Calico Egress Gateway,以便反向代理 pod 依次使用底层 EIP。
答案2
我最终确定了一个解决方案,即通过我在公共子网中设置的“代理 Pod”从私有子网中的 Pod 中传出流量。这些代理 Pod 被分配了公共 IP,因此传出的流量会自动假定这些 IP。从操作上讲,这个解决方案有一些开销,但考虑到限制,这是我能想到的最好的解决方案