iptables nat即时生效问题
background
A:kube-apiserver --secure-port=443,这样访问K8S可以少写port
B:host要起web应用,需要使用443端口
A:需要改kubeconfig,然后重启各个服务,太麻烦,不想弄
因为懒,我们选择增加一个iptables规则
实现
首先增加规则如下:
iptables -t nat -A PREROUTING -p tcp -d 10.x.x.x/32 -m tcp --dport 443 -j DNAT --to-destination 192.168.x.x:8443
发现不起作用,排查ip_forward也没问题,那就只能加日志
iptables -t nat -A PREROUTING -p tcp -d 10.x.x.x/32 -m tcp --dport 443 -j LOG '---nat---'
查看日志
tailf /var/log/kern.log
居然没有,居然没有匹配这条规则
解决
conntrack -D
因为linux通过conntrack记录第一个packet的nat结果,后续的packet都不走nat,所以nat规则没有即时生效。揣测这么做的目的是提高iptables效率,毕竟一个link的所有packet都走nat规则实在没必要。
网友评论