tags:
- k8s网络
- eNSP
- wireshark
- VxLAN
- 第八课 k8s网络基础学习-VxLAN基础
- 第一节 VxLAN
- 1.1 VxLAN背景
- 1.2 VxLAN解决的问题
- 1.3 VxLAN数据包
- 1.4 VxLAN的拓扑
- 1.5 VxLAN的eNSP实验
- 第二节 VxLAN的linux实践
- 2.1 VxLAN的点对点linux实验
- 2.2 VxLAN的组播linux实验
- 2.3 VxLAN的Application
- RFC定义了VLAN扩展方案VXLAN (Virtual eXtensible Local Area Network,虚拟扩展局域网)。VXLAN采用MACin UDP (User Datagram Protocol)封装方式,是NVO3(Network Virtualization over Layer 3)中的一种网络虚拟化技术。
- 服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时,为了实现业务的灵活变更,虚拟机VM需要能够在网络中不受限迁移,这给传统的二层+三层数据中心网络带来了新的挑战。
- 虚拟机规模受网络设备表项规格的限制
- 在传统二层网络环境下,数据报文是通过查询MAC地址表进行二层转发。服务器虚拟化后,VM的数量比原有的物理机发生了数量级的增长,伴随而来的便是VM网卡MAC地址数量的空前增加。而接入侧二层设备的MAC地址表规格较小,无法满足快速增长的VM数量。
- 网络隔离能力有限
- VLAN作为当前主流的网络隔离技术,在标准定义中只有12比特,因此可用的VLAN数量仅4096个。对于公有云或其它大型虚拟化云计算服务这种动辄上万甚至更多租户的场景而言,VLAN的隔离能力无法满足。
- 虚拟机迁移范围受限
- 由于服务器资源等问题(如CPU过高,内存不够等),虚拟机迁移已经成为了一个常态性业务。
- 虚拟机迁移是指将虚拟机从一个物理机迁移到另一个物理机。为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址、MAC地址等参数保持不变,这就要求虚拟机迁移必须发生在一个二层网络中。而传统的二层网络,将虚拟机迁移限制在了一个较小的局部范围内,传统网络中实际上是做不到的。
- 为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生,其能够很好的解决上述问题。
- 针对虚拟机规模受设备表项规格限制
- VXLAN将管理员规划的同一区域内的VM发出的原始报文封装成新的UDP报文,并使用物理网络的IP和MAC地址作为外层头,这样报文对网络中的其他设备只表现为封装后的参数。因此,极大降低了大二层网络对MAC地址规格的需求。
- 针对网络隔离能力限制
- VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标识VNI (VXLAN Network ldentifier),由24比特组成,支持多达16M的VXLAN段,有效得解决了云计算中海量租户隔离的问题,可以有1000万台虚拟机。
- 针对虚拟机迁移范围受限
- VXLAN将VM发出的原始报文进行封装后通过VXLAN隧道进行传输,隧道两端的VM不需感知传输网络的物理架构。这样,对于具有同一网段IP地址的VM而言,即使其物理位置不在同一个二层网络中,但从逻辑上看,相当于处于同一个二层域。即VXLAN技术在三层网络之上,构建出了一个虚拟的大二层网络,只要虚拟机路由可达,就可以将其规划到同一个大二层网络中。这就解决了虚拟机迁移范围受限问题。
- 为了解决数据中心网络服务器虚拟化以及虚拟机不受限迁移问题,VXLAN特性应运而生。由于VXLAN特性在本质上属于一种VPN技术,因此,其同样能够应用在园区网络中,以实现分散物理站点之间的二层互联以及站点间的三层互联。
- 虚拟机迁移是指将虚拟机从一个物理机迁移到另一个物理机。为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址、MAC地址等参数保持不变,这就要求虚拟机迁移必须发生在一个二层网络中。而传统的二层网络,将虚拟机迁移限制在了一个较小的局部范围内。
- 在当前的园区网中,租户站点与站点之间为了实现二、三层互联,需要部署相关设备以及多种二、三层网络技术。而基于Overlay的VXLAN技术,不感知当前的物理网络,能够在任意路由可达的网络上叠加二层虚拟网络,实现站点与站点之间的二层互联。同时,基于VXLAN三层网关,也能够实现站点与站点之间的三层互联。因此,通过VXLAN技术实现租户不同站点之间的互联更加快速、灵活。
- Flags (8 bits)其中l必须被设置为1,才是有效的。R需设为0。
- VXLAN Segment ID/VXLAN Network ldentifier (VNI)-为24bit,是虚拟网络的标识。
- Reserved fields (24 bits and 8 bits)-必须被设置为0.
- VXLAN外层隧道的目的端口号为4789,为专为VXLAN分配的端口号。
- UDP Body实现基于流的负载分担。[SIP+DIP+SPORT+DPORT+TCP/UDP]
-
VXLAN技术是一种大二层的虚拟网络技术,主要的技术原理就是引入一个UDP格式的外层隧道,作为数据的链路层,而原有数据报文内容作为隧道净荷来传输。由于外层采用了UDP作为传输手段,就可以让净荷数据轻而易举的在二三层网络中传送,为了能够支持原有VLAN广播域寻址能力,VXLAN还引入了三层IP组播来代替以太网的广播,让BUM(Broadcast广播,unknown unicast,multicast)报文通过广播方式在虚拟网络中传送。
-
Underlay 网络:
- 以太网从最开始设计出来就是一个分布式网络,没有中心的控制节点,网路中的各个设备之间通过协议传递的方式学习网络的可达信息,由每台设备自己决定要如何转发,这直接导致了没有整体观念,不能从整个网络的角度对流量进行调控。由于要完成所有网络设备之间的互通,就必须使用通用的语言,这就是网络协议,RFC就是网络协议的法律,相当于国际法,各个设备供应商遵从国际法行事,就基本保证了整个网络世界的正常运行。Underlay就是当前数据中心网路基础转发架构的网络,只要数据中心网络上任意两点路由可达即可,指的是物理基础层。我们可以通过物理网络设备本身的技术改良、扩大设备数量、带宽规模等完善Underlay网络,其包含了一切现有的传统网络技术。
-
Overlay网路:
- Overlay在网络技术领域,是一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网络不进行大规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离。它是建立在已有网络上的虚拟网,用逻辑节点和逻辑链路构成了Overlay网络。Overlay网络是具有独立的控制和转发平面,对于连接在Overlay边缘设备之外的终端系统来说,物理网络是透明的。通过部署Overlay网络,可以实现物理网络向云和虚拟化的深度延伸,使云资源池化能力可以摆脱物理网络的重重限制,是实现云网融合的关键。Overlay网络也是一个网络,不过是建立在Underlay网络之上的网络。Overlay网络的节点通过虚拟的或逻辑的链接进行通信,每一个虚拟的或逻辑的链接对应于Underlay网络的—条路径(Path),由多个前后衔接的链接组成。
-
Overlay技术可以分为网络Overlay,主机Overlay和混合式Overlay三大类。网络Overlay是指通过控制协议对边缘的网络设备进行网络构建和扩展,也就是本文所讲的Overlay网络技术。Overlay网络技术多种多样,一般采用TRILL、VxLAN、GRE、NVGRE等隧道技术。TRILL技术是电信设备厂商主推的新型环网技术;NVGRE和STT是IT厂商主推的Overlay技术;以及大家非常熟悉的VXLAN (Virtual eXtensible LAN)等基于隧道的封装技术。由于这些也都是新增的协议,均需要升级现有网络设备才能支持。Overlay网络中应用部署的位置将不受限制,网络设备可即插即用、自动配置下发,自动运行,Overlay网络业务变化,基础网络不感知,并对传统网络改造极少,最为重要的是虚拟机和物理服务器都可以接入Overlay网络中。
-
上面VTEP用到的是需要单独导入镜像的VE12800。
-
目的:使用VxLAN完成192.168.1.2和192.168.1.3之间的互联互通。模拟器使用eNSP。Underlay网络使用OSPFv2,overlay使用VxLAN。
-
这里要注意CE1和CE2必须选择CE12800型号的路由器,其他的路由器封装不了vxlan的协议。其他LSW1和LSW2可以选择普通的交换机。
# PC1 配置 ip: 192.168.1.1 掩码: 255.255.255.0 网关:0.0.0.0 # PC2 配置 ip: 192.168.1.2 掩码: 255.255.255.0 网关:0.0.0.0 # 这里不能配网关因为网关是三层的 我们要走二层网络 # 配置交换机LSW1 sys sysname LSW1 int g0/0/2 port link-type access port default vlan 10 dis thi q q int g0/0/1 port link-type trunk port trunk allow-pass vlan all # 允许所有vlan的tag通过 正式环境中写具体的vlan这里是10 dis thi # 配置交换机LSW2 sys sysname LSW2 int g0/0/2 port link-type access port default vlan 10 dis thi q q int g0/0/1 port link-type trunk port trunk allow-pass vlan all # 允许所有vlan的tag通过 正式环境中写具体的vlan这里是10 dis thi # 配置CE12800类型交换机 CE1 sys sysname CE1 commit # 这种设备比较核心 所以需要提交才能生效 interface g1/0/1.10 mode l2 #进入子接口10 可以取成任意值 为了便于维护和vlan一致 commit # 提交 dis thi encapsulation dot1q vid 10 # 数据包封装成dot1q commit # 提交 dis thi q bridge-domain 10 # bd域10下对应的vxlan的vni是10 只是为了好管理 vni的范围比bd的范围大的多 commit vxlan vni 10 commit dis thi q interface g1/0/1.10 mode l2 # 在接口处引用bd域10 bridge-domain 10 undo shutdown # CE12800中接口默认都是shutdown的 dis cu 查看是否是shutdown commit dis thi # 配置CE1和CE2之间的tunnel int g1/0/0.10 undo portswitch # 因为是交换机 默认是交换的口子 所以要先关闭交换 才能配置ip地址 ip a 10.1.1.1 24 undo shutdown commit dis thi # 配置CE12800类型交换机 CE2 sys sysname CE2 commit # 这种设备比较核心 所以需要提交才能生效 interface g1/0/1.10 mode l2 #进入子接口10 可以取成任意值 为了便于维护和vlan一致 commit # 提交 dis thi encapsulation dot1q vid 10 # 数据包封装成dot1q commit # 提交 dis thi q bridge-domain 10 # bd域10下对应的vxlan的vni是10 只是为了好管理 vni的范围比bd的范围大的多 commit vxlan vni 10 commit dis thi q interface g1/0/1.10 mode l2 # 在接口处引用bd域10 bridge-domain 10 undo shutdown # CE12800中接口默认都是shutdown的 dis cu 查看是否是shutdown commit dis thi # 配置CE1和CE2之间的tunnel int g1/0/0.10 undo portswitch # 因为是交换机 默认是交换的口子 所以要先关闭交换 才能配置ip地址 ip a 10.1.1.2 24 undo shutdown commit dis thi # GE1和GE2要能相互学习到对方的路由这里用ospf学习 # GE1 int 10 ip a 1.1.1.1 32 commit ospf router-id 1.1.1.1 area 0 network 0.0.0.0 255.255.255.255 dis thi commit # GE2 int 10 ip a 2.2.2.2 32 commit ospf router-id 2.2.2.2 area 0 network 0.0.0.0 255.255.255.255 dis thi commit # 测试一下成功 就代表 underlay的网络已经完成 # GE1 ping 10.1.1.2 dis ospf peer brief ping 2.2.2.2 # 创建tunnel完成overlay的网络 # CE1 interface Nve 1 # Network virtual equipment 网络虚拟设备 commit source 1.1.1.1 vni 10 head-end peer-list 2.2.2.2 # CE1和CE2形成的头端列表 就是说数据包vni是10 我就封装 对端是2.2.2.2 commit q dis ip int brief # 查看一些配置 # CE2 interface Nve 1 commit source 2.2.2.2 vni 10 head-end peer-list 1.1.1.1 # CE1和CE2形成的头端列表 commit dis ip int brief # 查看一些配置 # 抓包测试 # 在CE1的g1/0/0抓包 pc1上ping pc2 # 如果ping不通可能是模拟器的bug 配置好不要关闭在重启。 ping 192.168.1.2第二节 VxLAN的linux实践 2.1 VxLAN的点对点linux实验
- 两台机器构成一个VxLAN网络,每台机器上有一个VTEP,VTEP通过它们的IP互相通信。
# 升级一下内核 uname -r rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y grub2-set-default 0 reboot uname -r # 第一台主机 192.168.44.128 # 这条命令创建一个名字为 vxlan0,类型为 vxlan 的网络 interface,后面是 vxlan interface 需要的参数: # id 5:指定 VNI 的值,这个值可以在 1 到 2^24 之间 # dstport:vtep 通信的端口,linux 默认使用 8472(为了保持兼容,默认值一直没有更改),而 IANA 分配的端口是 4789,所以我们这里显式指定了它的值 # remote 172.12.1.11:对方 vtep 的地址,类似于点对点协议 local 172.12.1.10:当前节点 vtep 要使用的 IP 地址 # dev ens33:当节点用于 vtep 通信的网卡设备,用来读取 IP 地址。 ip link add vxlan0 type vxlan id 5 dstport 4789 remote 192.168.44.133 local 192.168.44.128 dev ens33 ip -d link show dev vxlan0 ip addr add 10.20.1.2/24 dev vxlan0 ip link set vxlan0 up ip a ip route bridge fdb route -n # 第二台主机192.168.44.133 ip link add vxlan0 type vxlan id 5 dstport 4789 remote 192.168.44.128 local 192.168.44.133 dev ens33 ip -d link show dev vxlan0 ip addr add 10.20.1.3/24 dev vxlan0 ip link set vxlan0 up ip a ip route bridge fdb route -n # 测试 ping 10.20.1.3 # 在第一台主机上ping 并抓包解析2.2 VxLAN的组播linux实验
- 要组成同一个VxLAN网络,VTEP必须能感知到彼此的存在。多播组的功能就是把网络中的节点组成一个虚拟的组。
# 第一台主机 192.168.44.128 ip link add vxlan1 type vxlan id 6 dstport 4789 group 239.1.1.1 dev ens33 ip addr add 192.168.1.1/24 dev vxlan1 ip link set vxlan1 up route -n # 第二台主机 192.168.44.133 ip link add vxlan1 type vxlan id 6 dstport 4789 group 239.1.1.1 dev ens33 ip addr add 192.168.1.2/24 dev vxlan1 ip link set vxlan1 up route -n # 测试 ping 192.168.1.2 # 在第一台主机上ping 并抓包解析2.3 VxLAN的Application
- 需要手工为每一个VTEP配置静态VxLAN Tunnel,且每增加一个VTEP设备需要所有的VTEP手工配置添加到该VTEP间的VxLAN Tunnel,维护复杂度高。N=n(n-1)/2
- 手动配置肯定不现实,一般我们用BGP的EVPN做VxLAN的动态配置。



