Linux 虚拟服务器:NAT 返回路径

Linux 虚拟服务器:NAT 返回路径

我正在尝试在 Kubernetes 前面设置一个 LVS 负载均衡器:Calico 用作容器网络,因此每个 pod 在其主机中都有自己的网络接口。外部 IP、路由和路由规则使用 keepalived 进行管理。我的托管服务提供商分配的每个子网都有自己的路由器。服务器有两个连接到 Internet 的物理接口。外部 IP 在第二个接口上可用。

配置如下:第一个接口有一个全局 IP 地址和一个默认路由。第二个接口有一个私有 IP。它还具有我的托管服务提供商提供的所有附加 IP。由于来自附加 IP 的所有数据包都必须通过特殊的默认网关路由,因此我添加了路由表和规则。

到目前为止,一切都按预期进行。为了使 Kubernetes 服务在 IP 中可用,我在某些节点上添加了 LVS。

我的问题是:来自互联网的数据包到达我的 Kubernetes pod,但它们的答案没有返回到互联网。数据包消失在我的 Kubernetes 节点的某个地方。来自我的 pod 的答案数据包使用 pod IP 作为源,必须由 NAT 重写。

查看 iptables 规则时,我没有看到 LVS 的规则。它们在哪里?LVS NAT 规则何时执行?它们是否绑定到接口?在对应答数据包进行 NAT 之前是否已决定转发路径和接口?

答案1

我缺少启用 netfilter conntrack 对 LVS 连接的支持。请参阅http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.filter_rules.html有关 LVS netfilter 交互的描述。

可以使用以下方法完成:

sysctl net.ipv4.vs.conntrack=1

相关内容