【理解云容器网络】3-基础篇-路由介绍
【摘要】 介绍路由与路由策略
路由
路由是指设备从一个接口上收到数据,根据数据包的目的地址进行定向转发到另一个接口的过程。
路由表是一个网络设备(如路由器、交换机、主机等)中存储的表格,包含了该设备可到达其他网络的信息和如何到达这些网络的路径。
我们可以在linux系统上执行route -n
查看路由表:
- 第一条记录表示:如果目的地址在路由表中未匹配到其他记录则从eth0网卡出去
- 第二条记录表示:目的地址属于10.247.0.0/8网段的数据包统一从veth1网卡出去
注意:如果有多条记录与目的地址匹配,则掩码越精确优先级越高
路由策略
传统路由只能根据目的地址进行转发,为了使路由规则更加灵活,linux内核增加了路由策略,它使网络管理员不仅能够根据目的地址而且能够根据报文大小,应用或IP源地址等属性来选择转发路径。
路由策略由策略和多个路由表组成,数据包先根据策略选择一个路由表,然后根据路由表的记录进行转发
可以使用命令ip rule
查看路由策略:
- 策略优先级列:冒号之前的数字,表示策略被匹配的优先顺序,数字越小,越早被匹配,范围是0~32767。默认0、32766、32767三个优先级别已被占用。如果在添加规则时没有定义优先级别,那么默认的优先级别会从32766开始递减,可以通过prio ID参数在设置路由表时添加优先级。
- 匹配规则列:
from,这里显示的是匹配规则,当前表示的是从哪里来的数据包
to – 目的地址(这里是选择规则时使用,查找路由表时也使用)
tos – IP包头的TOS(type of sevice)域
dev – 物理接口
fwmark – 防火墙参数 - 路由表名:loacl/main/default, 这些都是路由表名称,表示数据包要根据那个路由表送出去。local表包含本机路由及广播信息,main表就是我们route -n看到的内容(main表默认路由策略优先级为32766),default表默认为空。
ip rule命令使用示例
-
根据源ip不同指定相应的路由表100/200,并通过pref参数指定优先级,table 后只能指定数字作为表名id。
ip rule add from 192.168.0.0/24 table 100 pref 1000 ip rule add from 192.168.1.0/24 table 200 pref 1001
-
使用
ip rule
命令查看新增路由策略
-
通过修改rt_tables文件修改表id,如果路由表id记不住,可以修改文件
/etc/iproute2/rt_tables
进行表名和表id的映射
再次查看,查询结果显示表名
-
为路由表100/200添加默认路由
ip route add default via 192.168.0.1 dev eth0 table table100 ip route add default via 192.168.1.1 dev eth1 table table200
-
查看路由表信息
~]# ip route show table table100 default via 192.168.0.1 dev eth0 ~]# ip route show table table200 default via 192.168.1.1 dev eth1
路由(route -n)和路由策略(ip rule)关系
route -n 查看的是默认main路由表内容,对应的路由策略优先级为32766,属于低优先级路由策略,可以通过ip rule插入指定优先级的路由策略。
CCE Turbo集群路由策略分析
下图为Turbo集群容器访问ClusterIP场景的走线图
- 容器根据路由表让数据包从veth1网卡出去,直接到达节点上虚拟设备对的另一端veth_1ce586bb
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0 10.247.0.0 169.254.1.1 255.255.0.0 UG 0 0 0 veth1 100.64.0.0 169.254.1.1 255.192.0.0 UG 0 0 0 veth1
- 数据包到达节点网络命名空间,匹配防火墙OUTPUT链规则,首先将数据包打标机,然后将目的地址转换成后端实例IP
-A YANGTSE-ENI-MARK -i veth_e01d21eb -j CONNMARK --set-xmark 0x3f20000/0xffff0000 -A YANGTSE-ENI-MARK -i veth_a3f98cc5 -j CONNMARK --set-xmark 0x3f30000/0xffff0000 -A YANGTSE-ENI-MARK -i veth_8824be4c -j CONNMARK --set-xmark 0x42a0000/0xffff0000 -A YANGTSE-ENI-MARK -i veth_1ce586bb -j CONNMARK --set-xmark 0x4360000/0xffff0000
- 从OUTPUT链出来,匹配路由策略,根据默认路由将数据包返回给veth_1ce586bb
~]# ip rule show 0: from all lookup local #匹配这条策略,从上一步分析知道OUTPUT链规则为报文打上标签0x4360000/0xffff0000 10000: from all fwmark 0x4360000/0xffff0000 lookup 1078 10000: from 169.254.1.1 to 192.168.2.86 lookup 1078 32766: from all lookup main 32767: from all lookup default ~]# ip route show table 1078 default via 192.168.2.86 dev veth_1ce586bb onlink 100.64.0.0/10 via 192.168.1.1 dev eth0 onlink 198.19.32.0/19 via 192.168.1.1 dev eth0 onlink
- 数据包回到容器内,由于数据包目的地址变为192.168.2.86,此时走默认路由经由eth0网卡出去直达节点上的ENI弹性网卡eth1(不会经过节点网络命名空间)
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0 10.247.0.0 169.254.1.1 255.255.0.0 UG 0 0 0 veth1 100.64.0.0 169.254.1.1 255.192.0.0 UG 0 0 0 veth1
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)