芯赛云技术大咖说|手动实现Flannel 网络插件VXLAN模式

随着企业数字化转型步伐的加快,云原生技术日益成为推动业务创新和增长的关键力量。在这个过程中,Kubernetes作为云原生技术的核心,以其出色的可扩展性、灵活性和自动化管理能力,赢得了众多企业的青睐。然而,随着Kubernetes集群规模的扩大和复杂度的增加,如何确保集群内部的网络通信高效、稳定且安全,成为了企业需要面对的重要挑战。

Flannel网络插件以其简单易用、可扩展性强的特点,在Kubernetes集群中得到了广泛应用。特别是其VXLAN模式,通过封装数据包并在不同物理网络间进行传输,实现了跨子网的容器通信,有效解决了分布式系统中常见的网络通信问题。为了进一步探索Flannel VXLAN模式的实现机制和工作原理,本文将详细介绍如何手动实现Flannel 网络插件VXLAN模式。

Kubernetes网络是Kubernetes集群中至关重要的组成部分,负责在集群中的各个节点之间提供可靠的网络通信。它不仅提供了容器间的通信能力,还支持服务暴露、负载均衡、跨节点通信、安全控制和自动化配置等关键功能。一个高效、可靠的Kubernetes网络是实现容器化应用程序的成功关键之一。

在Kubernetes集群中,每个pod都有自己唯一的IP地址,该IP地址在集群内可路由。这个IP地址通常由Kubernetes网络插件分配,该插件负责配置集群网络。网络插件是Kubernetes网络架构的关键组件,如Calico、Flannel和Weave Net。

图片

Flannel 是作为Kubernetes 中常用的网络插件之一,它提供了网络层的抽象和管理,使得不同节点上的容器可以互相通信。Flannel 支持多种网络模式,其中最常用的是基于VXLAN(Virtual Extensible LAN)的模式。VXLAN 是一种网络封装技术,通过在数据包中添加额外的头部信息来实现跨子网的通信。Flannel 使用 VXLAN 模式创建虚拟网络,并在每个节点上创建 VXLAN 设备,这些设备负责将容器的数据包封装并转发到目标节点。

Flannel 通过创建Overlay网络和使用VXLAN 技术,实现了跨节点的容器通信。Flannel 的简单易用性、可扩展性和网络隔离功能使其成为构建容器化应用程序的重要组件之一。下面是手动实现两台机器的VXLAN模式互通的一些方法。

图片

实现过程

01Node1节点操作

1. 创建vxlan的模式的虚拟设备,设备名vxlan11,网络表示符为32,UDP端口为4787,远程访问地址192.168.209.130,本机地址192.168.209.144,底层设备ens33,给vxlan设备一个隧道ip,并启动:

ip link add vxlan32 type vxlan id 32 dstport 4787 remote 192.168.209.144 local 192.168.209.130  dev ens33

ip addr add 10.244.1.0/32 dev vxlan32

ip link set vxlan32 up

2. 创建网桥并启动,给网桥一个网关地址,启动虚拟网桥设备。

ip link add br1 type bridge

ip addr add 10.244.1.1/24 dev br1

ip link set br1 up

3. 创建命名空间并且创建虚拟地址实现对端绑定。

ip netns add ns1

ip link add veth-ns1 type veth peer name veth-br1

ip link set veth-ns1 netns ns1

ip netns exec ns1 ip address add 10.244.1.2/24 dev veth-ns1

ip netns exec ns1 ip link set veth-ns1 up

ip link set veth-br1 master br1

ip link set veth-br1 up

4. 创建命名空间出去的路由,创建流量从隧道出去的路由。

ip r a 10.244.2.0/24 via 10.244.2.0 dev vxlan32 onlink

ip netns exec ns1 ip route add 10.244.2.0/24 via 10.244.1.1 dev veth-ns1

5.内核开启路由转发,路由转发意思是节点内不同设备之间允许路由转发。

sysctl -w net.ipv4.ip_forward=1

02Node2节点操作

1.在节点二创建vxlan虚拟设备。

ip link add vxlan32 type vxlan id 32 dstport 4787 remote 192.168.209.130 local 192.168.209.144  dev ens33

ip addr add 10.244.2.0/32 dev vxlan32

ip link set vxlan32 up

2.创建网桥并启动,给网桥一个网关地址,启动虚拟网桥设备。

ip link add br2 type bridge

ip addr add 10.244.2.1/24 dev br2

ip link set br2 up

3.创建命名空间并且创建虚拟地址实现对端绑定。

ip netns add ns2

ip link add veth-ns2 type veth peer name veth-br2

ip link set veth-ns2 netns ns2

ip netns exec ns2 ip address add 10.244.2.2/24 dev veth-ns2

ip netns exec ns2 ip link set veth-ns2 up

ip link set veth-br2 master br2

ip link set veth-br2 up

4.创建命名空间出去的路由,创建流量从隧道出去的路由。

ip r a 10.244.1.0/24 via 10.244.1.0 dev vxlan32 onlink

ip netns exec ns2 ip route add 10.244.1.0/24 via 10.244.2.1 dev veth-ns2

5.内核开启路由转发。

sysctl -w net.ipv4.ip_forward=1

03测试连通性

1.节点 1 访问节点 2`vxlan`设备

[root@ns1 ~]# ping 10.244.2.0

PING 10.244.2.0 (10.244.2.0) 56(84) bytes of data.

64 bytes from 10.244.2.0: icmp_seq=1 ttl=64 time=0.223 ms

64 bytes from 10.244.2.0: icmp_seq=2 ttl=64 time=0.301 ms

2.节点 1 命名空间访问节点 2 命名空间

[root@ns1 ~]# ip netns exec ns1 ping 10.244.2.2

PING 10.244.2.2 (10.244.2.2) 56(84) bytes of data.

64 bytes from 10.244.2.2: icmp_seq=1 ttl=62 time=0.216 ms

3.数据包分析

Node1下命名空间ns1,访问Node2下命名空间ns2,分析数据过经过各个设备mac地址之间关系。

4.Node1 br1 网桥数据分析

10.244.1.2是Node1命名空间下IP,10.244.2.2是Node2命名空间下IP,10.244.2.2的mac地址变成了br1网桥mac,这符合网络地址转换原则。

图片

5.Node1 vxlan 设备数据分析

10.244.1.2的mac地址变成了本端vxlan设备mac,10.244.2.2的mac地址也变成了对端vxlan设备mac。

图片

6.Node1 物理网口数据分析

在物理口发现没有xvlan设备的信息,只有本端口发送给对端的UDP协议数据,经过解码数据包,发现数据包报头被封装成了vxlan格式。

图片

图片

7.Node2 vxlan 设备数据分析

数据包在到达对端的物理网口后会解包,根据`vxlan`的`vni`解析到需要发送给`vxlan32`设备,并且发现`mac`也都是`vxlan`设备`mac`,此时证明隧道成立。

图片

图片

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芯赛云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值