searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

host-gateway试验拓扑

2024-10-10 02:06:23
2
0

host-gateway试验拓扑

本文介绍flannel一种没有封解包的容器跨主机通信方案:flannel host-gateway模式,相比于UDPvxlan模式,host-gateway模式没有额外的封解包过程,单纯依靠路由表项配置实现容器跨主机通信网络。其模型如下图:


需要说明的是:

l   两台机器均已打开内核ipv4转发开关

l   容器分配的IP网段为1.1.0.0/16

l   node1维护1.1.1.0/24 IP

l   node2维护1.1.2.0/24 IP

l   两台主机二层互通

 

具体的实验拓扑如下所示:


 

node1操作

 

ip netns add netns1

ip link add veth1 type veth peer name veth2

ip link set veth2 netns netns1

ip netns exec netns1 ifconfig veth2 1.1.1.2/24 up

ip link add name cni0 type bridge

ifconfig cni0 1.1.1.1/24 up

ip link set dev veth1 master cni0

ifconfig veth1 up

ip netns exec netns1 ip route add default via 1.1.1.1 dev veth2

ip netns exec netns1 route -n

 

 

node2操作

 

ip netns add netns2

ip link add veth3 type veth peer name veth4

ip link set veth4 netns netns2

ip netns exec netns2 ifconfig veth4 1.1.2.2/24 up

ip link add name cni0 type bridge

ifconfig cni0 1.1.2.1/24 up

ip link set dev veth3 master cni0

ifconfig veth3 up

ip netns exec netns2 ip route add default 1.1.2.1 dev veth4

ip netns exec netns2 route -n

 

分析路由

// node1 查看路由
#
 route -n
Kernel
 IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0
         10.0.12.1       0.0.0.0         UG    0      0        0 eth0
1.1.1.0
         0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.0.12.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

//
 node2 查看路由

#route -n
Kernel IP routing table
Destination
     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0
         10.0.12.1       0.0.0.0         UG    0      0        0 eth0
1.1.2.0
         0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.0.12.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

 

根据路由规则,此时node1上可以ping通自己的1.1.1.2node2上可以ping通自己的1.1.2.2但是node1ping不通node2上的1.1.2.2node2上也ping不通node11.1.1.2

 

说明:

// node1

ping -c 1 1.1.1.2  可以通

ping -c 1 1.1.2.2  不通

 

// node2

ping -c 1 1.1.2.2  可以通

ping -c 1 1.1.1.2  不通

 

 

添加路由

因为node1node2二层互通,要使能在node1上访问node2上的1.1.2.2(veth4),可以考虑在node1上添加一条网关是node2 eth0 IP的路由;考虑回程报文,node2也应该加一条网关是node1 eth0 IP的路由,于是有:

 

// node1 操作
ip
 route add 1.1.2.0/24 via 10.0.12.7 dev eth0

route -n

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.12.1       0.0.0.0         UG    0      0        0 eth0
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 cni0
1.1.2.0         10.0.12.7       255.255.255.0   UG    0      0        0 eth0
10.0.12.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

 

// node2 操作

ip route add 1.1.1.0/24 via 10.0.12.11 dev eth0

route -n

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.12.1       0.0.0.0         UG    0      0        0 eth0
1.1.1.0         10.0.12.11      255.255.255.0   UG    0      0        0 eth0
1.1.2.0         0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.0.12.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

 

 

再次验证

node1ping node2上的1.1.2.2以及在node2ping node1上的1.1.1.2

以下实验均通过ping测试

 

ping -c 1 1.1.2.2

ip netns exec netns1 ping -c 1 1.1.2.2

 

 

ping -c 1 1.1.1.2

ip netns exec netns2 ping -c 1 1.1.1.2

 

 

实验小结

flannel host-gateway模式正如host-gateway的含义,通过一条目标主机(host)IP作为网关(gateway)的路由实现容器跨主机通信。相比于UDP模式和vxlan模式,少了tun设备和vxlan设备的封解包过程,在性能上有更大的优势。但是直连路由要求主机间二层互通,这在一定程度上限制了host-gateway的使用场景,特别是公有云环境,不太好满足所有节点二层互通的条件。上文的路由是手动配置的,在flannel的实现中,是通过flanneld进程完成该操作的:每个节点上起一个flanneld进程,flanneld进程起来后注册本节点管理的网段和宿主机IP等信息到etcd(直连etcd或者通过apiServer接口),并且监听其它节点的注册信息,当发现有新节点加入集群时,便会在本节点增加一条网关是新节点IP的路由。

 

 

0条评论
作者已关闭评论
Top123
29文章数
3粉丝数
Top123
29 文章 | 3 粉丝
Top123
29文章数
3粉丝数
Top123
29 文章 | 3 粉丝
原创

host-gateway试验拓扑

2024-10-10 02:06:23
2
0

host-gateway试验拓扑

本文介绍flannel一种没有封解包的容器跨主机通信方案:flannel host-gateway模式,相比于UDPvxlan模式,host-gateway模式没有额外的封解包过程,单纯依靠路由表项配置实现容器跨主机通信网络。其模型如下图:


需要说明的是:

l   两台机器均已打开内核ipv4转发开关

l   容器分配的IP网段为1.1.0.0/16

l   node1维护1.1.1.0/24 IP

l   node2维护1.1.2.0/24 IP

l   两台主机二层互通

 

具体的实验拓扑如下所示:


 

node1操作

 

ip netns add netns1

ip link add veth1 type veth peer name veth2

ip link set veth2 netns netns1

ip netns exec netns1 ifconfig veth2 1.1.1.2/24 up

ip link add name cni0 type bridge

ifconfig cni0 1.1.1.1/24 up

ip link set dev veth1 master cni0

ifconfig veth1 up

ip netns exec netns1 ip route add default via 1.1.1.1 dev veth2

ip netns exec netns1 route -n

 

 

node2操作

 

ip netns add netns2

ip link add veth3 type veth peer name veth4

ip link set veth4 netns netns2

ip netns exec netns2 ifconfig veth4 1.1.2.2/24 up

ip link add name cni0 type bridge

ifconfig cni0 1.1.2.1/24 up

ip link set dev veth3 master cni0

ifconfig veth3 up

ip netns exec netns2 ip route add default 1.1.2.1 dev veth4

ip netns exec netns2 route -n

 

分析路由

// node1 查看路由
#
 route -n
Kernel
 IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0
         10.0.12.1       0.0.0.0         UG    0      0        0 eth0
1.1.1.0
         0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.0.12.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

//
 node2 查看路由

#route -n
Kernel IP routing table
Destination
     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0
         10.0.12.1       0.0.0.0         UG    0      0        0 eth0
1.1.2.0
         0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.0.12.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

 

根据路由规则,此时node1上可以ping通自己的1.1.1.2node2上可以ping通自己的1.1.2.2但是node1ping不通node2上的1.1.2.2node2上也ping不通node11.1.1.2

 

说明:

// node1

ping -c 1 1.1.1.2  可以通

ping -c 1 1.1.2.2  不通

 

// node2

ping -c 1 1.1.2.2  可以通

ping -c 1 1.1.1.2  不通

 

 

添加路由

因为node1node2二层互通,要使能在node1上访问node2上的1.1.2.2(veth4),可以考虑在node1上添加一条网关是node2 eth0 IP的路由;考虑回程报文,node2也应该加一条网关是node1 eth0 IP的路由,于是有:

 

// node1 操作
ip
 route add 1.1.2.0/24 via 10.0.12.7 dev eth0

route -n

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.12.1       0.0.0.0         UG    0      0        0 eth0
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 cni0
1.1.2.0         10.0.12.7       255.255.255.0   UG    0      0        0 eth0
10.0.12.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

 

// node2 操作

ip route add 1.1.1.0/24 via 10.0.12.11 dev eth0

route -n

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.12.1       0.0.0.0         UG    0      0        0 eth0
1.1.1.0         10.0.12.11      255.255.255.0   UG    0      0        0 eth0
1.1.2.0         0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.0.12.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

 

 

再次验证

node1ping node2上的1.1.2.2以及在node2ping node1上的1.1.1.2

以下实验均通过ping测试

 

ping -c 1 1.1.2.2

ip netns exec netns1 ping -c 1 1.1.2.2

 

 

ping -c 1 1.1.1.2

ip netns exec netns2 ping -c 1 1.1.1.2

 

 

实验小结

flannel host-gateway模式正如host-gateway的含义,通过一条目标主机(host)IP作为网关(gateway)的路由实现容器跨主机通信。相比于UDP模式和vxlan模式,少了tun设备和vxlan设备的封解包过程,在性能上有更大的优势。但是直连路由要求主机间二层互通,这在一定程度上限制了host-gateway的使用场景,特别是公有云环境,不太好满足所有节点二层互通的条件。上文的路由是手动配置的,在flannel的实现中,是通过flanneld进程完成该操作的:每个节点上起一个flanneld进程,flanneld进程起来后注册本节点管理的网段和宿主机IP等信息到etcd(直连etcd或者通过apiServer接口),并且监听其它节点的注册信息,当发现有新节点加入集群时,便会在本节点增加一条网关是新节点IP的路由。

 

 

文章来自个人专栏
云原生最佳实践
29 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0