请求修改K3S的UDP端口分配以解决Asterisk/FreePBX通信端口映射异常问题
请求修改K3S的UDP端口分配以解决Asterisk/FreePBX通信端口映射异常问题
老哥,你遇到的这个问题完全是K3S内置的Flannel网络插件在搞鬼——你找到的那两行iptables规则里的--random-fully参数,会让SNAT(源地址转换)完全随机选择源端口,而不是保持和协商好的目标端口一致。这就直接导致Asterisk按照约定往端口XXXXX发数据时,K3S偷偷把它映射成了随机端口YYYYY,你的CRM应用自然收不到,通话状态肯定异常。
下面给你两个可行的解决办法,优先用第一种,因为是持久化的:
方法一:修改Flannel配置,禁用随机端口映射(持久生效)
这是最靠谱的方案,直接从根源上让Flannel不再随机UDP端口:
- 先查看当前Flannel的配置文件(ConfigMap):
kubectl get configmap kube-flannel-cfg -n kube-system -o yaml - 编辑这个ConfigMap,找到
net-conf.json字段,添加或修改Randomize配置为false(如果原来有IPMasq字段,也可以确认下是否需要调整,但核心是Randomize):
注:如果你的Flannel配置里没有{ "Network": "10.127.0.0/16", "Backend": { "Type": "vxlan" }, "Randomize": false }Randomize字段,直接加上就行;如果IPMasq设为true,改成false也能解决,但可能影响集群对外流量的SNAT,所以优先改Randomize参数。 - 保存配置后,重启Flannel的Pod让新配置生效:
K3S会自动重新创建Flannel Pod,新的iptables规则就不会带kubectl delete pods -n kube-system -l app=flannel--random-fully了。
方法二:临时修改iptables规则(测试用,重启后失效)
如果只是想快速验证问题根源,可以手动去掉iptables规则里的--random-fully参数:
# 删除第一条带--random-fully的规则 iptables -t nat -D FLANNEL-POSTRTG -s 10.127.93.0/25 ! -d 224.0.0.0/4 -m comment --comment "flanneld masq" -j MASQUERADE --random-fully # 添加不带随机参数的规则 iptables -t nat -A FLANNEL-POSTRTG -s 10.127.93.0/25 ! -d 224.0.0.0/4 -m comment --comment "flanneld masq" -j MASQUERADE # 同样处理第二条规则 iptables -t nat -D FLANNEL-POSTRTG ! -s 10.127.93.0/25 -d 10.127.93.0/25 -m comment --comment "flanneld masq" -j MASQUERADE --random-fully iptables -t nat -A FLANNEL-POSTRTG ! -s 10.127.93.0/25 -d 10.127.93.0/25 -m comment --comment "flanneld masq" -j MASQUERADE
不过这个方法只是临时的,Flannel重启或者K3S节点重启后,规则会被重新生成,所以只适合测试验证。
另外还要提醒你:如果你的CRM应用是通过NodePort或LoadBalancer暴露给Asterisk的,要确保对应的UDP端口已经正确在K3S节点上开放,并且Asterisk服务器能正常访问这些端口。如果是集群内部的通信,那修改Flannel的配置就足够解决端口随机映射的问题了。
备注:内容来源于stack exchange,提问作者Vito Drugo Degirolamo
相关产品推荐
相关产品推荐

