opensips部署在k8s上,需要采用
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
默认的方式下,网络会走k8s网关。无论是普通的数据包,还是上层协议。尤其是sip,我们发现sip消息在网关层上相当于一层proxy,这一层处理较为复杂(本人尚未搞的很通透)。
信令的传输首先在网关侧会做转发,路由由2层网络层控制。如外部的UAC向opensips发送注册消息.
我们先看一下k8s的网络部分
网络层级
pod里的各个容器共享一个网络,在我们目前的结构中,pod中只有一个容器。
opensips首先通过pod里的网关,该ip一般为10.x.x.1。网关会找到Veth设备对,找到容器内网地址;然后再由内网地址出局(可能经过公网地址,如果存在的话)
在这种网络下,注册消息的流程如下。过程可能跟上面描述相反,但不影响理解
正常注册流程
在这种网络情况下,每次重新部署opensips镜像时,k8s的pod网关似乎突然就不“工作”了。信令在这一层就不再转发了。
我个人的猜测可能是端口和服务(镜像)存在某种映射关系,镜像发生了改变,这层映射可能依然是老的,所以路由找不到了。当然这种猜测没有得到证实。
异常注册流程
网友评论