背景

当使用 Kube-Proxy ipvs 模式时,在 kubernetes 节点上无法使用 127.0.0.1:NodePort 访问服务,而在 Kube-Proxy iptables 模式时该问题并不存在。

按照官方 issues/67730 的分析,原因是:内核 crosses_local_route_boundary 函数进行路由合法性检查失败,数据包被丢弃。

解决方案

如果有使用 127.0.0.1 访问 NodePort 的需求可以使用 iptables 模式。kube-proxy 配置 iptables 模式时,会自动开启内核的 route_localnet 参数:

1
2
3
4
route_localnet - BOOLEAN
    Do not consider loopback addresses as martian source or destination
    while routing. This enables the use of 127/8 for local routing purposes.
    default FALSE

开启上述配置后,linux 将支持 127.0.0.1 地址的路由,并正常进行 NAT 地址转换。

参考