flannel (VXLAN、Host Gateway模式详解)
VXLAN网络设备主要有三种角色,分别是VTEP(VXLAN Tunnel EndPoint)、VXLAN网关、VXLANIP网关1.VTEP是直接与终端连接的设备,负责原始以太报文的VXLAN封装和解封装。2.VXLAN网关除了具备VTEP的功能外,还负责VLAN报文与VXLAN报文之间的映射和转发。VXLAN的虚拟机与传统VLAN的虚拟机之间互访,通过VXLAN网关来完成。3 . VXLANI
·
VXLAN网络设备主要有三种角色,分别是VTEP(VXLAN Tunnel EndPoint)、VXLAN网关、VXLANIP网关
-
1.VTEP是直接与终端连接的设备,负责原始以太报文的VXLAN封装和解封装。
-
2.VXLAN网关除了具备VTEP的功能外,还负责VLAN报文与VXLAN报文之间的映射和转发。VXLAN的虚拟机与传统VLAN的虚拟机之间互访,通过VXLAN网关来完成。
-
3 . VXLANIP网关具有VXLAN网关的所有功能,此外,还负责处理不同VXLAN之间的报文通信。不同VXLAN的虚拟机之间需要互访,必须经过VXLANIP网关完成。
-
node1的容器1通过cni0的网关接口,通过flannel的vxlan模式进行封装,通过eth0网卡出去,进行udp传输,里面搭载了vxlan的封装协议数据包,传输给node2,到达node2后,内核进行识别解封,然后node2的flannel设备再次进行解封,在到达cni0,这样就相当于已经到达了集群的内部了,然后把信息注入到node2的容器2
-
查询k8s的apiserver,从etcd获取分配子网的信息
-
当前node1,node2都有pods,信息都保存在master主机的etcd中。他们是属于不同网段的.他们要通讯是跨主机的
-
访问10.244.1.0/24这个网段要走cni0的网卡,数据包先到达cni0网卡上,在从cni0网卡路由出去
可以看出一端在pod中,一端在cni0网卡上,他们通过虚拟网络进行通讯
-
当我们想访问10.244.2.0/24网段是需要走10.244.2.0这个网关,使用flannel.1这个设备。这就是为什么从cni0出来到达flannel设备。10.244.2.0正是node172上的flannel.1这个设备:
flannel封装VNI
然后matser的flannel开始封装VNI,它有源地址和目的地地址组成
以下Host-GW模式
看图都知道了比vxlan简单咯,直接路由
host-gw 不会封装数据包,而是在主机的路由表中创建到其他主机 subnet 的路由条目,从而实现容器跨主机通信。
kubectl edit configmap -n kube-system kube-flannel-cfg
修改成以下
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "host-gw" //把类型改为host-gw
}
删除pods重建生效
kubectl get pod -n kube-system | grep kube-flannel |awk '{system("kubectl delete pod "$1" -n kube-system")}'
缺点
对于二层网段相同的可以采用 直连路由的方式,相当于host-gw 的方式,对于不同的则采用 flannel 的方式。
编辑
kubectl edit configmap -n kube-system kube-flannel-cfg
修改
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"Directrouting": true //直连路由
#重建生效
kubectl get pod -n kube-system | grep kube-flannel |awk '{system("kubectl delete pod "$1" -n kube-system")}'
也可以达到host-gw的效果
更多推荐
已为社区贡献4条内容
所有评论(0)