OpenVPN访问K8S集群仅能访问服务端同主机Pod、无法访问其他节点Pod
排查步骤
- 确认跨节点回包路由是否正常
先在非OpenVPN服务端的其他K8s节点执行ip route get <测试用的OpenVPN客户端IP>,如果返回的下一跳不是OpenVPN服务端所在K8s节点的物理IP,说明集群节点不知道该把发往OpenVPN客户端网段的包转发到哪里,这是最常见的故障原因。也可以在目标Pod所在节点的物理网卡抓包,执行tcpdump -i <集群物理网卡名> host <OpenVPN客户端IP>,看是否有来自客户端的请求包,以及是否有回包发出,回包的目标MAC是否为OpenVPN服务端节点的MAC。 - 检查Calico隧道配置是否放行OpenVPN网段
如果集群开启了Calico的IPIP或VXLAN隧道模式,执行calicoctl get felixconfiguration default -o yaml,查看allowedSourcePrefixes、allowedDestinationPrefixes配置,确认OpenVPN客户端网段在允许列表内,没有被隧道封装规则拦截。 - 检查OpenVPN服务端节点的转发配置
首先确认内核IP转发已开启,执行sysctl net.ipv4.ip_forward确认输出值为1。再检查iptables规则:执行iptables -t nat -nvL POSTROUTING,确认存在针对OpenVPN客户端网段访问集群Pod/Service网段的MASQUERADE/SNAT规则,规则示例:-A POSTROUTING -s 10.8.0.0/24 -d 10.244.0.0/16 -j MASQUERADE。同时检查FORWARD链是否允许tun0接口和集群物理网卡之间的流量转发。 - 检查Calico网络策略是否拦截流量
执行calicoctl get networkpolicy,policies -A查看集群所有网络策略,确认目标Pod所在的命名空间没有配置拦截OpenVPN客户端网段入站的规则,也没有限制回包出站的规则。
解决方案
根据排查到的故障点对应处理:
- 全局路由缺失问题
优先通过Calico配置全局静态路由,无需逐台配置节点路由:- 先声明OpenVPN客户端网段为非分配的IP池:
执行apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: openvpn-client-pool spec: cidr: <替换为你的OpenVPN客户端网段,示例:10.8.0.0/24> disabled: true natOutgoing: falsecalicoctl apply -f 上述文件名.yaml生效。
2. 添加全局路由规则,将该网段的下一跳指向OpenVPN服务端所在K8s节点的物理IP:calicoctl apply -f - <<EOF
apiVersion: projectcalico.org/v3
kind: Route
metadata:
name: openvpn-client-route
spec:
dst: <OpenVPN客户端网段>
gateway: <替换为OpenVPN服务端所在节点的物理IP>
EOF
小集群也可以逐台执行命令添加静态路由:`ip route add <OpenVPN客户端网段> via <OpenVPN服务端节点IP>` - 隧道放行规则问题 编辑Felix配置,将OpenVPN客户端网段添加到允许前缀列表: ```bash calicoctl patch felixconfiguration default --type='merge' -p '{"spec":{"allowedSourcePrefixes":["<集群Pod网段>","<OpenVPN客户端网段>"],"allowedDestinationPrefixes":["<集群Pod网段>","<OpenVPN客户端网段>"]}}'
- 转发规则问题
补全内核参数和iptables规则:# 开启IP转发并持久化 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p # 补全SNAT规则 iptables -t nat -A POSTROUTING -s <OpenVPN客户端网段> -d <集群Pod网段> -j MASQUERADE iptables -A FORWARD -i tun0 -o <集群物理网卡名> -j ACCEPT iptables -A FORWARD -o tun0 -i <集群物理网卡名> -j ACCEPT - 网络策略问题
添加对应网络策略放行OpenVPN网段访问即可。
内容的提问来源于stack exchange,提问作者yong.zhang
相关产品推荐
相关产品推荐

