通过单个节点转发所有 Kubernetes 流量

Forwarding all Kubernetes traffic through a single node

我有一个 Kubernetes 集群,在两个不同的子网(xy)中有多个节点。我在 x 子网和外部网络之间设置了 IPsec VPN 隧道。现在我的问题是,在 y 子网上的节点中安排的 pods 无法向外部网络发送请求,因为它们位于 VPN 隧道未覆盖的节点中。现在无法创建另一个 VPN 来覆盖 y 子网。 k8s 中有没有办法强制所有 pods' 流量通过单一来源?或者任何干净的解决方案,即使在 k8s 之外?

将此作为社区 wiki 发布,请随意编辑和扩展。


kubernetes 中没有内置功能可以做到这一点。但是,有两个可用选项可以帮助实现所需的设置:

  1. Istio

如果服务广为人知,则可以使用 istio egress gateway。我们对这个用例感兴趣:

Another use case is a cluster where the application nodes don’t have public IPs, so the in-mesh services that run on them cannot access the Internet. Defining an egress gateway, directing all the egress traffic through it, and allocating public IPs to the egress gateway nodes allows the application nodes to access external services in a controlled way.

  1. Antrea 出口

可以使用另一种解决方案 - antrea egress。用例是:

如果满足以下任一条件,您可能会对使用此功能感兴趣:

  • A consistent IP address is desired when specific Pods connect to services outside of the cluster, for source tracing in audit logs, or for filtering by source IP in external firewall, etc.

  • You want to force outgoing external connections to leave the cluster via certain Nodes, for security controls, or due to network topology restrictions.